From 3c59a767004f9f1f978389d758bb03c393b517fa Mon Sep 17 00:00:00 2001 From: Dov Murik Date: Sun, 27 Mar 2016 22:26:14 -0400 Subject: [PATCH] lua: Fix exception on literal empty list Issue #190 --- lua/step3_env.lua | 1 + lua/step4_if_fn_do.lua | 1 + lua/step5_tco.lua | 1 + lua/step6_file.lua | 1 + lua/step7_quote.lua | 1 + lua/step8_macros.lua | 1 + lua/step9_try.lua | 1 + lua/stepA_mal.lua | 1 + 8 files changed, 8 insertions(+) diff --git a/lua/step3_env.lua b/lua/step3_env.lua index dbdb879a..24cdfc74 100755 --- a/lua/step3_env.lua +++ b/lua/step3_env.lua @@ -39,6 +39,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2 = ast[1], ast[2],ast[3] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) diff --git a/lua/step4_if_fn_do.lua b/lua/step4_if_fn_do.lua index 65b3a0a5..46302d1b 100755 --- a/lua/step4_if_fn_do.lua +++ b/lua/step4_if_fn_do.lua @@ -40,6 +40,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2,a3 = ast[1], ast[2],ast[3],ast[4] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) diff --git a/lua/step5_tco.lua b/lua/step5_tco.lua index 237f5ead..b3d77950 100755 --- a/lua/step5_tco.lua +++ b/lua/step5_tco.lua @@ -41,6 +41,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2,a3 = ast[1], ast[2],ast[3],ast[4] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) diff --git a/lua/step6_file.lua b/lua/step6_file.lua index 79928883..63d0208a 100755 --- a/lua/step6_file.lua +++ b/lua/step6_file.lua @@ -41,6 +41,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2,a3 = ast[1], ast[2],ast[3],ast[4] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) diff --git a/lua/step7_quote.lua b/lua/step7_quote.lua index 32bf60c3..e978d681 100755 --- a/lua/step7_quote.lua +++ b/lua/step7_quote.lua @@ -63,6 +63,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2,a3 = ast[1], ast[2],ast[3],ast[4] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) diff --git a/lua/step8_macros.lua b/lua/step8_macros.lua index fb4e14d2..800833cc 100755 --- a/lua/step8_macros.lua +++ b/lua/step8_macros.lua @@ -84,6 +84,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2,a3 = ast[1], ast[2],ast[3],ast[4] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) diff --git a/lua/step9_try.lua b/lua/step9_try.lua index 69c911d5..a7a1db8f 100755 --- a/lua/step9_try.lua +++ b/lua/step9_try.lua @@ -84,6 +84,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2,a3 = ast[1], ast[2],ast[3],ast[4] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) diff --git a/lua/stepA_mal.lua b/lua/stepA_mal.lua index be110082..4dc5d571 100755 --- a/lua/stepA_mal.lua +++ b/lua/stepA_mal.lua @@ -84,6 +84,7 @@ function EVAL(ast, env) if not types._list_Q(ast) then return eval_ast(ast, env) end local a0,a1,a2,a3 = ast[1], ast[2],ast[3],ast[4] + if not a0 then return ast end local a0sym = types._symbol_Q(a0) and a0.val or "" if 'def!' == a0sym then return env:set(a1, EVAL(a2, env)) -- 2.20.1