Merge pull request #370 from asarhaddon/hide-gensym-counter
[jackhill/mal.git] / scala / step8_macros.scala
index e1a2222..48d15c2 100644 (file)
@@ -39,7 +39,8 @@ object step8_macros {
   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
@@ -72,7 +73,7 @@ object step8_macros {
       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
     }
@@ -88,9 +89,13 @@ object step8_macros {
 
     // 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))
       }