diff --git a/es2panda/compiler/core/emitter/emitter.cpp b/es2panda/compiler/core/emitter/emitter.cpp index ecec4eead8b73c44ac1e573fb0d191eb85a1ce38..31e8a224a985fb3a13ccf21d28cd8b3bfbfc8d81 100644 --- a/es2panda/compiler/core/emitter/emitter.cpp +++ b/es2panda/compiler/core/emitter/emitter.cpp @@ -208,8 +208,6 @@ void FunctionEmitter::GenInstructionDebugInfo(const IRNode *ins, panda::pandasm: constexpr size_t INVALID_LINE = -1; constexpr uint32_t INVALID_COL = -1; - ASSERT(astNode != nullptr); - if (astNode == FIRST_NODE_OF_FUNCTION) { astNode = pg_->Debuginfo().firstStmt; if (!astNode) { diff --git a/es2panda/parser/expressionParser.cpp b/es2panda/parser/expressionParser.cpp index 5f33b377dcd64e58ad1c0d5314aec70dd8f0e901..598226d6bfed3bb59f0373e5988ec0889d41b20f 100644 --- a/es2panda/parser/expressionParser.cpp +++ b/es2panda/parser/expressionParser.cpp @@ -2032,6 +2032,7 @@ ir::Expression *ParserImpl::ParsePropertyValue(const ir::PropertyKind *propertyK ir::ScriptFunction *methodDefinitonNode = ParseFunction(*methodStatus | ParserStatus::FUNCTION | ParserStatus::ALLOW_SUPER); + lexer_->NextToken(); methodDefinitonNode->AddFlag(ir::ScriptFunctionFlags::METHOD); size_t paramsSize = methodDefinitonNode->Params().size(); @@ -2330,6 +2331,7 @@ ir::FunctionExpression *ParserImpl::ParseFunctionExpression(ParserStatus newStat } ir::ScriptFunction *functionNode = ParseFunction(newStatus); + lexer_->NextToken(); functionNode->SetStart(startLoc); if (ident) { diff --git a/es2panda/parser/parserImpl.cpp b/es2panda/parser/parserImpl.cpp index 83da26513a88a2c1e1fe1654576ca23f678ce232..3344f0ba2df3d5edcd63f5e74781e153db866131 100644 --- a/es2panda/parser/parserImpl.cpp +++ b/es2panda/parser/parserImpl.cpp @@ -2006,6 +2006,7 @@ ir::MethodDefinition *ParserImpl::ParseClassMethod(ClassElmentDescriptor *desc, } ir::ScriptFunction *func = ParseFunction(desc->newStatus, isDeclare); + lexer_->NextToken(); if (func->IsOverload() && !decorators.empty()) { ThrowSyntaxError("A decorator can only decorate a method implementation, not an overload.", diff --git a/es2panda/parser/statementParser.cpp b/es2panda/parser/statementParser.cpp index 4118364e21342315143211011000c5d29fb907a5..17a9d2d75c1fc5a6ba1964dbee6cdc221bbb12bb 100644 --- a/es2panda/parser/statementParser.cpp +++ b/es2panda/parser/statementParser.cpp @@ -797,14 +797,15 @@ ir::BlockStatement *ParserImpl::ParseBlockStatement(binder::Scope *scope) blockNode->SetRange({startLoc, lexer_->GetToken().End()}); scope->BindNode(blockNode); - lexer_->NextToken(); return blockNode; } ir::BlockStatement *ParserImpl::ParseBlockStatement() { auto localCtx = binder::LexicalScope(Binder()); - return ParseBlockStatement(localCtx.GetScope()); + auto *blockNode = ParseBlockStatement(localCtx.GetScope()); + lexer_->NextToken(); + return blockNode; } ir::BreakStatement *ParserImpl::ParseBreakStatement() @@ -984,6 +985,7 @@ ir::FunctionDeclaration *ParserImpl::ParseFunctionDeclaration(bool canBeAnonymou lexer_->GetToken().Type() != lexer::TokenType::KEYW_AWAIT) { if (canBeAnonymous) { ir::ScriptFunction *func = ParseFunction(newStatus, isDeclare); + lexer_->NextToken(); func->SetStart(startLoc); func->SetAsExportDefault(); @@ -1013,6 +1015,7 @@ ir::FunctionDeclaration *ParserImpl::ParseFunctionDeclaration(bool canBeAnonymou newStatus |= ParserStatus::FUNCTION_DECLARATION; ir::ScriptFunction *func = ParseFunction(newStatus, isDeclare); + lexer_->NextToken(); func->SetIdent(identNode); func->SetStart(startLoc); @@ -1646,6 +1649,7 @@ ir::CatchClause *ParserImpl::ParseCatchClause() catchScope->AssignParamScope(catchParamScope); ir::BlockStatement *catchBlock = ParseBlockStatement(catchScope); + lexer_->NextToken(); lexer::SourcePosition endLoc = catchBlock->End(); auto *catchClause = AllocNode(catchScope, param, catchBlock);