From 0805f4ce3b6d2291875ae4e531b579caed4d8397 Mon Sep 17 00:00:00 2001 From: Bastien BONTE Date: Fri, 7 Mar 2025 11:11:16 +0100 Subject: [PATCH] Fixing a large number of indentations in a table If the indentation was larger than 16, an error `subcapture nesting too deep` was thrown. --- lua-parser/parser.lua | 6 +++++- test.lua | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lua-parser/parser.lua b/lua-parser/parser.lua index cb0cdb8..2b44568 100644 --- a/lua-parser/parser.lua +++ b/lua-parser/parser.lua @@ -214,8 +214,12 @@ local function sepBy (patt, sep, label) end end +local function cut(s, idx, match) + return idx, match +end + local function chainOp (patt, sep, label) - return Cf(sepBy(patt, sep, label), binaryOp) + return Cmt(Cf(sepBy(patt, sep, label), binaryOp), cut) end local function commaSep (patt, label) diff --git a/test.lua b/test.lua index 532ded8..636d1ee 100755 --- a/test.lua +++ b/test.lua @@ -3752,6 +3752,28 @@ e = [=[ { `Set{ { `Id "gl_f_ct" }, { `Number "0" } }, `Set{ { `Id "f" }, { `Function{ { }, { `If{ `Op{ "le", `Id "gl_f_ct", `Number "0" }, { `Set{ { `Id "gl_f_ct" }, { `Number "1" } }, `Return{ `Number "1000" } } }, `Return{ `Op{ "unm", `Number "1000" } } } } } }, `Call{ `Id "print", `Op{ "gt", `Call{ `Id "f", `String "1st call" }, `Call{ `Id "f", `String "2nd call" } } }, `Set{ { `Id "gl_f_ct" }, { `Number "0" } }, `Call{ `Id "print", `Op{ "lt", `Call{ `Id "f", `String "1st call" }, `Call{ `Id "f", `String "2nd call" } } } } ]=] +-- table indentation + +s = [===[ +return {{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}} +]===] +e = [=[ +{ `Return{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table } } } } } } } } } } } } } } } } } +]=] + +r = parse(s) +assert(r == e) + +s = [===[ +return {{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}} +]===] +e = [=[ +{ `Return{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table{ `Table } } } } } } } } } } } } } } } } } } +]=] + +r = parse(s) +assert(r == e) + r = parse(s) assert(r == e)