Fixes regression caused by updating interpreter returns in eval. Cond now breaks the loop, rather than the switch

master
sloum 2 years ago
parent acd697ecc1
commit e64fe2b862

@ -90,27 +90,26 @@ func eval(exp expression, en *env) (value expression) {
value = exception("Invalid 'cond' syntax - too few arguments")
break
}
// CondLoop:
CondLoop:
for _, exp := range e[1:] {
switch i := exp.(type) {
case []expression:
if len(i) < 2 {
value = exception("Invalid 'cond' case, cases must take the form: `(<test> <expression>)")
break
break CondLoop
}
if i[0] == "else" || i[0] == symbol("else") {
value = eval(i[1], en)
break
break CondLoop
}
if AnythingToBool(eval(i[0], en)).(bool) {
value = eval(i[1], en)
break
break CondLoop
}
default:
value = exception("Invalid 'cond' case, cases must take the form: `(<test> <expression>)")
break
break CondLoop
}
value = make([]expression, 0)
}
case "set!":
if len(e) < 3 {

Loading…
Cancel
Save