From b6d3cbd61cd08e39d20a569b7c5ece6bb25897dd Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 1 Jan 2019 15:05:58 -0800 Subject: Misc changes, including text indented interpolations are now indented relative to the text, not the opening '("', code objects can now remove all free vars, the REPL uses global vars. Error API is changing a bit. --- code_obj.moon | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'code_obj.moon') diff --git a/code_obj.moon b/code_obj.moon index bdce010..9315264 100644 --- a/code_obj.moon +++ b/code_obj.moon @@ -179,7 +179,8 @@ class LuaCode extends Code seen[var] = true @dirty! - remove_free_vars: (vars)=> + remove_free_vars: (vars=nil)=> + vars or= @get_free_vars! return unless #vars > 0 removals = {} for var in *vars @@ -198,18 +199,21 @@ class LuaCode extends Code stack[#stack+1] = b @dirty! + get_free_vars: => + vars, seen = {}, {} + gather_from = => + for var in *@free_vars + unless seen[var] + seen[var] = true + vars[#vars+1] = var + for bit in *@bits + unless type(bit) == 'string' + gather_from bit + gather_from self + return vars + declare_locals: (to_declare=nil)=> - if to_declare == nil - to_declare, seen = {}, {} - gather_from = => - for var in *@free_vars - unless seen[var] - seen[var] = true - to_declare[#to_declare+1] = var - for bit in *@bits - unless type(bit) == 'string' - gather_from bit - gather_from self + to_declare or= @get_free_vars! if #to_declare > 0 @remove_free_vars to_declare @prepend "local #{concat to_declare, ", "};\n" -- cgit v1.2.3