|
@ -1,6 +1,6 @@ |
|
|
# main.leg -- C parser + interpreter |
|
|
# main.leg -- C parser + interpreter |
|
|
# |
|
|
# |
|
|
# Last edited: 2025-01-22 15:10:04 by piumarta on zora |
|
|
|
|
|
|
|
|
# Last edited: 2025-01-22 15:11:35 by piumarta on zora |
|
|
|
|
|
|
|
|
%{ |
|
|
%{ |
|
|
; |
|
|
; |
|
@ -1914,33 +1914,33 @@ oop preval(oop exp) |
|
|
{ |
|
|
{ |
|
|
if (opt_v > 2) { printf("PREVAL "); println(exp); } |
|
|
if (opt_v > 2) { printf("PREVAL "); println(exp); } |
|
|
switch (getType(exp)) { |
|
|
switch (getType(exp)) { |
|
|
case Undefined: assert(!"this cannot happen"); |
|
|
|
|
|
case Input: assert(!"this cannot happen"); |
|
|
|
|
|
case Integer: assert(!"this cannot happen"); |
|
|
|
|
|
case Float: assert(!"this cannot happen"); |
|
|
|
|
|
case Symbol: assert(!"this cannot happen"); |
|
|
|
|
|
case Pair: assert(!"this cannot happen"); |
|
|
|
|
|
case String: assert(!"this cannot happen"); |
|
|
|
|
|
case Array: assert(!"this cannot happen"); |
|
|
|
|
|
case Primitive: assert(!"this cannot happen"); |
|
|
|
|
|
case Closure: assert(!"this cannot happen"); |
|
|
|
|
|
case Call: assert(!"this cannot happen"); |
|
|
|
|
|
case Block: assert(!"this cannot happen"); |
|
|
|
|
|
case Unary: assert(!"this cannot happen"); |
|
|
|
|
|
case Binary: assert(!"this cannot happen"); |
|
|
|
|
|
case Assign: assert(!"this cannot happen"); |
|
|
|
|
|
case Cast: assert(!"this cannot happen"); |
|
|
|
|
|
case While: assert(!"this cannot happen"); |
|
|
|
|
|
case For: assert(!"this cannot happen"); |
|
|
|
|
|
case If: assert(!"this cannot happen"); |
|
|
|
|
|
case Return: assert(!"this cannot happen"); |
|
|
|
|
|
case Continue: assert(!"this cannot happen"); |
|
|
|
|
|
case Break: assert(!"this cannot happen"); |
|
|
|
|
|
case Tbase: assert(!"this cannot happen"); |
|
|
|
|
|
case Tpointer: assert(!"this cannot happen"); |
|
|
|
|
|
case Tarray: assert(!"this cannot happen"); |
|
|
|
|
|
case Tstruct: assert(!"this cannot happen"); |
|
|
|
|
|
case Tfunction: assert(!"this cannot happen"); |
|
|
|
|
|
|
|
|
case Undefined: break; |
|
|
|
|
|
case Input: break; |
|
|
|
|
|
case Integer: return exp; |
|
|
|
|
|
case Float: return exp; |
|
|
|
|
|
case Symbol: break; |
|
|
|
|
|
case Pair: break; |
|
|
|
|
|
case String: break; |
|
|
|
|
|
case Array: break; |
|
|
|
|
|
case Primitive: break; |
|
|
|
|
|
case Closure: break; |
|
|
|
|
|
case Call: break; |
|
|
|
|
|
case Block: break; |
|
|
|
|
|
case Unary: break; |
|
|
|
|
|
case Binary: break; |
|
|
|
|
|
case Assign: break; |
|
|
|
|
|
case Cast: break; |
|
|
|
|
|
case While: break; |
|
|
|
|
|
case For: break; |
|
|
|
|
|
case If: break; |
|
|
|
|
|
case Return: break; |
|
|
|
|
|
case Continue: break; |
|
|
|
|
|
case Break: break; |
|
|
|
|
|
case Tbase: break; |
|
|
|
|
|
case Tpointer: break; |
|
|
|
|
|
case Tarray: break; |
|
|
|
|
|
case Tstruct: break; |
|
|
|
|
|
case Tfunction: break; |
|
|
case VarDecls: { |
|
|
case VarDecls: { |
|
|
oop vars = get(exp, VarDecls,variables); |
|
|
oop vars = get(exp, VarDecls,variables); |
|
|
Array_do(vars, var) { |
|
|
Array_do(vars, var) { |
|
@ -1950,10 +1950,10 @@ oop preval(oop exp) |
|
|
} |
|
|
} |
|
|
return nil; |
|
|
return nil; |
|
|
} |
|
|
} |
|
|
case Scope: assert(!"this cannot happen"); |
|
|
|
|
|
case TypeName: assert(!"this cannot happen"); |
|
|
|
|
|
case Variable: assert(!"this cannot happen"); |
|
|
|
|
|
case Constant: assert(!"this cannot happen"); |
|
|
|
|
|
|
|
|
case Scope: break; |
|
|
|
|
|
case TypeName: break; |
|
|
|
|
|
case Variable: break; |
|
|
|
|
|
case Constant: break; |
|
|
case Function: { |
|
|
case Function: { |
|
|
assert(Scope_lookup(get(exp, Function,name))); |
|
|
assert(Scope_lookup(get(exp, Function,name))); |
|
|
return exp; |
|
|
return exp; |
|
|