X-Git-Url: https://git.hcoop.net/jackhill/mal.git/blobdiff_plain/dfc660a4cd52be6ab2a2f2243ca93f67e144b576..f87ea3e7419ec3f4d53acc3e5807e11618b2784f:/scala/step9_try.scala diff --git a/scala/step9_try.scala b/scala/step9_try.scala index 7bfba632..cc997bbe 100644 --- a/scala/step9_try.scala +++ b/scala/step9_try.scala @@ -39,7 +39,8 @@ object step9_try { 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 @@ -92,6 +93,9 @@ object step9_try { 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)) } @@ -122,6 +126,7 @@ object step9_try { return EVAL(a1, env) } catch { case t: Throwable => { + if (rest.length == 0) throw t rest(0).asInstanceOf[MalList].value match { case List(Symbol("catch*"), a21, a22) => { val exc: Any = t match {