diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-06-12 13:56:15 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-06-12 13:56:35 -0700 |
| commit | 0c9973ff0363e400d3d284339b77197c40c3f60c (patch) | |
| tree | 00c51a0cea933b1cec28f45561e3ba74dde466ff /nomsu_tree.moon | |
| parent | 7cd512d15e5bc22c529d5b4e3e02a41fe1e84208 (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.moon | 19 |
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 |
