diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-06-18 18:10:59 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-06-18 18:11:09 -0700 |
| commit | f83cc3ad8afaa122867270a9b1255295e902c422 (patch) | |
| tree | 6d91f47c05f7173e3e447ae4f1412442edd6f6b2 /code_obj.moon | |
| parent | a22de3fdbbebb310a07252bd99b1ca8acb685ea6 (diff) | |
More streamlining and cleanup.
Diffstat (limited to 'code_obj.moon')
| -rw-r--r-- | code_obj.moon | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/code_obj.moon b/code_obj.moon index 3daed04..9e2e324 100644 --- a/code_obj.moon +++ b/code_obj.moon @@ -115,6 +115,7 @@ class LuaCode extends Code return unless #vars > 0 seen = {[v]:true for v in *@free_vars} for var in *vars + assert type(var) == 'string' unless seen[var] @free_vars[#@free_vars+1] = var seen[var] = true @@ -124,30 +125,21 @@ class LuaCode extends Code return unless #vars > 0 removals = {} for var in *vars - removals[var[1]] = true + assert type(var) == 'string' + removals[var] = true stack = {self} while #stack > 0 lua, stack[#stack] = stack[#stack], nil for i=#lua.free_vars,1,-1 - if removals[lua.free_vars[i][1]] + free_var = lua.free_vars[i] + if removals[free_var] remove lua.free_vars, i for b in *lua.bits if type(b) != 'string' stack[#stack+1] = b @__str = nil - as_statements: (prefix="", suffix=";")=> - unless @is_value - return self - statements = LuaCode(@source) - if prefix != "" - statements\append prefix - statements\append self - if suffix != "" - statements\append suffix - return statements - declare_locals: (to_declare=nil)=> if to_declare == nil to_declare, seen = {}, {} @@ -162,9 +154,20 @@ class LuaCode extends Code gather_from self if #to_declare > 0 @remove_free_vars to_declare - @prepend "local #{concat [type(v) == 'string' and v or string.as_lua_id(v[1]) for v in *to_declare], ", "};\n" + @prepend "local #{concat to_declare, ", "};\n" return to_declare + as_statements: (prefix="", suffix=";")=> + unless @is_value + return self + statements = LuaCode(@source) + if prefix != "" + statements\append prefix + statements\append self + if suffix != "" + statements\append suffix + return statements + __tostring: => if @__str == nil buff, indents = {}, @indents |
