|
|
@ -1,6 +1,6 @@ |
|
|
|
# main.leg -- C parser + interpreter |
|
|
|
# |
|
|
|
# Last edited: 2025-01-26 21:27:29 by piumarta on zora |
|
|
|
# Last edited: 2025-01-27 09:37:11 by piumarta on zora |
|
|
|
|
|
|
|
%{ |
|
|
|
; |
|
|
@ -2163,7 +2163,8 @@ oop eval(oop exp, oop env) |
|
|
|
break; |
|
|
|
} |
|
|
|
case Assign: { |
|
|
|
oop lhs = get(exp, Assign,lhs); |
|
|
|
oop dst = get(exp, Assign,lhs); |
|
|
|
oop lhs = dst; |
|
|
|
oop rhs = eval(get(exp, Assign,rhs), nil); |
|
|
|
switch (getType(lhs)) { |
|
|
|
case Symbol: { |
|
|
@ -2185,9 +2186,14 @@ oop eval(oop exp, oop env) |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
default: break; |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
fatal("cannot assign to: %s", toString(lhs)); |
|
|
|
if (dst == lhs) |
|
|
|
fatal("cannot assign to: %s", toString(lhs)); |
|
|
|
else |
|
|
|
fatal("invalid rvalue '%s' assigning to: %s", |
|
|
|
toString(lhs), toString(dst)); |
|
|
|
break; |
|
|
|
} |
|
|
|
case Cast: { |
|
|
|