def is_macro_call(ast: Any, env: Env): Boolean = {
ast match {
case ml: MalList => {
- if (types._symbol_Q(ml(0)) &&
+ if (ml.value.length > 0 &&
+ types._symbol_Q(ml(0)) &&
env.find(ml(0).asInstanceOf[Symbol]) != null) {
env.get(ml(0).asInstanceOf[Symbol]) match {
case f: MalFunction => return f.ismacro
case v: MalVector => v.map(EVAL(_, env))
case l: MalList => l.map(EVAL(_, env))
case m: MalHashMap => {
- m.map{case (k: String,v: Any) => (k, EVAL(v, env))}
+ m.map{case (k,v) => (k, EVAL(v, env))}
}
case _ => ast
}
// apply list
ast = macroexpand(ast, env)
- if (!_list_Q(ast)) return ast
+ if (!_list_Q(ast))
+ return eval_ast(ast, env)
ast.asInstanceOf[MalList].value match {
+ case Nil => {
+ return ast
+ }
case Symbol("def!") :: a1 :: a2 :: Nil => {
return env.set(a1.asInstanceOf[Symbol], EVAL(a2, env))
}