diff --git a/moonscript/compile.lua b/moonscript/compile.lua index 368eead7..29a075e0 100644 --- a/moonscript/compile.lua +++ b/moonscript/compile.lua @@ -61,6 +61,9 @@ do local _exp_0 = mtype(l) if "string" == _exp_0 or DelayedLine == _exp_0 then line_no = line_no + 1 + for _ in l:gmatch("\n") do + line_no = line_no + 1 + end out[line_no] = posmap[i] elseif Lines == _exp_0 then local _ diff --git a/moonscript/compile.moon b/moonscript/compile.moon index 27ab017c..f386c334 100644 --- a/moonscript/compile.moon +++ b/moonscript/compile.moon @@ -44,6 +44,7 @@ class Lines switch mtype l when "string", DelayedLine line_no += 1 + line_no += 1 for _ in l\gmatch"\n" out[line_no] = posmap[i] when Lines _, line_no = l\flatten_posmap line_no, out diff --git a/moonscript/parse.lua b/moonscript/parse.lua index eb4bffc4..276de4f8 100644 --- a/moonscript/parse.lua +++ b/moonscript/parse.lua @@ -39,7 +39,7 @@ local Break = P"\r"^-1 * P"\n" local Stop = Break + -1 local Indent = C(S"\t "^0) / count_indent -local Comment = P"--" * (1 - S"\r\n")^0 * #Stop +local Comment = V"Comment" local Space = _Space * Comment^-1 local SomeSpace = S" \t"^1 * Comment^-1 @@ -392,6 +392,8 @@ local build_grammar = wrap_env(function() CheckIndent = Cmt(Indent, check_indent), -- validates line is in correct indent Line = (CheckIndent * Statement + Space * #Stop), + Comment = P"--" * (Cmt(NoSpaceLuaString, function() return true end) * Space^-1 + (1 - S"\r\n")^0 * #Stop), + Statement = pos( Import + While + With + For + ForEach + Switch + Return + Local + Export + BreakLoop + @@ -505,11 +507,12 @@ local build_grammar = wrap_env(function() SingleString = simple_string("'"), DoubleString = simple_string('"', true), - LuaString = Cg(LuaStringOpen, "string_open") * Cb"string_open" * Break^-1 * + LuaString = Space * NoSpaceLuaString, + NoSpaceLuaString = Cg(LuaStringOpen, "string_open") * Cb"string_open" * Break^-1 * C((1 - Cmt(C(LuaStringClose) * Cb"string_open", check_lua_string))^0) * LuaStringClose / mark"string", - LuaStringOpen = sym"[" * P"="^0 * "[" / trim, + LuaStringOpen = "[" * P"="^0 * "[" / trim, LuaStringClose = "]" * P"="^0 * "]", Callable = pos(Name / mark"ref") + SelfName + VarArg + Parens / mark"parens",