aboutsummaryrefslogtreecommitdiff
path: root/code_obj.moon
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2018-05-04 13:49:09 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2018-05-04 13:49:20 -0700
commit126f51f955351a4ce85f3f1e6da6e9219ec7e23a (patch)
treea5189914f3dfe94e465518b60dadc4f0422be971 /code_obj.moon
parenta5bbce315dd9e6861d426bb16a3d792e2a3c0dfc (diff)
Removing varargs from free var functions.
Diffstat (limited to 'code_obj.moon')
-rw-r--r--code_obj.moon16
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