- Subject: Re: [Jed-users-l] .jedrc again
- From: "John E. Davis" <davis@xxxxxxxxxxxxx>
- Date: Sun, 12 Aug 2012 20:53:26 -0400
Mike McClain <mike.junk@xxxxxxxxxxx> wrote:
> If I put 'if (BATCH == 0) { ... }' around the key assignments or function
> definitions in mykeys.sl or myfuncs.sl I get this error:
> 'Function nesting is illegal'
[...]
> Suggestions/explanations will be appreciated.
slang does not permit, e.g.,
if (BATCH == 0)
{
define foo () {...}
}
You must either put the function definition in a file, and then load
that file in the if-block, or use a preprocessor statement:
#if (BATCH == 0)
define foo () {...}
#endif
As far as I know, the only place the preprocessor is documented
is in the slang source code. Mark Olesen, who contribued much of the
slprep.c code, provided the following notes:
/*
* various preprocessing tokens supported
*
* #ifdef TOKEN1 TOKEN2 ...
* - True if any of TOKEN1 TOKEN2 ... are defined
*
* #ifndef TOKEN1 TOKEN2 ...
* - True if none of TOKEN1 TOKEN2 ... are defined
*
* #iftrue
* #ifnfalse
* #if true
* #if !false
* - always True
*
* #iffalse
* #ifntrue
* #if false
* #if !true
* - always False
*
* #if$ENV
* - True if the enviroment variable ENV is set
*
* #ifn$ENV
* #if !$ENV
* - True if the enviroment variable ENV is not set
*
* #if$ENV TOKEN1 TOKEN2 ...
* - True if the contents of enviroment variable ENV match
* any of TOKEN1 TOKEN2 ...
*
* #ifn$ENV TOKEN1 TOKEN2 ...
* #if !$ENV TOKEN1 TOKEN2 ...
* - True if the contents of enviroment variable ENV do not match
* any of TOKEN1 TOKEN2 ...
*
* NB: For $ENV, the tokens may contain wildcard characters:
* '?' - match any single character
* '*' - match any number of characters
*
* #ifexists TOKEN
* #ifnexists TOKEN
* #if !exists TOKEN
* - check if a variable/function exists
*
* #ifeval EXPRESSION
* #ifneval EXPRESSION
* #if !eval TOKEN
* - evaluates the EXPRESSION as an SLang expression
*
* #if (EXPRESSION)
* #if !(EXPRESSION)
* - as per '#ifeval' / '#ifneval',
* evaluates the EXPRESSION as a SLang expression
* - using '#ifn (EXPRESSION)' is possible, but deprecated
*
* #elif...
* #else
* #endif
*
* #stop
* - stop reading the entire file here, provided that the line
* would have been executed
* eg:
* #iffalse
* # stop
* #endif
* would NEVER stop
*
* #<TAG>
* - start embedded text region
* #</TAG>
* - end embedded text region
*
* All text, include other preprocessing directives, that occurs between
* the '#<TAG>' and '#</TAG>' directives will be ignored.
* This is useful for embedding other code or documentation.
* eg:
* #<latex>
* \chapter{My Documentation Effort}
* #</latex>
* NB: * although the current implementation only looks for sequences
* '#<' and '#</', it is advisable to use the full '<TAG>' form
* for documentation purposes and to avoid future surprises.
* * do NOT attempt to nest these constructions
*
* GENERAL NOTES:
* Apart from the '#ifdef' and '#ifndef' constructions, we are quite
* generous with accepting whitespace and the alternative '!' form.
* eg.,
* #ifTEST
* #ifnTEST
* #if TEST
* #if !TEST
* #if ! TEST
*
* mj olesen
*----------------------------------------------------------------------*/
/*}}}*/
--John
_______________________________________________
Jed-users-l mailing list
Jed-users-l@xxxxxxxx
http://mailman.jtan.com/mailman/listinfo/jed-users-l
[2012 date index]
[2012 thread index]
[Thread Prev] [Thread Next]
[Date Prev] [Date Next]