|
@ -1298,17 +1298,12 @@ language printLang = C; |
|
|
oop outputProgram= 0; |
|
|
oop outputProgram= 0; |
|
|
|
|
|
|
|
|
oop mapFunction(oop func, oop args) { |
|
|
oop mapFunction(oop func, oop args) { |
|
|
oop mapValue = makeMap(); |
|
|
|
|
|
int size = map_size(eval(globals, args)); |
|
|
|
|
|
|
|
|
int size = map_size(args); |
|
|
for(int i = 0; i < size; i++) { |
|
|
for(int i = 0; i < size; i++) { |
|
|
oop oopInt = makeInteger(i); |
|
|
|
|
|
oop obj = map_get(map_get(args, value_symbol), oopInt); |
|
|
|
|
|
oop test = makeMap(); |
|
|
|
|
|
map_append(test, obj); |
|
|
|
|
|
obj = newCall(func, test); |
|
|
|
|
|
map_append(mapValue, obj); |
|
|
|
|
|
|
|
|
oop singleValue = makeMap(); |
|
|
|
|
|
map_append(singleValue, map_get(args, makeInteger(i))); |
|
|
|
|
|
map_set(args, makeInteger(i), eval(globals, newCall(func, singleValue))); |
|
|
} |
|
|
} |
|
|
map_set(args, value_symbol, mapValue); |
|
|
|
|
|
return args; |
|
|
return args; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -2175,22 +2170,19 @@ metaCatch = META_AT ( m:mvalue { map_append |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mvalue = { listBegin() } ( i:META_IDENT { listAppend(eval(globals, newGetVariable(i))) } |
|
|
|
|
|
| META_LPAREN ( i:MO_OPERATION |
|
|
|
|
|
| i:meta_block |
|
|
|
|
|
| i:meta_exp |
|
|
|
|
|
) META_RPAREN { listAppend(eval(globals, i)) } |
|
|
|
|
|
) { $$ = listEnd() } |
|
|
|
|
|
|
|
|
mvalue = i:META_IDENT { $$ = eval(globals, newGetVariable(i)) } |
|
|
|
|
|
| META_LPAREN ( i:MO_OPERATION |
|
|
|
|
|
#| i:meta_block usefull ? |
|
|
|
|
|
| i:meta_exp |
|
|
|
|
|
) META_RPAREN { $$ = eval(globals, i) } |
|
|
|
|
|
|
|
|
mstmts = { listBegin() } ( s:meta_stmt { eval(globals, s) } |
|
|
|
|
|
| a:meta_append { eval(globals, a) } |
|
|
|
|
|
)* |
|
|
|
|
|
( (META_NIL META_SEMICOLON )? META_RCB { listEnd(); $$ = null } |
|
|
|
|
|
| META_DAT META_SEMICOLON META_RCB { $$ = listEnd() } |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
mstmts = { listBegin() } ( s:meta_stmt { eval(globals, s) } )* meta_endSTMTS |
|
|
|
|
|
|
|
|
|
|
|
meta_endSTMTS = (META_NIL META_SEMICOLON )? META_RCB { listEnd(); $$ = null } |
|
|
|
|
|
| META_DAT META_SEMICOLON META_RCB { $$ = listEnd() } |
|
|
|
|
|
|
|
|
meta_stmt = s:meta_block { $$ = s } |
|
|
meta_stmt = s:meta_block { $$ = s } |
|
|
|
|
|
| a:meta_append { $$ = a } |
|
|
| META_SEMICOLON { $$ = null } |
|
|
| META_SEMICOLON { $$ = null } |
|
|
| l:META_IDENT p:meta_paramList e:meta_block { $$ = newFunc(l, p, e, null) } |
|
|
| l:META_IDENT p:meta_paramList e:meta_block { $$ = newFunc(l, p, e, null) } |
|
|
| META_IF META_LPAREN c:meta_exp META_RPAREN t:meta_stmt META_ELSE f:meta_stmt { $$ = newIf(c, t, f ) } |
|
|
| META_IF META_LPAREN c:meta_exp META_RPAREN t:meta_stmt META_ELSE f:meta_stmt { $$ = newIf(c, t, f ) } |
|
@ -2210,7 +2202,7 @@ meta_stmt = s:meta_block |
|
|
|
|
|
|
|
|
meta_append = META_DAT META_DOT META_APPEND META_LPAREN s:meta_exp META_RPAREN META_SEMICOLON { $$ = newUnary(Append_proto, s) } |
|
|
meta_append = META_DAT META_DOT META_APPEND META_LPAREN s:meta_exp META_RPAREN META_SEMICOLON { $$ = newUnary(Append_proto, s) } |
|
|
|
|
|
|
|
|
meta_block = META_LCB m:meta_makeMap |
|
|
|
|
|
|
|
|
meta_block = META_LCB m:meta_makeMap |
|
|
( s:meta_stmt { map_append(m, s) } |
|
|
( s:meta_stmt { map_append(m, s) } |
|
|
) * |
|
|
) * |
|
|
( s:meta_exp { map_append(m, s) } |
|
|
( s:meta_exp { map_append(m, s) } |
|
@ -2333,7 +2325,7 @@ meta_postfix = i:meta_value |
|
|
| META_MINUSMINUS { i = newPostDecrement(i) } |
|
|
| META_MINUSMINUS { i = newPostDecrement(i) } |
|
|
) * { $$ = i } |
|
|
) * { $$ = i } |
|
|
|
|
|
|
|
|
meta_funcMap = META_LPAREN i:meta_value META_COMMA e:meta_exp META_RPAREN { mapFunction(i, e) } |
|
|
|
|
|
|
|
|
meta_funcMap = META_LPAREN i:meta_value META_COMMA e:meta_exp META_RPAREN { $$ = mapFunction(i, eval(globals, e)) } |
|
|
|
|
|
|
|
|
meta_paramList = META_LPAREN m:meta_makeMap |
|
|
meta_paramList = META_LPAREN m:meta_makeMap |
|
|
( i:META_IDENT { map_append(m, i) } |
|
|
( i:META_IDENT { map_append(m, i) } |
|
@ -2693,7 +2685,6 @@ oop mulOperation(oop lhs, oop rhs) |
|
|
CASE(Float , Float ): return makeFloat(get(lhs, Float, _value) * get(rhs, Float, _value)); |
|
|
CASE(Float , Float ): return makeFloat(get(lhs, Float, _value) * get(rhs, Float, _value)); |
|
|
CASE(String , Integer): return string_mul(lhs, rhs); |
|
|
CASE(String , Integer): return string_mul(lhs, rhs); |
|
|
CASE(Integer, String ): return string_mul(rhs, lhs); |
|
|
CASE(Integer, String ): return string_mul(rhs, lhs); |
|
|
CASE(Undefined, Integer): return makeInteger(getInteger(rhs)); |
|
|
|
|
|
} |
|
|
} |
|
|
runtimeError("multiplication between two incompatible types"); |
|
|
runtimeError("multiplication between two incompatible types"); |
|
|
return NULL; // to prevent: control may reach end of non-void function |
|
|
return NULL; // to prevent: control may reach end of non-void function |
|
|