From 8ec0c2ea495f36cdfd786f35c7b7716dc53a3546 Mon Sep 17 00:00:00 2001 From: Dov Murik Date: Thu, 31 Mar 2016 21:42:23 -0400 Subject: [PATCH] groovy: Fix exception on literal empty list Issue #190 --- groovy/step3_env.groovy | 1 + groovy/step4_if_fn_do.groovy | 1 + groovy/step5_tco.groovy | 1 + groovy/step6_file.groovy | 1 + groovy/step7_quote.groovy | 1 + groovy/step8_macros.groovy | 2 ++ groovy/step9_try.groovy | 2 ++ groovy/stepA_mal.groovy | 2 ++ 8 files changed, 11 insertions(+) diff --git a/groovy/step3_env.groovy b/groovy/step3_env.groovy index 94b914e09c..5f375540c2 100644 --- a/groovy/step3_env.groovy +++ b/groovy/step3_env.groovy @@ -29,6 +29,7 @@ eval_ast = { ast, env -> EVAL = { ast, env -> //println("EVAL: ${printer.pr_str(ast,true)}") if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: diff --git a/groovy/step4_if_fn_do.groovy b/groovy/step4_if_fn_do.groovy index 6696b6238e..db86b993d4 100644 --- a/groovy/step4_if_fn_do.groovy +++ b/groovy/step4_if_fn_do.groovy @@ -31,6 +31,7 @@ eval_ast = { ast, env -> EVAL = { ast, env -> //println("EVAL: ${printer.pr_str(ast,true)}") if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: diff --git a/groovy/step5_tco.groovy b/groovy/step5_tco.groovy index 29e67d9746..50f4673218 100644 --- a/groovy/step5_tco.groovy +++ b/groovy/step5_tco.groovy @@ -32,6 +32,7 @@ EVAL = { ast, env -> while (true) { //println("EVAL: ${printer.pr_str(ast,true)}") if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: diff --git a/groovy/step6_file.groovy b/groovy/step6_file.groovy index 43214e9c5c..664a59af8c 100644 --- a/groovy/step6_file.groovy +++ b/groovy/step6_file.groovy @@ -32,6 +32,7 @@ EVAL = { ast, env -> while (true) { //println("EVAL: ${printer.pr_str(ast,true)}") if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: diff --git a/groovy/step7_quote.groovy b/groovy/step7_quote.groovy index e4d923f66d..d50a4a19f3 100644 --- a/groovy/step7_quote.groovy +++ b/groovy/step7_quote.groovy @@ -48,6 +48,7 @@ EVAL = { ast, env -> while (true) { //println("EVAL: ${printer.pr_str(ast,true)}") if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: diff --git a/groovy/step8_macros.groovy b/groovy/step8_macros.groovy index d5e1286d9b..7606526b30 100644 --- a/groovy/step8_macros.groovy +++ b/groovy/step8_macros.groovy @@ -15,6 +15,7 @@ READ = { str -> // EVAL macro_Q = { ast, env -> if (types.list_Q(ast) && + ast.size() > 0 && ast[0].class == MalSymbol && env.find(ast[0])) { def obj = env.get(ast[0]) @@ -70,6 +71,7 @@ EVAL = { ast, env -> ast = macroexpand(ast, env) if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: diff --git a/groovy/step9_try.groovy b/groovy/step9_try.groovy index 2d98831e45..991803488c 100644 --- a/groovy/step9_try.groovy +++ b/groovy/step9_try.groovy @@ -15,6 +15,7 @@ READ = { str -> // EVAL macro_Q = { ast, env -> if (types.list_Q(ast) && + ast.size() > 0 && ast[0].class == MalSymbol && env.find(ast[0])) { def obj = env.get(ast[0]) @@ -70,6 +71,7 @@ EVAL = { ast, env -> ast = macroexpand(ast, env) if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: diff --git a/groovy/stepA_mal.groovy b/groovy/stepA_mal.groovy index 8c3411b1f0..abf96dfd5a 100644 --- a/groovy/stepA_mal.groovy +++ b/groovy/stepA_mal.groovy @@ -15,6 +15,7 @@ READ = { str -> // EVAL macro_Q = { ast, env -> if (types.list_Q(ast) && + ast.size() > 0 && ast[0].class == MalSymbol && env.find(ast[0])) { def obj = env.get(ast[0]) @@ -70,6 +71,7 @@ EVAL = { ast, env -> ast = macroexpand(ast, env) if (! types.list_Q(ast)) return eval_ast(ast, env) + if (ast.size() == 0) return ast switch (ast[0]) { case { it instanceof MalSymbol && it.value == "def!" }: