scala: Fix exception on literal empty list
authorDov Murik <dov.murik@gmail.com>
Fri, 1 Apr 2016 02:31:49 +0000 (22:31 -0400)
committerDov Murik <dov.murik@gmail.com>
Fri, 1 Apr 2016 02:31:49 +0000 (22:31 -0400)
Issue #190

scala/step3_env.scala
scala/step4_if_fn_do.scala
scala/step5_tco.scala
scala/step6_file.scala
scala/step7_quote.scala
scala/step8_macros.scala
scala/step9_try.scala
scala/stepA_mal.scala

index 38de2e7..0f37deb 100644 (file)
@@ -27,6 +27,9 @@ object step3_env {
 
     // apply list
     ast.asInstanceOf[MalList].value match {
+      case Nil => {
+        return ast
+      }
       case Symbol("def!") :: a1 :: a2 :: Nil => {
         return env.set(a1.asInstanceOf[Symbol], EVAL(a2, env))
       }
index 92d6a2d..4ae4bdc 100644 (file)
@@ -28,6 +28,9 @@ object step4_if_fn_do {
 
     // apply list
     ast.asInstanceOf[MalList].value match {
+      case Nil => {
+        return ast
+      }
       case Symbol("def!") :: a1 :: a2 :: Nil => {
         return env.set(a1.asInstanceOf[Symbol], EVAL(a2, env))
       }
index dfd00c1..f9cb813 100644 (file)
@@ -31,6 +31,9 @@ object step5_tco {
 
     // apply list
     ast.asInstanceOf[MalList].value match {
+      case Nil => {
+        return ast
+      }
       case Symbol("def!") :: a1 :: a2 :: Nil => {
         return env.set(a1.asInstanceOf[Symbol], EVAL(a2, env))
       }
index 47d68fb..b91a9b1 100644 (file)
@@ -31,6 +31,9 @@ object step6_file {
 
     // apply list
     ast.asInstanceOf[MalList].value match {
+      case Nil => {
+        return ast
+      }
       case Symbol("def!") :: a1 :: a2 :: Nil => {
         return env.set(a1.asInstanceOf[Symbol], EVAL(a2, env))
       }
index a958975..a8cbec4 100644 (file)
@@ -58,6 +58,9 @@ object step7_quote {
 
     // apply list
     ast.asInstanceOf[MalList].value match {
+      case Nil => {
+        return ast
+      }
       case Symbol("def!") :: a1 :: a2 :: Nil => {
         return env.set(a1.asInstanceOf[Symbol], EVAL(a2, env))
       }
index 04a8d47..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
@@ -92,6 +93,9 @@ object step8_macros {
       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))
       }
index 7bfba63..068a43d 100644 (file)
@@ -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))
       }
index 3e7eebc..91a6169 100644 (file)
@@ -39,7 +39,8 @@ object stepA_mal {
   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 stepA_mal {
       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))
       }