aboutsummaryrefslogtreecommitdiff
path: root/nomsu_tree.moon
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2018-06-12 13:56:15 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2018-06-12 13:56:35 -0700
commit0c9973ff0363e400d3d284339b77197c40c3f60c (patch)
tree00c51a0cea933b1cec28f45561e3ba74dde466ff /nomsu_tree.moon
parent7cd512d15e5bc22c529d5b4e3e02a41fe1e84208 (diff)
Tidying up exceptions and error reporting. Also simplified the grammar a
tiny bit.
Diffstat (limited to 'nomsu_tree.moon')
-rw-r--r--nomsu_tree.moon19
1 files changed, 6 insertions, 13 deletions
diff --git a/nomsu_tree.moon b/nomsu_tree.moon
index fe365c2..3339606 100644
--- a/nomsu_tree.moon
+++ b/nomsu_tree.moon
@@ -27,23 +27,16 @@ Tree = (name, fields, methods)->
--assert Source\is_instance(source)
return source, ...
.is_multi = is_multi
- .map = (fn)=>
- if type(fn) == 'table'
- return @ unless next(fn)
- _replacements = fn
- fn = (k)-> _replacements[k]
- return @_map(fn)
if is_multi
.__tostring = => "#{@name}(#{table.concat [repr(v) for v in *@], ', '})"
- ._map = (fn)=>
- if ret = fn(@)
- return ret
- new_vals = [v._map and v\_map(fn) or v for v in *@]
- ret = getmetatable(self)(@source, unpack(new_vals))
- return ret
+ .map = (fn)=>
+ if replacement = fn(@)
+ return replacement
+ new_vals = [v.map and v\map(fn) or v for v in *@]
+ return getmetatable(self)(@source, unpack(new_vals))
else
.__tostring = => "#{@name}(#{repr(@value)})"
- ._map = (fn)=>
+ .map = (fn)=>
fn(@) or @
Types[name] = immutable fields, methods