From 9231c01f6d427841f861b52085120b615ae063b8 Mon Sep 17 00:00:00 2001 From: jackdotink Date: Tue, 4 Jun 2024 15:46:48 -0500 Subject: [PATCH] fix recursionCounter not being reset --- Ast/src/Parser.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Ast/src/Parser.cpp b/Ast/src/Parser.cpp index ee339423..ce4ffa71 100644 --- a/Ast/src/Parser.cpp +++ b/Ast/src/Parser.cpp @@ -1628,20 +1628,22 @@ AstType* Parser::parseType(bool inDeclarationContext) { Location begin = lexer.current().location; + unsigned int oldRecursionCount = recursionCounter; + // recursion counter is incremented in parseSimpleType and/or parseTypeSuffix + + AstType* type = nullptr; + Lexeme::Type c = lexer.current().type; - if (c == '|' || c == '&') + if (c != '|' && c != '&') { - return parseTypeSuffix(nullptr, begin); + type = parseSimpleType(/* allowPack= */ false, /* in declaration context */ inDeclarationContext).type; + recursionCounter = oldRecursionCount; } - unsigned int oldRecursionCount = recursionCounter; - // recursion counter is incremented in parseSimpleType - - AstType* type = parseSimpleType(/* allowPack= */ false, /* in declaration context */ inDeclarationContext).type; - + AstType* typeWithSuffix = parseTypeSuffix(type, begin); recursionCounter = oldRecursionCount; - return parseTypeSuffix(type, begin); + return typeWithSuffix; } // Type ::= nil | Name[`.' Name] [ `<' Type [`,' ...] `>' ] | `typeof' `(' expr `)' | `{' [PropList] `}'