def macro_call?(ast, env)
list = ast.unwrap
return false unless list.is_a? Mal::List
+ return false if list.empty?
sym = list.first.unwrap
return false unless sym.is_a? Mal::Symbol
# 'next' in 'do...end' has a bug in crystal 0.7.1
# https://github.com/manastech/crystal/issues/659
while true
- return eval_ast(ast, env) unless ast.unwrap.is_a? Mal::List
+ list = ast.unwrap
+
+ return eval_ast(ast, env) unless list.is_a? Mal::List
+ return ast if list.empty?
ast = macroexpand(ast, env)
def macro_call?(ast, env)
list = ast.unwrap
return false unless list.is_a? Mal::List
+ return false if list.empty?
sym = list.first.unwrap
return false unless sym.is_a? Mal::Symbol
# 'next' in 'do...end' has a bug in crystal 0.7.1
# https://github.com/manastech/crystal/issues/659
while true
- return eval_ast(ast, env) unless ast.unwrap.is_a? Mal::List
+ list = ast.unwrap
+
+ return eval_ast(ast, env) unless list.is_a? Mal::List
+ return ast if list.empty?
ast = macroexpand(ast, env)
# 'next' in 'do...end' has a bug in crystal 0.7.1
# https://github.com/manastech/crystal/issues/659
while true
- return eval_ast(ast, env) unless ast.unwrap.is_a? Mal::List
+ list = ast.unwrap
+
+ return eval_ast(ast, env) unless list.is_a? Mal::List
+ return ast if list.empty?
ast = macroexpand(ast, env)
if (!orig_ast.list_Q()) {
return eval_ast(orig_ast, env);
}
+ if (((MalList)orig_ast).size() == 0) { return orig_ast; }
// apply list
MalVal expanded = macroexpand(orig_ast, env);
if (!orig_ast.list_Q()) {
return eval_ast(orig_ast, env);
}
+ if (((MalList)orig_ast).size() == 0) { return orig_ast; }
// apply list
MalVal expanded = macroexpand(orig_ast, env);
if (!orig_ast.list_Q()) {
return eval_ast(orig_ast, env);
}
+ if (((MalList)orig_ast).size() == 0) { return orig_ast; }
// apply list
MalVal expanded = macroexpand(orig_ast, env);