function ret = eval_ast(ast, env)
switch class(ast)
case 'types.Symbol'
- %if exist('OCTAVE_VERSION', 'builtin') ~= 0
- % ret = env.(ast.name);
- %else
- ret = env(ast.name);
- %end
+ ret = env(ast.name);
case 'types.List'
ret = types.List();
for i=1:length(ast)
if length(ast) > 3
ast = ast.get(4); % TCO
else
- ret = types.nil;
+ ret = type_utils.nil;
return;
end
else
ast = ast.get(3); % TCO
end
case 'fn*'
- fn = @(varargin) EVAL(ast.get(3), Env(env, ast.get(2), ...
+ fn = @(varargin) EVAL(ast.get(3), Env({env}, ast.get(2), ...
types.List(varargin{:})));
ret = types.Function(fn, ast.get(3), env, ast.get(2));
return;
if length(ast) > 3
ast = ast.get(4); % TCO
else
- ret = types.nil;
+ ret = type_utils.nil;
return;
end
else
ast = ast.get(3); % TCO
end
case 'fn*'
- fn = @(varargin) EVAL(ast.get(3), Env(env, ast.get(2), ...
+ fn = @(varargin) EVAL(ast.get(3), Env({env}, ast.get(2), ...
types.List(varargin{:})));
ret = types.Function(fn, ast.get(3), env, ast.get(2));
return;
if length(ast) > 3
ast = ast.get(4); % TCO
else
- ret = types.nil;
+ ret = type_utils.nil;
return;
end
else
ast = ast.get(3); % TCO
end
case 'fn*'
- fn = @(varargin) EVAL(ast.get(3), Env(env, ast.get(2), ...
+ fn = @(varargin) EVAL(ast.get(3), Env({env}, ast.get(2), ...
types.List(varargin{:})));
ret = types.Function(fn, ast.get(3), env, ast.get(2));
return;