|
|
@ -1308,94 +1308,6 @@ language printLang = C; |
|
|
|
|
|
|
|
oop outputProgram= 0; |
|
|
|
|
|
|
|
/* TO DELETE IN FUTURE |
|
|
|
oop searchType(char *type) |
|
|
|
{ |
|
|
|
ssize_t pos = map_intern_search(symbol_table, type); |
|
|
|
if (pos >= 0) return get(symbol_table, Map, elements)[pos].key; |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
oop findMap(oop map) |
|
|
|
{ |
|
|
|
oop symbol_name = map_get(map, identifier_symbol); |
|
|
|
size_t size = map_size(properties); |
|
|
|
oop retType, ret; |
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
retType = map_get(map_keys(properties), makeInteger(i)); |
|
|
|
retType = map_get(properties, retType); |
|
|
|
size_t sizeType = map_size(retType); |
|
|
|
for (int k = 0; k < sizeType; k++) { |
|
|
|
ret = map_get(map_keys(retType), makeInteger(k)); |
|
|
|
if (ret == symbol_name) |
|
|
|
return map_get(retType, ret); |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
oop selectFunction(oop filter, oop map) |
|
|
|
{ |
|
|
|
oop ret = makeMap(); |
|
|
|
size_t keysNumber = map_size(eval(globals, map)); |
|
|
|
for (int i=0; i<keysNumber; i++) { |
|
|
|
oop singleValue = makeMap(); |
|
|
|
oop singleton = newGetMap(GetIndex_proto, map, makeInteger(i)); |
|
|
|
map_append(singleValue, singleton); |
|
|
|
if (eval(globals, newCall(filter, singleValue)) != makeInteger(0)) |
|
|
|
map_append(ret, eval(globals, singleton)); |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
oop rejectFunction(oop filter, oop map) |
|
|
|
{ |
|
|
|
oop ret = makeMap(); |
|
|
|
size_t keysNumber = map_size(eval(globals, map)); |
|
|
|
for (int i=0; i<keysNumber; i++) { |
|
|
|
oop singleValue = makeMap(); |
|
|
|
oop singleton = newGetMap(GetIndex_proto, map, makeInteger(i)); |
|
|
|
map_append(singleValue, singleton); |
|
|
|
if (eval(globals, newCall(filter, singleValue)) == makeInteger(0)) |
|
|
|
map_append(ret, eval(globals, singleton)); |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
oop mapFunction(oop func, oop args) |
|
|
|
{ |
|
|
|
oop ret = makeMap(); |
|
|
|
oop keys = map_allKeys(args); |
|
|
|
size_t keysNumber = map_size(keys); |
|
|
|
for(int i = 0; i < keysNumber; i++) { |
|
|
|
oop singleValue = makeMap(); |
|
|
|
oop singleton = newGetMap(GetIndex_proto, args, makeInteger(i)); |
|
|
|
map_append(singleValue, singleton); |
|
|
|
map_set(ret, makeInteger(i), eval(globals, newCall(func, singleValue))); |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
oop guardMapFunction(oop func, oop args, oop guard) |
|
|
|
{ |
|
|
|
oop ret = makeMap(); |
|
|
|
size_t keysNumber = map_size(args); |
|
|
|
for(int i = 0; i < keysNumber; i++) { |
|
|
|
oop singleValue = makeMap(); |
|
|
|
oop singleton = newGetMap(GetIndex_proto, args, makeInteger(i)); |
|
|
|
map_append(singleValue, singleton); |
|
|
|
if ( eval(globals, newCall(guard, singleValue)) != makeInteger(0)) { |
|
|
|
map_set(ret, makeInteger(i), eval(globals, newCall(func, singleValue))); |
|
|
|
} else { |
|
|
|
map_set(ret, makeInteger(i), map_get(args, makeInteger(i))); |
|
|
|
} |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
%} |
|
|
|
|
|
|
|
|
|
|
@ -1404,7 +1316,7 @@ oop guardMapFunction(oop func, oop args, oop guard) |
|
|
|
# yylval == null => "pseudo" op, e.g., change language -- ignored by REPL |
|
|
|
# yylval == 0 => end of input file while in META mode only |
|
|
|
|
|
|
|
start = m:metaCatch { yylval = null } |
|
|
|
start = m:metaCatch { yylval = m } |
|
|
|
| s:externalDeclaration { yylval= s } |
|
|
|
|
|
|
|
error = EOL* < (!EOL .)* EOL* (!EOL .)* > &{ error(yytext), 1 } |
|
|
@ -2252,9 +2164,9 @@ _FLOAT128 = '_Float128' !IDREST &{gnu} { $$= newToken("_Float1 |
|
|
|
# the semicolon has to be explicit with no space eaten afterwards to prevent the |
|
|
|
# input buffer from moving past it before redirecting input from the imported file |
|
|
|
|
|
|
|
metaCatch = META_AT ( m:mvalue { map_append(outputProgram, m) } |
|
|
|
| META_LCB m:mstmts { map_append(outputProgram, m) } |
|
|
|
| META_IMPORT s:META_STRING ";" { inputStackPush(get(s, String, value)) } |
|
|
|
metaCatch = META_AT ( META_IMPORT s:META_STRING ";" { inputStackPush(get(s, String, value)) ; $$ = 0 } |
|
|
|
| m:mvalue { map_append(outputProgram, m) ; $$ = null } |
|
|
|
| META_LCB m:mstmts { map_append(outputProgram, m) ; $$ = null } |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
@ -2298,9 +2210,6 @@ meta_block = META_LCB m:meta_makeMap |
|
|
|
META_RCB { $$ = newBlock(m) } |
|
|
|
|
|
|
|
meta_exp = META_VAR l:meta_ident META_ASSIGN e:meta_exp { $$ = newDeclaration(l, e) } |
|
|
|
| META_FUNCMAP m:meta_funcMap { $$ = m} |
|
|
|
| META_FUNCSELECT s:meta_funcSelect { $$ = s } |
|
|
|
| META_FUNCREJECT s:meta_funcReject { $$ = s } |
|
|
|
# | META_SYNTAX l:META_IDENT p:meta_paramList q:META_IDENT e:meta_block { $$ = (map_append(p, q), newFunc(l, p, e, makeInteger(2))) } |
|
|
|
# | META_SYNTAX p:meta_paramList q:META_IDENT e:meta_block { $$ = (map_append(p, q), newFunc(null, p, e, makeInteger(2))) } |
|
|
|
# | META_SYNTAX l:META_IDENT p:meta_paramList e:meta_block { $$ = newFunc(l, p, e, makeInteger(1)) } |
|
|
@ -2311,13 +2220,6 @@ meta_exp = META_VAR l:meta_ident META_ASSIGN e:meta_exp |
|
|
|
| l:meta_syntax2 a:meta_argumentList s:meta_block { $$ = (map_append(a, s), apply(globals, globals, l, a, a)) } |
|
|
|
| c:meta_cond { $$ = c } |
|
|
|
|
|
|
|
meta_funcMap = META_LPAREN i:meta_value META_COMMA e:meta_exp ( META_RPAREN { $$ = mapFunction(i, eval(globals, e)) } |
|
|
|
| META_COMMA f:meta_value META_RPAREN { $$ = guardMapFunction(i, eval(globals, e), f) } |
|
|
|
) |
|
|
|
|
|
|
|
meta_funcSelect = META_LPAREN t:meta_value META_COMMA i:meta_exp META_RPAREN { $$ = selectFunction(t, i) } |
|
|
|
meta_funcReject = META_LPAREN t:meta_value META_COMMA i:meta_exp META_RPAREN { $$ = rejectFunction(t, i) } |
|
|
|
|
|
|
|
|
|
|
|
meta_ident = l:META_IDENT { $$ = l } |
|
|
|
# | META_AT n:meta_prefix { $$ = newUnary(Unquote_proto, n) } |
|
|
|