diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-05-04 13:49:09 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-05-04 13:49:20 -0700 |
| commit | 126f51f955351a4ce85f3f1e6da6e9219ec7e23a (patch) | |
| tree | a5189914f3dfe94e465518b60dadc4f0422be971 /code_obj.moon | |
| parent | a5bbce315dd9e6861d426bb16a3d792e2a3c0dfc (diff) | |
Removing varargs from free var functions.
Diffstat (limited to 'code_obj.moon')
| -rw-r--r-- | code_obj.moon | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/code_obj.moon b/code_obj.moon index dbb0211..d038cc8 100644 --- a/code_obj.moon +++ b/code_obj.moon @@ -134,27 +134,27 @@ class Lua extends Code lua.is_value = true return lua - add_free_vars: (...)=> + add_free_vars: (vars)=> seen = {[v]:true for v in *@free_vars} - for i=1,select("#",...) - var = select(i, ...) + for var in *vars if type(var) == 'userdata' and var.type == "Var" var = tostring(var\as_lua!) elseif type(var) != 'string' var = tostring(var) + assert(var\match("^[_a-zA-Z][_a-zA-Z0-9]*$")) unless seen[var] @free_vars[#@free_vars+1] = var seen[var] = true @__str = nil - remove_free_vars: (...)=> + remove_free_vars: (vars)=> removals = {} - for i=1,select("#",...) - var = select(i, ...) + for var in *vars if type(var) == 'userdata' and var.type == "Var" var = tostring(var\as_lua!) elseif type(var) != 'string' var = tostring(var) + assert(var\match("^[_a-zA-Z][_a-zA-Z0-9]*$")) removals[var] = true stack = {self} @@ -183,14 +183,16 @@ class Lua extends Code for var in *@free_vars unless seen[var] seen[var] = true + assert(var\match("^[_a-zA-Z][_a-zA-Z0-9]*$")) to_declare[#to_declare+1] = var for bit in *@bits if bit.__class == Lua gather_from bit gather_from self if #to_declare > 0 - @remove_free_vars unpack(to_declare) + @remove_free_vars to_declare @prepend "local #{concat to_declare, ", "};\n" + return to_declare __tostring: => if @__str == nil |
