aboutsummaryrefslogtreecommitdiff
path: root/nomsu.moon
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2018-05-26 15:58:32 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2018-05-26 15:59:03 -0700
commit0c7c06beabc5a2ef4f89923cc8cf59331e2c32cf (patch)
treedd7cd63e52dc4d2c3bf33b9adf7eda87997f76aa /nomsu.moon
parent8cb2788e0dc514e6d6436a7a03e87e414327ec94 (diff)
Moving back to capturing tables in LPEG and everything is a Source, not
string.
Diffstat (limited to 'nomsu.moon')
-rwxr-xr-xnomsu.moon13
1 files changed, 5 insertions, 8 deletions
diff --git a/nomsu.moon b/nomsu.moon
index cd542b0..ff5ec47 100755
--- a/nomsu.moon
+++ b/nomsu.moon
@@ -184,14 +184,14 @@ NOMSU_DEFS = with {}
err_pos = start_pos
--if src\sub(err_pos,err_pos)\match("[\r\n]")
-- err_pos += #src\match("[ \t\n\r]*", err_pos)
- text_loc = lpeg.userdata.source_code.source\sub(err_pos,err_pos)
+ text_loc = lpeg.userdata.source\sub(err_pos,err_pos)
line_no = text_loc\get_line_number!
src = FILE_CACHE[text_loc.filename]
prev_line = line_no == 1 and "" or src\sub(LINE_STARTS[src][line_no-1] or 1, LINE_STARTS[src][line_no]-2)
err_line = src\sub(LINE_STARTS[src][line_no], (LINE_STARTS[src][line_no+1] or 0)-2)
next_line = src\sub(LINE_STARTS[src][line_no+1] or -1, (LINE_STARTS[src][line_no+2] or 0)-2)
pointer = ("-")\rep(err_pos-LINE_STARTS[src][line_no]) .. "^"
- err_msg = (err_msg or "Parse error").." at #{lpeg.userdata.source_code.source.filename}:#{line_no}:\n"
+ err_msg = (err_msg or "Parse error").." at #{lpeg.userdata.source.filename}:#{line_no}:\n"
if #prev_line > 0 then err_msg ..= "\n"..prev_line
err_msg ..= "\n#{err_line}\n#{pointer}"
if #next_line > 0 then err_msg ..= "\n"..next_line
@@ -200,14 +200,11 @@ NOMSU_DEFS = with {}
return true
setmetatable(NOMSU_DEFS, {__index:(key)=>
- make_node = (start, ...)->
- args = {...}
- stop = args[#args]
+ make_node = (start, value, stop)->
source = lpeg.userdata.source\sub(start, stop)
- args[#args] = nil
tree = if Types[key].is_multi
- Types[key](Tuple(unpack(args)), source)
- else Types[key](args[1], source)
+ Types[key](Tuple(unpack(value)), source)
+ else Types[key](value, source)
return tree
self[key] = make_node
return make_node