diff --git a/luatokens.lua b/luatokens.lua index 406fba5..d50f6c1 100644 --- a/luatokens.lua +++ b/luatokens.lua @@ -484,38 +484,34 @@ do local tmaybe_comment = setmetatable({["-"] = "comment"}, {__index=defs}) mknewline(tmcomment, 1, defs) mknewline(tmcomment.comment_proper, 1, defs) tmcomment.comment_proper[""] = "self" - do local tlongcomment = {} - tmcomment.longcomment = tlongcomment - do local tllongcomment_proper = selfify({[""] = "self", ["]"] = function(state, token) state.longcomment_close = 0 return "maybe_end" end}) - do local tllmaybe_end = selfify({comment = tcomment}, "maybe_end") - tllongcomment_proper.maybe_end = tllmaybe_end - tllmaybe_end = tllongcomment_proper - tllmaybe_end["="] = function(state, token) - state.longcomment_close = state.longcomment_close + 1 + do local tllongcomment_proper = selfify({[""] = "self", ["]"] = function(state, token) state.longcomment_close = 0 return "maybe_end" end}) + tmcomment.longcomment = tllongcomment_proper + do local tllmaybe_end = selfify({defs = defs}, "maybe_end") + tllongcomment_proper.maybe_end = tllmaybe_end + tllmaybe_end.longcomment_proper = tllongcomment_proper + tllmaybe_end["="] = function(state, token) + state.longcomment_close = state.longcomment_close + 1 + return "maybe_end" + end + tllmaybe_end["]"] = function(state, token) + if state.longcomment_close == state.longcomment_count then + state.longcomment_close = nil + state.longcomment_count = nil + return "defs" + else + state.longcomment_close = 0 return "maybe_end" end - tllmaybe_end["]"] = function(state, token) - if state.longcomment_close == state.longcomment_count then - state.longcomment_close = nil - state.longcomment_count = nil - return "defs" - else - state.longcomment_close = 0 - return "maybe_end" - end - end - tllmaybe_end[""] = "longcomment_proper" - tllmaybe_end[-1] = function(state, token, rule) - if not rule then - state.longcomment_close = nil - end + end + tllmaybe_end[""] = "longcomment_proper" + tllmaybe_end[-1] = function(state, token, rule) + if not rule then + state.longcomment_close = nil end end - - tlongcomment.longcomment_proper = tllongcomment_proper - mknewline(tlongcomment, 1, tllongcomment_proper) - setmetatable(tlongcomment, {__index=tllongcomment_proper}) end + + mknewline(tllongcomment_proper, 1, tllongcomment_proper) end tmcomment.maybe_longcomment = setmetatable({ @@ -536,7 +532,7 @@ do local tmaybe_comment = setmetatable({["-"] = "comment"}, {__index=defs}) return "longcomment_count" elseif token == "[" then state.longcomment_count = 0 - return "longstring" + return "longcomment" end end, }, {__index=tmcomment}) diff --git a/test.lua b/test.lua index a8a830d..4e9b132 100644 --- a/test.lua +++ b/test.lua @@ -385,6 +385,7 @@ do -- long comments local luatokens = require "luatokens" local tokens = luatokens.defs local state, err, etoken, estate = parser.parse(tokens, [==[--[[ + --]]]==]) local case = case() if not state then @@ -396,7 +397,7 @@ do -- long comments print(case, "---- OUT TOKENS ----") else assert(table.remove(state, 1) == nil) - assert(state.line == 2) + assert(state.line == 3) end end -- long comments