[OpenBIOS] Nested [IFDEF]s not working?

Andreas Färber andreas.faerber at web.de
Sat Dec 4 01:11:24 CET 2010


Am 02.12.2010 um 12:25 schrieb Mark Cave-Ayland:

> Andreas Färber wrote:
>> Hello,
>> A construct like:
>> [IFDEF] CONFIG_PPC
>>  [IFDEF] CONFIG_PPC64
>>    5
>>  [ELSE]
>>    4
>>  [THEN]
>> [ELSE]
>>  [IFDEF] CONFIG_SPARC64
>>    6
>>  [ELSE]
>>    3
>>  [THEN]
>> [THEN]
>> has been seen to return, e.g., 4 3 according to the debug word.
>> Is this nesting forbidden in Forth? Easily fixable? A better way to  
>> do this? I do want a final catch-all since returning no value would  
>> have unexpected results, and we currently do not have a define  
>> CONFIG_PPC32 so that a concatenation of independent [IFDEF]... 
>> [THEN]s wouldn't work.
>
> IIRC [IFDEF] [ELSE] and [THEN] are simply Forth words that swallow  
> the input unless the condition is met.
>
> I suspect it will be similar to the bbranch & friends Fcode  
> instructions whereby at compile time the current nested state is  
> held on the dstack.

I don't really understand the code in forth/lib/preprocessor.fs but it  
looks as if some state is held in three variables. Also the [ELSE]  
case handling in the [IF] loop looks unintuitive...

http://repo.or.cz/w/openbios/afaerber.git/blob/HEAD:/forth/lib/preprocessor.fs

Andreas


More information about the OpenBIOS mailing list