Parse tree depth limit

Hello,
I have this grammar

@skip { spaces | newLine }

@top Program { "{" Expr "}" }

@precedence {
    join @left,
    abstract @left
}

Expr {
  JoinExpr | AbstractExpr
}

JoinExpr {
    BasicExpr |
    JoinExpr !join "," Expr
}

AbstractExpr {
    BasicExpr !abstract ":" Expr
}

BasicExpr {
    String
}

@tokens {
  String { '"' (!["\\] | "\\" _)* '"' }
  spaces[@export] { $[\u0009 \u000b\u00a0\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]+ }
  newLine[@export] { $[\r\n\u2028\u2029] }
}

A user accidentally pasted a large JSON text (~800 lines) into the editor, and the editor crashed with this error

node_modules/@lezer/common/dist/index.js:1280
            let endPos = cursor.pos - buffer.size, index = data.length;
                                                                ^

RangeError: Maximum call stack size exceeded
    at takeNode (node_modules/@lezer/common/dist/index.js:1280:65)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)
    at takeNode (node_modules/@lezer/common/dist/index.js:1302:21)

I realize that it’s related to the parse tree depth, is there an elegant way to handle this error such that it keeps the editor up and the user can still delete/edit the content?

Which version of @lezer/lr are you using? An issue like this was fixed in 1.3.12

The latest 1.3.13

Could you link to an example input that causes the problem with that grammar?

Here is an example to reproduce:

{"l78mR":"OkzkFAzFiZe7",
"rRrkj":"tTBIpBK",
"bQBPE":"DQ4",
"YCXCS":"OeYz3r",
"ebWKR":"vURYv1KDgLe2",
"kAUNe":"egKf55JZICz2n90",
"XwUvA":"kz8tmTkSnWxDt",
"gD01V":"VC",
"hCQY1":"S8MhIAGyjtXe2",
"wY7xp":"HB",
"6vytt":"GF4oFSDGzd19",
"9O7ca":"lmNWGR",
"Y48GP":"p1YWaXGJjqsBBGj5JW",
"0TLT2":"1XnQH",
"Y49E0":"vguJh",
"fELv7":"73W3",
"9I5rv":"WgPEAsCU",
"33HMw":"YgNXUPj7",
"K9WDt":"l8Vxs9gwBlpO",
"Yi2Yx":"CX3uga5k",
"mzEsA":"uVf0",
"cnzjK":"h1hwL7",
"0Odyn":"Xky7",
"lQHMK":"FYfXCzWDv",
"4t27A":"bPEdJzJ",
"gLqXd":"a5cFaf6GCULX76d",
"Eu5DH":"hB0g7lQRvu7x7pnm",
"wyTl9":"KAQo6imKz",
"OWPFW":"er",
"sDvfd":"6jD5xy85zTmDAaa5ex",
"P3WWU":"E8jW12iX77gTTWJxX",
"H2Ag3":"btLeYeNPGINGV",
"0HO8d":"ktXrE58",
"4928E":"hi2JPEog0nsv4ukU7X7",
"umkbl":"WU8Oc7bYMFSvijb4uL",
"KbXRm":"6J2dEFZzJNk9Hmv",
"cygNn":"B4aF",
"WF3P7":"WX3Vaqykw",
"wrXcD":"Zk2pXjrEAXOWLX2mtJE",
"bBb2O":"9K",
"SO8uv":"fr7yMqLhwmgmI",
"mJ2H3":"tTE4",
"bjGVu":"0k",
"MpNMK":"YNGIGx2iO0Qc0",
"sILqI":"Nzhszmxy9c",
"PmMJg":"AnINHhmnPDUr",
"z6pbn":"TtmQzl",
"i7z9N":"QeQH",
"7vLKv":"sLPmt24N8",
"OaDq2":"YH11jExz",
"4hIcm":"khu05Suv",
"FLiGH":"KAJmUo60qkyOEP",
"OhvrG":"WXKN60",
"N00QN":"XKJ",
"MWuUh":"N0k8Thj",
"2C2FL":"ojiVtJnBBJ4TZKhfdDW",
"49OTc":"EcHqVURqS3",
"q8nKa":"1qPfqtLmGSMLm7GJB7",
"VovJv":"eo95uM19GDvGx",
"d1ZRg":"5FPnQMd4Wxz8BH",
"Ce6lI":"OLkjtXJgfMNwV3X",
"YBtKV":"COiA7tSoEbMgJPx",
"MGOVY":"OFDF2u",
"gcmpG":"3QKWKowzpqGoeN1aR5",
"ka87s":"JLasFbU",
"apuX6":"IOfhBW0sS6tUAF2s",
"AYYw1":"GtE5VwFs1Vs9TaTMl2h",
"f372K":"Kx",
"eyNzd":"mmdxQ5HpsI8iqTq6m",
"Bexhb":"P",
"1TsHe":"JlyXLBrF12eo062I5",
"GSnOw":"2yhTaKMu5d1d",
"ISjig":"8Hzxg",
"ZFkAQ":"cw3eQ1sPYARBiTPH",
"p2RLY":"npGsJDG",
"FnOaT":"5NDHkjR5je",
"hKREu":"UOeazAEur7WE7udZAS",
"Kzl1s":"UUSa5SQrdMYVNmzkG9",
"7ioVR":"7XP6gDgdqa",
"XzRYh":"YpWocDGH",
"H7pMk":"YLziO058hg0W",
"XPz49":"yepLPJYJKRI1Bg3VoUl",
"Ep8xY":"QnrY3AKcGaNPt",
"3JPEg":"xF6HJUXqvzJpYmc",
"HmGiV":"M8lIJMSX3W2V",
"hQw7k":"l",
"m8fA6":"yP4",
"wXhIi":"1D4uFP5Pxo9xjX",
"BevQj":"FiUV6uN5KsoK",
"AiRqM":"F8YOUc",
"cuzI7":"5OcEV8dNAv5DrBy",
"BYjwV":"bDuhzDf",
"tGCPl":"a6w",
"19Zav":"ZLAewaYVXYp6Tbk",
"cZ0kH":"RgSbm3UYC",
"6ijxp":"rA",
"T4RL4":"MEdrQt432",
"Qlpv6":"wt2mghlwEPnkXQ",
"7dGG3":"FvqrLEFKqM",
"D78ni":"jqcRDgtKtYmdjsg7rFt",
"HoOTC":"72WuyylXdC5ulV0NBkH",
"OIZHA":"mWVm4YRkifaQbgyUzTRY",
"W7tIs":"0how",
"Jx8Yg":"tpgwFbsB0mvMrM2S",
"CymzP":"a",
"dC6Lw":"rL8LLJZ",
"AuYnU":"XI8",
"6LKhK":"EDIcfkSzDG72wH",
"0V3T4":"TNdKF",
"6TS1f":"OMEycws5FEk",
"e31ko":"Epp5p",
"0Iaqd":"N4",
"uLDD2":"BbYp6kw2579IqWQN7p",
"h7RN1":"CVUbUBMTWICErD",
"mvV0Z":"KkeNbXFjQyTVIlRc",
"jIFUV":"GNbo",
"L1P56":"bn9M4MBl",
"115Y8":"u7MmvJGi8qy4h7Yv3dJ",
"tog5v":"NrSLnGUOBB5JBq093ivJ",
"1DnHk":"ucDRJIyRlS0cER",
"dvVg6":"3NXpVNl2",
"tWAuw":"dIg9jMntZOIr",
"cBoxh":"HG",
"rdDxb":"PCxE7V090f",
"kCu4O":"YApiVvThbyWPr3",
"5h8K1":"oGcrhQgO9LkKSkwA",
"70oLA":"vIOohFEP5qy4KC",
"T8oVe":"qebSBhNu8z6JwoQjAE",
"pEmuV":"hsRl0C9wmzUuzZE",
"yS0IK":"kV2cFf7u",
"4fBTM":"Pvd299ycXJoTBimxch",
"356KH":"IHa1U",
"Iu50F":"rtsj5lEJ8mylJvErObZ",
"5Iz9g":"v36XhRcZ",
"Q7r59":"P3wPJGjBq",
"ChQdU":"3O1Is",
"sFL3A":"L0nLDvBOdba4X311",
"4YJlE":"mg6xIG446",
"6A2cC":"yzn5cH",
"Tw96B":"DSGE664XplxF5V8XnS8",
"YRU3y":"9kUxmDyJ15H2EOkPqgP6",
"sNjMC":"8Yq4TZqLeYVx2EK9KDTS",
"jkTbR":"DL",
"YBecJ":"E9FHrxE3b",
"sUxv6":"ZS0Ej",
"HsfTK":"UIje",
"yiSnZ":"0kDtFSM",
"y8MG5":"jrbSGjWvb",
"wOwaW":"bEjgTpigkwabfUy3RIF",
"lPUAa":"0yj2zOdINY",
"xm9bo":"LsaSQDkGJN0B",
"9h2tD":"wci1",
"WfMXD":"CXxeBxv0YI",
"Uo7Kq":"nwDmfh3iObkpB4",
"YBBHd":"z7jgU0smrAWHvKa",
"RnAsk":"SN",
"zvmcG":"eRlSu1ZYDviYFa",
"ToLq8":"bR1u1yBL3T",
"NlkP4":"YPXlu7yB",
"xY5Bq":"Wi82o2",
"W1Axh":"h",
"uompR":"XHenm1E32mEreQ",
"NxLYN":"wlR4hHZYuxwTOC3",
"wKztN":"xjKCO",
"vIXua":"97PAUgh",
"GGLAE":"uk8Dx6",
"yMbzF":"3SjW32Oi1o8oS",
"AH8rk":"y6wLGTcyORXSUzidLlJK",
"MXwWk":"YXt2yJXkIp",
"xF5nT":"LHyVmlZvzzaD",
"zC0Kh":"bDygxrcMGNxYbcd",
"UZgXg":"DS1WkK",
"cMV1E":"JJ3B21FvHSw1Qb",
"EJhXj":"HfU",
"l56Nq":"tSgO0yoHytHg6cRCG",
"Uhr32":"PKhEKK5Wxwt",
"l0VGE":"KOpwebx",
"3UxLh":"XUK2NVt",
"CMQdx":"PmxAw",
"BsMnn":"aAyJdf",
"hX4oZ":"NawIPnpz4ZY",
"wUcfO":"bXK0z5",
"fOObq":"4ZjlFVlimFxD6h",
"gavCS":"6m",
"dk5AO":"PlMnFQ5gP0tWCahT",
"kpuNB":"MYOEtg2oQJRR",
"P8qDb":"qX3zsSWJqlrxUI4uFCtH",
"ACH1Z":"L7y6l8uBQxqbpzjsXwe",
"JcNOS":"uFq6",
"FXkBy":"mUYSv5hzpYEL2fl9",
"FocWB":"g7bLT1fpi",
"CeNX9":"YflTzNHngwO7Xr",
"XPpL9":"wbFoFVu7GsTse",
"e6J8M":"wJTcU2",
"uA2OJ":"4bNTOz5vGFEYc",
"XVcMO":"qBwJqcrhrZOkXMD",
"GNg27":"GKEQ3nLJ6p7Mk3F1os",
"rUhwu":"cZBn1Ez8qC0Pe66sn",
"rGj2z":"sAlAff",
"btAIU":"7vp7Rw5",
"2MUvK":"hpSY8EfGtGtYXR9q",
"uZ91Q":"lwG4lpG",
"k84eu":"BskqEJknqI4wSF",
"E1WYg":"qU3ibnlZPRQeV8SGA",
"FAOze":"4qYtqZKOOA5k4J8",
"e4Djo":"SY8AcC5p",
"Thvs7":"2GaVgcenAhBdo",
"xiuHd":"UpDTCojHuMVwljrj0yx",
"2tcSl":"v2TW",
"goPRK":"DmcMb3I09d",
"IuSKa":"AC2IUpWH7l4IuQE",
"S1bLp":"w",
"4syCC":"2a0",
"k0uwO":"L25NxvtezoU",
"lYG9t":"OPvCNWmJiWL",
"sSO4R":"4FN0vl",
"UjWbj":"jb1CMT",
"JlUjn":"WSHF7kTldr2",
"b51tW":"rdzDXVj7NiLNc",
"3pza4":"aIODsqnt3",
"D8RoX":"2Mwh7DV",
"rfCXs":"3WFH6W",
"fQQdB":"QnSQxAHRk8olC",
"0VuoI":"SpLa",
"cckEc":"15E45fDF",
"p6dLK":"T8hh0iu5DJs6",
"mBove":"2QPQPrGWnUV7",
"VFMb4":"brbbnrsE",
"Plj5W":"kjRY3KlHFcI",
"RtDNR":"bKZTkVS",
"oeEre":"icgM",
"I65Yw":"1fQ",
"667YQ":"NcbeJH7S73Nr",
"puL8F":"L9HMqIiJmddnXJvFSz",
"AyWSQ":"CdTUz7HN0g02X0",
"pgTDE":"ufeIE2e",
"KvnAi":"O",
"lcIdy":"lrOgqh5ehkWeBIGxlOiP",
"P5Zgr":"PSGwgs10WscO4",
"glYcN":"bLImaJeChw5D78w4uYIj",
"ojPvp":"HzY",
"K8jxG":"cFNAVaf0",
"bSQLA":"ClJVJCDjq",
"fKvS4":"AOZ9NTnoVs0p7TDR",
"2AFGo":"ALqSI5BNd1amBe0",
"NMuS7":"57cC6Lyp",
"HI194":"x",
"0db4c":"6kHA",
"M3xcO":"2f4Hm",
"moJ87":"dNXLsGyXbMeaKAGM3it",
"gXrNI":"BZH0cCKIJKh62",
"u8FiC":"AD2omDtMxoSX2tL",
"tlplv":"OAvlMTDFQR",
"7ASTc":"qBFf5mNgHTo1lPR",
"qZcZj":"pE3BMnCXVTN6VcSn",
"19uaM":"hydFJ",
"gk2TG":"yniLD6oDd",
"juCbi":"ucUqVSRZycwMJsHI",
"rLf27":"v6PKZg",
"f0VI9":"PGdF3rkIONdbrz",
"qTkAj":"3dLdx4kyd2kKI",
"60YuX":"cB",
"3Umlg":"xj1x5Ouput5vnRbUBwH",
"hXdES":"JZKmKL62ZTtlYUMyd",
"iTQqZ":"onvwEW9dIgBP8OyQXR",
"39wei":"OBR1M23KqymmfjB",
"OUps0":"r2AMLgvnWm5cqcAlls",
"SbZX7":"HFYMtDnYx7qbvKKfBl8q",
"fRWxI":"LlhXJ78ktU7rA1j",
"bA65T":"SxpzV1cN30",
"QfJqe":"i6pIYKU7qWRp7y4xrtQu",
"2CN4J":"TD",
"rQiSY":"nDUq54pUJaJ",
"ku1Lb":"hwkH8zg8IzE",
"Ohviy":"NFmgo0ipUq5v6",
"lRFm9":"reycK",
"B03VW":"9be",
"XcQTR":"DtFi3k0zDdKS",
"UlOsk":"4Tzfpu",
"t6Lpl":"WEBcTjrmIUR4Vptcpo5G",
"LPLNq":"vRmMoxa8XlKIQAVb8",
"eTeTF":"rgl3",
"elHQr":"LD7bFz",
"yXSSZ":"mcZdQY5n",
"Q5SSZ":"FAOArx4kbtIv",
"wjXsP":"8RlNMIMTHslZR",
"ydidZ":"gEZ41cQyf0czJR",
"VKBwK":"9Yo3nDEKf5I9GzmpCuau",
"UxIGY":"BQzcAnPzeF",
"WwFVI":"yCq4YqtWYB4n6WcE2",
"prWvH":"c6P6r",
"SwtfJ":"LwC",
"7SqTJ":"cbCTWBylZIti4QLh",
"DPWLa":"9v7BN",
"vY5Tq":"1Z6b",
"FLgRS":"SoJFTm5eq1tC2Il8rVe",
"yN7oj":"SrUHL",
"VA27V":"vIIzz",
"ggh5Q":"pmX",
"RuXCZ":"gdA",
"cdJXm":"Qz6ZO",
"ejQDH":"Kzeu",
"dKuZo":"NWorKMraVEC188nof",
"WqEYL":"bwqVMV1Sz8",
"CRMum":"8mR",
"mKaGv":"lt9tCKl9iOnzy",
"inAvC":"bNqJmQ",
"TD13i":"ZlMw",
"jIOl0":"fb4haSxJ5QSK",
"Jp8as":"tx4Ja90R5qIR5Twt2",
"njswf":"zwH9lYluLS5iM0bsSh",
"FWSkl":"9R",
"l8iMb":"qtqpT",
"WcskR":"RDHoXBHDsxSO",
"DpX0h":"FyI8bvZucNE",
"dCgrb":"KpZj9ZSMziTQ3",
"Sdj8D":"Z2Wb",
"Jjja5":"X9vqtyt",
"tzqup":"A2",
"fcATv":"ilpk",
"SGpAF":"96CJuLAJ0CkDJlWF",
"6tYrt":"KeWBRASkfWpDZv6EjF6G",
"VK2rI":"UXhaWIBMmiou",
"xrr8K":"J9aMF9CjaiDKr91MsnR",
"zO4jM":"j7",
"F2TBP":"OL",
"XP4S4":"dtmFIL6pNi",
"53IVz":"8YGB2Doo",
"D2bER":"Z",
"9o6Xt":"WXaNy7Is2",
"CvfEb":"31xBSmRZq",
"lKvYu":"eCKr5uoA6",
"shzrA":"ELEh4iYx1RZhA",
"gc4Kg":"sLCrGZHxl8fP",
"Pigup":"Faf5oTAdC3QHBzM4z",
"rrfsk":"dcfofTEw9Coa",
"SjKRn":"RwjZLdgeBoY",
"CxCR6":"8y0Cn",
"G4Luk":"DJQJJj7DPg0",
"h7Grf":"nDtt",
"Vc1JH":"UcDmE",
"0aVN6":"y7wYs0w",
"VHWo7":"PN",
"hR6Ha":"i1pWdbU",
"fAGvT":"RC4q1NSBWyg",
"CGOAr":"i0QLMw3EYuxY",
"ZN1A6":"4f9UL7TzqnHgu3lXjv",
"WsL7M":"0L",
"mFDRa":"UeBwHQYEjPkH",
"k1Wha":"svjxpGbkTZawcl6yAvSq",
"25sC5":"Ll5GV",
"Wt4Bc":"7Z8qvCONFM1brD5X",
"mh9iv":"kDqJ2JFTWla",
"Fwqca":"YtaNL0Vj5w",
"qDo5h":"pj4ydNAFVETVkgXBspk7",
"GNpal":"z2vO6uwYTt",
"4LRpR":"ybJzg",
"Zeybg":"F0pVDxf6VFrGjlAgw34",
"1ywGJ":"P62FaKmxWrS7DuURPE",
"FcgET":"MhXl5ec3paZ5jWb154d",
"0y6hR":"OP",
"qp8Wd":"ihfF0Zkca",
"BsL9J":"1NpLTpCBZLA0D4BP2",
"q3NoB":"Yc41R7",
"tniO9":"AW",
"Fwpnf":"ydHmZN",
"kDPEH":"ZVvwk",
"hVnf6":"ZJW0E0nIr",
"fKBeA":"7bpxBa",
"ysrqD":"SBmqtirfzq6FqExYxI",
"zsxza":"OzhtaI4",
"ic1dz":"0zkn9sdRrdMNKVq8uUTa",
"a0ip8":"v5pZI8W5h",
"q76XF":"0j9ckmF5QieJIN596",
"zFRmq":"IM4t",
"J9VqU":"U5ACugTWDiu",
"PHaYn":"gvkmSt3Wxm",
"Triuh":"F7omd9bKs3k",
"5ZWr3":"LAa4ZzLwMXMKk70p",
"2GiMH":"g",
"qxMkz":"scoeX94PoVGg4chaB",
"iX7BV":"XHaSjszT1Eal1oJkLa5G",
"04ipW":"SOxB33gKOlY1Zfl",
"SKAqk":"eAO7uX33VUx4",
"NFrTV":"jYDsvbzBc0MJvEtx",
"Kvxze":"JIYAgBJbV3zX8",
"JHWzr":"Ca",
"gcj5k":"xIAJD1U8He4yKy",
"Xd8cL":"lZ5WqXdWY37MrIa",
"mBwJh":"mhdDDJg",
"3aLrF":"RqEonmHK",
"SedpV":"D4q5oTUy",
"D5Eey":"sXqDWX",
"SAyVO":"MhPxrXzK",
"Pp77F":"0Ik",
"kEJzb":"0K",
"QigXt":"UH7EEmOYQ7EpwSMjFmgs",
"j4Bih":"SpZUDpo5Xia",
"RZc7s":"u8YqTPCWOUJm4W",
"wQGli":"z",
"DTZd6":"jSqwXkZzQRJUbF",
"VfGZS":"tVcS000",
"bqzho":"HPVoRJR9lKJr",
"XoopJ":"9H",
"Yttfo":"prpJq0fylq",
"YdGnp":"Uk",
"2OJmE":"0p",
"YCYjB":"Vyej",
"lBOub":"DnUD3maoy",
"JBScN":"KU2WULFGI6",
"SmonI":"NcbdEscVkhygDRfodPn",
"6GHRx":"KVAuDm",
"DRUhP":"GxM6TWH7u0Q4lhiOM7w",
"s2Yfw":"8uPW3qgWqyA",
"nunHo":"nL1jvyk43mTs",
"vBcp3":"nV1ZkmU7W0AMB9tc",
"hBlAQ":"8qwUrzdU",
"RGHxN":"mtNHsm0JJk2kDKiyjh5",
"MNs34":"WeNMu9y4PaP9aSKCgahN",
"omh8M":"cEwyw6EzRnOCl",
"fC0JO":"LEEI0eGn70AJxVX7gpxl",
"2jNdQ":"UG",
"o7fHx":"PnG9gSbgs0xa60",
"UGY2b":"llGDORedMsDLT",
"eCWZS":"b86",
"sSzOY":"toXzJJiwzf",
"ekwrW":"CYB7DEVx7bF",
"qFbZa":"WJLa",
"fCNWn":"jUqIXtK1hSP2NOpkxxO3",
"82mrI":"MkTvWfG",
"34sRF":"xd2Thd5",
"S71Dw":"xSmPtIMgyJRpXGT",
"g6JTK":"TtpaE5gghOaFYVL7",
"E9FLG":"wp9N4HyZnHcNDI",
"KfjVO":"aNra5dasJIlF772",
"73IL2":"G7uXRqWB28elWn",
"C1LZU":"pFZXmqX",
"7M9Gi":"Fp3kAv2DbTf5EbqyPYg",
"0PoOc":"DEaEmSd",
"PBFbR":"u",
"otMX9":"TCDeQubo0thIwN",
"Fybhh":"hOLCXukF79t24B8Q",
"8hFzC":"QytsBv",
"85TeG":"uhmTStlARbQb",
"Rot6x":"ND",
"Ojf2g":"60ZFzF6BXAO5Hp1",
"1O85S":"1F",
"y3rdZ":"Knzwe7A1Kue",
"eadOq":"kuzAbYNYdeOzSkK",
"ZD1zY":"IgGJJhfPFsp9J7g6N",
"Ii6jx":"qIUiOF1syRtDTNT",
"R0wmw":"wzO",
"DcGP8":"kOn4C88CdG5esbmrh",
"oiayt":"mvourFE",
"kI3eR":"Lta6Qkvh2XFq83O1R",
"wfS4u":"R9yLy",
"E0UE7":"Htz",
"zeheH":"6E",
"XjxNW":"zeJN",
"0ICMB":"yxhEE21Ls9U2p",
"eHmVf":"3DM82ruRk2gmnDwuuC7M",
"xFekJ":"dOuFaIE6kHtti883",
"qIXcU":"luceOdNjqZHRH",
"JfGX9":"YgQwLPW",
"7hkjp":"EA9eMRJLkOhToCj",
"x7VRr":"4Lldbsrdb9KOP57tG",
"s8Prb":"entV9m",
"1tIUJ":"B",
"T6FKv":"tFicFjHM",
"ZkNly":"0vwhhh2PSNGS4",
"p8WFg":"tPwOuvp56G6Cw",
"NCF25":"10FptaAnd",
"Teug9":"2kIY",
"oPku8":"d29kXIVqR9",
"cXhf1":"A2uC29pO4pOuSKXFPy",
"860wT":"jIhIVs3FC1xDT",
"7UdtG":"UKsIz",
"gsYWt":"pwk0CCGVW6sccDb",
"Eaehh":"Ay1n9joVaRgM",
"5TdrP":"gPYR",
"bAF4F":"A6rTm5aTLQds4jt1Ilz",
"xzlNN":"Fa8SEjb4ZsaXwii",
"4XzQh":"Q2NHWPiQz",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"K7C4i":"eHjx0zUomBy6qFGhuUQ",
"D6BJn":"3MCx2VaSf",
"y3n5O":"lx7pSuqwche",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"C1QPK":"1me5otWWedriyW",
"gCJro":"uLaeZjgkWrhR1rg",
"M16vq":"rflCj",
"sElpA":"DKsqPZe",
"F1Be8":"dRuSuJq",
"Tn6Tw":"qBJn3XBaA0yMc7TPEUzV",
"LAdY0":"GEK75teRDrR",
"h8JSC":"5dazpl5O2zECYvdAZXU",
"vMJmb":"V",
"WqsZB":"n9MZv",
"IoNsx":"XNo94KQcOk",
"U5heT":"bpY9rOR2AF7LZcH7g5S",
"uDIzq":"s",
"qUoo0":"vn9y9bo0qrwy2s5sEeA"
}

Note that JSON is semantically invalid input, it produces the following parse tree:

Program
┖─ Expr                           ━━┓
   ┖─ AbstractExpr                  ┃ This part is repeated
      ┠─ BasicExpr                  ┃ for each property in the JSON input
      ┃  ┖─ String                  ┃ resulting in:
      ┖─ Expr                       ┃ ~(4 * number_of_properties) levels
         ┖─ JoinExpr                ┃
            ┠─ JoinExpr             ┃
            ┃  ┖─ BasicExpr         ┃
            ┃     ┖─ String       ━━┛
            ┖─ Expr
               ┖─ AbstractExpr
                  ┠─ BasicExpr
                  ┃  ┖─ String
                  ┖─ Expr
                     ┖─ JoinExpr
                        ┠─ JoinExpr
                        ┃  ┖─ BasicExpr
                        ┃     ┖─ String
                        ┖─ Expr
                           ┖─ AbstractExpr
                              ┠─ BasicExpr
                              ┃  ┖─ String
                              ┖─ Expr
                                 ┖─ JoinExpr
                                    ┠─ JoinExpr
                                    ┃  ┖─ BasicExpr
                                    ┃     ┖─ String
                                    ┖─ Expr
                                       ┖─ ...

Thanks for the further details! It seems the existing parse depth limit didn’t account for grammars where every rule produced an actual node in the output tree. This patch tweaks it (only a small adjustment was needed) to avoid the error.

Thanks for your response, actually I tried the fix locally and it crashes in a different function:

file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1405
    function copyToBuffer(bufferStart, buffer, index) {
                         ^

RangeError: Maximum call stack size exceeded
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1405:26)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)
    at copyToBuffer (file:///Users/osama/Codemirror/Lezer/common/dist/index.js:1413:29)

I tried this value CutDepth = 2700 * 3 and it seems working

This is with the grammar and test file you provided? Because those are what I was testing with.

Yeah it’s working now, maybe I missed something while linking local packages, alright thanks so much for you help.

Wanted to ask when should I expect the fix to be released?

I’ve tagged 1.3.14

1 Like

Hello,
Now I’m experiencing the issue I mentioned above in this case:
This is the grammar

@skip { spaces | newLine }

@top Program { Def* }

@precedence {
    union @left,
    join @left,
    abstract @left
}

Def {
    "def" String "=" Expr
}

Expr {
  UnionExpr | AbstractExpr
}

JoinExpr {
    BasicExpr |
    JoinExpr !join "," Expr
}

UnionExpr {
    JoinExpr |
    UnionExpr !union ";" JoinExpr
}

AbstractExpr {
    BasicExpr !abstract ":" Expr
}

BasicExpr {
    String |
    "{" Expr "}"
}

@tokens {
  String { '"' (!["\\] | "\\" _)* '"' }
  spaces[@export] { $[\u0009 \u000b\u00a0\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]+ }
  newLine[@export] { $[\r\n\u2028\u2029] }
}

This is the test code:

def a = {
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j",
    "a","b","c","d","e","f","g","h","i","j"
}

The error message:

node_modules/@lezer/lr/dist/index.js:576
    get id() { return this.buffer[this.index - 4]; }
          ^

RangeError: Maximum call stack size exceeded
    at get id [as id] (node_modules/@lezer/lr/dist/index.js:576:11)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1406:15)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)
    at copyToBuffer (node_modules/@lezer/common/dist/index.js:1413:29)

This was tested on the last version 1.3.14, and based on the grammar it’s a valid input. Any thoughts?

Odd how different inputs/grammars lead to a stack overflow at different depths.

One thing you should definitely do is structure your grammar to not emit tons of nested useless nodesβ€”that’ll avoid this and also help with parse speed and memory usage of the syntax tree. Something like this:

@skip { spaces | newLine }

@top Program { Def* }

@precedence {
    union @left,
    join @left,
    abstract @left
}

Def {
    "def" String "=" expr
}

basicExpr {
    String |
    "{" expr "}"
}

expr {
    basicExpr |
    JoinExpr { expr !join "," expr } |
    UnionExpr { expr !union ";" expr } |
    AbstractExpr { basicExpr !abstract ":" expr }
}

@tokens {
  String { '"' (!["\\] | "\\" _)* '"' }
  spaces[@export] { $[\u0009 \u000b\u00a0\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]+ }
  newLine[@export] { $[\r\n\u2028\u2029] }
}

But yeah, the tool shouldn’t crash, even on grammars with tons of nested syntax nodes. Still investigating why the cut-off point doesn’t seem to be predictable.

Yeah I agree getting rid of extra nodes could resolve that, but sometimes these nodes are needed for some editor features like syntax highlighting, folding, etc…

That wasn’t the kind of nodes my refactor got rid of. It replaces Expr(UnionExpr(JoinExpr(BasicExpr(String)))) with String in the treeβ€”which encodes the same information (there is a string here) without adding a lot of uninteresting noise.

I found several factors that could influence the recursion depth in Tree.build without being predictable from the parse stack depth, and concluded that it’ll be better to add a separate mechanism to guard against such overflows in Tree.build than to try and use complicated machinery to try account for tree size at parse time. Attached patch does this.