From 0c9973ff0363e400d3d284339b77197c40c3f60c Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 12 Jun 2018 13:56:15 -0700 Subject: Tidying up exceptions and error reporting. Also simplified the grammar a tiny bit. --- nomsu_tree.moon | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'nomsu_tree.moon') 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 -- cgit v1.2.3