elseif 'if' == a0sym then
local cond = EVAL(a1, env)
if cond == types.Nil or cond == false then
- if a3 then ast = a3 else return types.Nil end -- TCO
+ if #ast > 3 then ast = a3 else return types.Nil end -- TCO
else
ast = a2 -- TCO
end
elseif 'fn*' == a0sym then
return types.MalFunc:new(function(...)
- return EVAL(a2, Env:new(env, a1, arg))
+ return EVAL(a2, Env:new(env, a1, table.pack(...)))
end, a2, env, a1)
else
local args = eval_ast(ast, env)
ast = f.ast
env = Env:new(f.env, f.params, args) -- TCO
else
- return f(unpack(args))
+ return f(table.unpack(args))
end
end
end