|
@ -1332,6 +1332,15 @@ language printLang = C; |
|
|
|
|
|
|
|
|
oop outputProgram= 0; |
|
|
oop outputProgram= 0; |
|
|
|
|
|
|
|
|
|
|
|
oop everyExternalDeclaration(oop s) |
|
|
|
|
|
{ |
|
|
|
|
|
oop eed = map_get(globals, intern("everyExternalDeclaration")); |
|
|
|
|
|
if (is(Function, eed)) { |
|
|
|
|
|
s = apply(globals, globals, eed, makeArrayFromElement(s, 1), mrAST); |
|
|
|
|
|
} |
|
|
|
|
|
return s; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
%} |
|
|
%} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1341,7 +1350,7 @@ oop outputProgram= 0; |
|
|
# yylval == 0 => end of input file while in META mode only |
|
|
# yylval == 0 => end of input file while in META mode only |
|
|
|
|
|
|
|
|
start = m:metaCatch { yylval= m } |
|
|
start = m:metaCatch { yylval= m } |
|
|
| s:externalDeclaration { yylval= s } |
|
|
|
|
|
|
|
|
| s:externalDeclaration { yylval= everyExternalDeclaration(s) } |
|
|
|
|
|
|
|
|
error = EOL* < (!EOL .)* EOL* (!EOL .)* > &{ error(yytext), 1 } |
|
|
error = EOL* < (!EOL .)* EOL* (!EOL .)* > &{ error(yytext), 1 } |
|
|
|
|
|
|
|
@ -2193,8 +2202,9 @@ metaCatch = META_AT ( META_IMPORT s:META_STRING ";" { inputStack |
|
|
| META_LCB s:mstmts { map_append(outputProgram, s); $$= null } |
|
|
| META_LCB s:mstmts { map_append(outputProgram, s); $$= null } |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
mvalue = ( i:META_IDENT { i= newGetVariable(i) } |
|
|
|
|
|
( a:meta_argumentList { i = (null != getSyntax(1, i)) ? apply(globals, globals, getSyntax(1, i), a, i) : newCall(i, a) } )? |
|
|
|
|
|
|
|
|
mvalue = ( i:META_IDENT { i= newGetVariable(i) } ( a:meta_argumentList { i = (null != getSyntax(1, i)) ? apply(globals, globals, getSyntax(1, i), a, i) : newCall(i, a) } |
|
|
|
|
|
| { i = is(Function, eval(globals, i)) == 1 ? apply(globals, globals, eval(globals, i), makeMap(), i) : i } |
|
|
|
|
|
) |
|
|
| META_LPAREN ( i:meta_exp ) META_RPAREN |
|
|
| META_LPAREN ( i:meta_exp ) META_RPAREN |
|
|
) { $$= eval(globals, i) } |
|
|
) { $$= eval(globals, i) } |
|
|
|
|
|
|
|
@ -3451,6 +3461,9 @@ oop eval(oop scope, oop ast) |
|
|
DO_C_PROTOS(); |
|
|
DO_C_PROTOS(); |
|
|
break; |
|
|
break; |
|
|
#undef _DO |
|
|
#undef _DO |
|
|
|
|
|
case t_Undefined: |
|
|
|
|
|
case t_Function: |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
printf("EVAL "); |
|
|
printf("EVAL "); |
|
|
println(ast); |
|
|
println(ast); |
|
@ -4667,7 +4680,7 @@ int main(int argc, char **argv) |
|
|
|
|
|
|
|
|
map_set(globals, intern("exit" ), makeFunction(prim_exit, intern("exit" ), null, null, globals, null)); |
|
|
map_set(globals, intern("exit" ), makeFunction(prim_exit, intern("exit" ), null, null, globals, null)); |
|
|
map_set(globals, intern("keys" ), makeFunction(prim_keys, intern("keys" ), null, null, globals, null)); |
|
|
map_set(globals, intern("keys" ), makeFunction(prim_keys, intern("keys" ), null, null, globals, null)); |
|
|
map_set(globals, intern("allKeys" ), makeFunction(prim_all_keys, intern("allKeys" ), null, null, globals, null)); |
|
|
|
|
|
|
|
|
map_set(globals, intern("_keys" ), makeFunction(prim_all_keys, intern("_keys" ), null, null, globals, null)); |
|
|
map_set(globals, intern("values" ), makeFunction(prim_values, intern("values" ), null, null, globals, null)); |
|
|
map_set(globals, intern("values" ), makeFunction(prim_values, intern("values" ), null, null, globals, null)); |
|
|
map_set(globals, intern("length" ), makeFunction(prim_length, intern("length" ), null, null, globals, null)); |
|
|
map_set(globals, intern("length" ), makeFunction(prim_length, intern("length" ), null, null, globals, null)); |
|
|
map_set(globals, intern("print" ), makeFunction(prim_print, intern("print" ), null, null, globals, null)); |
|
|
map_set(globals, intern("print" ), makeFunction(prim_print, intern("print" ), null, null, globals, null)); |
|
@ -4710,19 +4723,13 @@ int main(int argc, char **argv) |
|
|
enum_last = makeMap(); |
|
|
enum_last = makeMap(); |
|
|
struct_last = makeMap(); |
|
|
struct_last = makeMap(); |
|
|
union_last = makeMap(); |
|
|
union_last = makeMap(); |
|
|
prog_objects = makeMap(); |
|
|
|
|
|
objects_elements = makeMap(); |
|
|
|
|
|
objects_last = makeMap(); |
|
|
|
|
|
|
|
|
|
|
|
map_set(prog_enums , intern("last" ), enum_last ); |
|
|
map_set(prog_enums , intern("last" ), enum_last ); |
|
|
map_set(prog_structs , intern("last" ), struct_last ); |
|
|
map_set(prog_structs , intern("last" ), struct_last ); |
|
|
map_set(prog_unions , intern("last" ), union_last ); |
|
|
map_set(prog_unions , intern("last" ), union_last ); |
|
|
map_set(prog_objects , intern("elements" ), objects_elements ); |
|
|
|
|
|
map_set(prog_objects , intern("last" ), objects_last ); |
|
|
|
|
|
map_set(program , intern("structs" ), prog_structs ); |
|
|
map_set(program , intern("structs" ), prog_structs ); |
|
|
map_set(program , intern("unions" ), prog_unions ); |
|
|
map_set(program , intern("unions" ), prog_unions ); |
|
|
map_set(program , intern("enums" ), prog_enums ); |
|
|
map_set(program , intern("enums" ), prog_enums ); |
|
|
map_set(program , intern("objects" ), prog_objects ); |
|
|
|
|
|
map_set(globals , intern("program" ), program ); |
|
|
map_set(globals , intern("program" ), program ); |
|
|
|
|
|
|
|
|
fixScope(globals); |
|
|
fixScope(globals); |
|
|