From e6549ea9142ba0ecc44fffd25439616dfa56088f Mon Sep 17 00:00:00 2001 From: e-day Date: Wed, 20 Aug 2025 21:22:24 +0300 Subject: [PATCH] Fix feymat issues possible nullptr deferences Issue: #ICUIHO Description: Feymat issues possible nullptr deferences Signed-off-by: e-day Signed-off-by: nurullahahmetarikan Signed-off-by: emrullahsalik Signed-off-by: mehmetkaygusuz Signed-off-by: mustafakosif Signed-off-by: Selcuk Ildem --- ets2panda/checker/ETSAnalyzer.cpp | 2 ++ ets2panda/checker/ets/function.cpp | 2 ++ ets2panda/checker/ets/function_helpers.h | 1 + ets2panda/checker/ets/helpers.cpp | 3 +++ ets2panda/checker/ets/typeCheckingHelpers.cpp | 1 + ets2panda/checker/ets/utilityTypeHandlers.cpp | 4 +++- ets2panda/checker/types/ets/etsFunctionType.cpp | 4 +++- ets2panda/checker/types/ets/etsObjectType.cpp | 4 +++- ets2panda/checker/types/ts/tupleType.cpp | 2 +- ets2panda/compiler/core/ETSCompiler.cpp | 1 + ets2panda/compiler/lowering/ets/declareOverloadLowering.cpp | 3 +++ ets2panda/compiler/lowering/ets/genericBridgesLowering.cpp | 4 ++-- ets2panda/compiler/lowering/ets/restTupleLowering.cpp | 1 + .../lowering/ets/topLevelStmts/globalDeclTransformer.cpp | 1 + ets2panda/compiler/lowering/scopesInit/scopesInitPhase.cpp | 1 + .../debugInfoDeserialization/inheritanceResolution.cpp | 1 + ets2panda/evaluate/irCheckHelper.cpp | 2 +- ets2panda/ir/base/classProperty.cpp | 2 ++ ets2panda/ir/base/scriptFunction.cpp | 1 + ets2panda/ir/ets/etsStringLiteralType.cpp | 2 +- ets2panda/ir/ets/etsUnionType.cpp | 3 +++ ets2panda/ir/statements/switchCaseStatement.cpp | 2 +- ets2panda/ir/statements/switchStatement.cpp | 1 + ets2panda/ir/ts/tsUnionType.cpp | 1 + ets2panda/parser/ETSparserNamespaces.cpp | 2 ++ ets2panda/parser/ETSparserStatements.cpp | 2 ++ ets2panda/parser/TSparser.cpp | 1 + ets2panda/parser/statementParser.cpp | 1 + 28 files changed, 46 insertions(+), 9 deletions(-) diff --git a/ets2panda/checker/ETSAnalyzer.cpp b/ets2panda/checker/ETSAnalyzer.cpp index 716609bc6d..1956564f98 100644 --- a/ets2panda/checker/ETSAnalyzer.cpp +++ b/ets2panda/checker/ETSAnalyzer.cpp @@ -901,6 +901,7 @@ static Type *InferPreferredTypeFromElements(ETSChecker *checker, ir::ArrayExpres auto *elementType = *element->Check(checker); if (element->IsSpreadElement() && elementType->IsETSTupleType()) { for (auto *typeFromTuple : elementType->AsETSTupleType()->GetTupleTypesList()) { + ES2PANDA_ASSERT(typeFromTuple != nullptr); arrayExpressionElementTypes.emplace_back(typeFromTuple); } @@ -911,6 +912,7 @@ static Type *InferPreferredTypeFromElements(ETSChecker *checker, ir::ArrayExpres elementType = elementType->AsETSArrayType()->ElementType(); } + ES2PANDA_ASSERT(elementType != nullptr); arrayExpressionElementTypes.emplace_back(elementType); } diff --git a/ets2panda/checker/ets/function.cpp b/ets2panda/checker/ets/function.cpp index 7034998575..cc5cd275ed 100644 --- a/ets2panda/checker/ets/function.cpp +++ b/ets2panda/checker/ets/function.cpp @@ -777,6 +777,7 @@ Signature *ETSChecker::ValidateSignature( size_t const argCount = arguments.size(); auto const hasRestParameter = signature->HasRestParameter(); + ES2PANDA_ASSERT(!hasRestParameter || ( signature->RestVar() != nullptr && signature->RestVar()->TsType() != nullptr)); auto const reportError = (flags & TypeRelationFlag::NO_THROW) == 0; if (!ValidateRestParameter(this, signature, arguments, pos, flags)) { @@ -1762,6 +1763,7 @@ SignatureInfo *ETSChecker::ComposeSignatureInfo(ir::TSTypeParameterDeclaration * ArenaVector const ¶ms) { auto *const signatureInfo = CreateSignatureInfo(); + ES2PANDA_ASSERT(signatureInfo != nullptr); if (typeParams != nullptr) { auto [typeParamTypes, ok] = CreateUnconstrainedTypeParameters(typeParams); diff --git a/ets2panda/checker/ets/function_helpers.h b/ets2panda/checker/ets/function_helpers.h index 7730c65f76..d5b2820fa0 100644 --- a/ets2panda/checker/ets/function_helpers.h +++ b/ets2panda/checker/ets/function_helpers.h @@ -130,6 +130,7 @@ static std::optional BuildImplicitSubstitutionForArguments(ETSChec if (substitution.size() != sigParams.size()) { for (const auto typeParam : sigParams) { auto newTypeParam = typeParam->AsETSTypeParameter(); + ES2PANDA_ASSERT(newTypeParam != nullptr); if (auto it = substitution.find(newTypeParam); it != substitution.cend()) { continue; } diff --git a/ets2panda/checker/ets/helpers.cpp b/ets2panda/checker/ets/helpers.cpp index dd5d023d62..4e067230af 100644 --- a/ets2panda/checker/ets/helpers.cpp +++ b/ets2panda/checker/ets/helpers.cpp @@ -2492,6 +2492,7 @@ void ETSChecker::EmplaceSubstituted(Substitution *substitution, ETSTypeParameter { // *only* reference type may be substituted, no exceptions ES2PANDA_ASSERT(typeArg->IsETSReferenceType()); + ES2PANDA_ASSERT(tparam != nullptr); ES2PANDA_ASSERT(substitution != nullptr); substitution->emplace(tparam, typeArg); } @@ -2500,6 +2501,8 @@ void ETSChecker::EmplaceSubstituted(ArenaSubstitution *substitution, ETSTypePara { // *only* reference type may be substituted, no exceptions ES2PANDA_ASSERT(typeArg->IsETSReferenceType()); + ES2PANDA_ASSERT(substitution != nullptr); + ES2PANDA_ASSERT(tparam != nullptr); substitution->emplace(tparam, typeArg); } diff --git a/ets2panda/checker/ets/typeCheckingHelpers.cpp b/ets2panda/checker/ets/typeCheckingHelpers.cpp index a2894f93e9..e8799fa4d0 100644 --- a/ets2panda/checker/ets/typeCheckingHelpers.cpp +++ b/ets2panda/checker/ets/typeCheckingHelpers.cpp @@ -846,6 +846,7 @@ Type *ETSChecker::GetTypeFromTypeAliasReference(varbinder::Variable *var) } typeAliasType = CreateETSTypeAliasType(aliasTypeNode->Id()->Name(), aliasTypeNode); + ES2PANDA_ASSERT(typeAliasType != nullptr); if (aliasTypeNode->TypeParams() != nullptr) { auto [typeParamTypes, ok] = CreateUnconstrainedTypeParameters(aliasTypeNode->TypeParams()); ES2PANDA_ASSERT(typeAliasType != nullptr); diff --git a/ets2panda/checker/ets/utilityTypeHandlers.cpp b/ets2panda/checker/ets/utilityTypeHandlers.cpp index 8b9f73630b..8172313de8 100644 --- a/ets2panda/checker/ets/utilityTypeHandlers.cpp +++ b/ets2panda/checker/ets/utilityTypeHandlers.cpp @@ -680,7 +680,7 @@ ir::MethodDefinition *ETSChecker::CreateNullishAccessor(ir::MethodDefinition *co ir::MethodDefinition *nullishAccessor = accessor->Clone(ProgramAllocator(), interface->Body()); nullishAccessor->SetRange(accessor->Range()); nullishAccessor->Function()->SetRange(accessor->Function()->Range()); - + ES2PANDA_ASSERT(nullishAccessor != nullptr); auto *decl = ProgramAllocator()->New(ProgramAllocator(), nullishAccessor->Id()->Name(), nullishAccessor); auto *var = ProgramAllocator()->New(decl, varbinder::VariableFlags::VAR); @@ -691,6 +691,7 @@ ir::MethodDefinition *ETSChecker::CreateNullishAccessor(ir::MethodDefinition *co functionScope->BindName(interface->InternalName()); auto *function = nullishAccessor->Function(); + ES2PANDA_ASSERT(function != nullptr); function->SetVariable(var); // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) @@ -1156,6 +1157,7 @@ void ETSChecker::MakePropertiesReadonly(ETSObjectType *const classType) // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type *ETSChecker::HandleRequiredType(Type *typeToBeRequired) { + ES2PANDA_ASSERT(typeToBeRequired != nullptr); if (const auto found = NamedTypeStack().find(typeToBeRequired); found != NamedTypeStack().end()) { return *found; } diff --git a/ets2panda/checker/types/ets/etsFunctionType.cpp b/ets2panda/checker/types/ets/etsFunctionType.cpp index aaf6cd4468..e7f892aee5 100644 --- a/ets2panda/checker/types/ets/etsFunctionType.cpp +++ b/ets2panda/checker/types/ets/etsFunctionType.cpp @@ -304,7 +304,9 @@ Type *ETSFunctionType::Instantiate(ArenaAllocator *allocator, TypeRelation *rela auto signatures = ArenaVector(allocator->Adapter()); for (auto *const signature : callSignatures_) { - signatures.emplace_back(signature->Copy(allocator, relation, globalTypes)); + auto *copied = signature->Copy(allocator, relation, globalTypes); + ES2PANDA_ASSERT(copied != nullptr); + signatures.emplace_back(copied); } return allocator->New(checker, name_, std::move(signatures)); } diff --git a/ets2panda/checker/types/ets/etsObjectType.cpp b/ets2panda/checker/types/ets/etsObjectType.cpp index 4ca73193be..f15100cd81 100644 --- a/ets2panda/checker/types/ets/etsObjectType.cpp +++ b/ets2panda/checker/types/ets/etsObjectType.cpp @@ -1071,9 +1071,9 @@ Type *ETSObjectType::Instantiate(ArenaAllocator *const allocator, TypeRelation * relation->IncreaseTypeRecursionCount(base); auto *const copiedType = checker->CreateETSObjectType(declNode_, flags_); + ES2PANDA_ASSERT(copiedType != nullptr); ES2PANDA_ASSERT(copiedType->internalName_ == internalName_); ES2PANDA_ASSERT(copiedType->name_ == name_); - ES2PANDA_ASSERT(copiedType != nullptr); copiedType->typeFlags_ = typeFlags_; copiedType->RemoveObjectFlag(ETSObjectFlags::INCOMPLETE_INSTANTIATION | ETSObjectFlags::CHECKED_INVOKE_LEGITIMACY); copiedType->SetVariable(variable_); @@ -1090,6 +1090,7 @@ Type *ETSObjectType::Instantiate(ArenaAllocator *const allocator, TypeRelation * copiedType->SetTypeArguments(std::move(typeArgs)); copiedType->SetBaseType(this); copiedType->propertiesInstantiated_ = false; + ES2PANDA_ASSERT(relation_ != nullptr); copiedType->relation_ = relation; copiedType->effectiveSubstitution_ = nullptr; @@ -1173,6 +1174,7 @@ void ETSObjectType::SetCopiedTypeProperties(TypeRelation *const relation, ETSObj ArenaVector &&newTypeArgs, ETSObjectType *base) { ES2PANDA_ASSERT(copiedType != nullptr); + ES2PANDA_ASSERT(base != nullptr); copiedType->typeFlags_ = typeFlags_; copiedType->RemoveObjectFlag(ETSObjectFlags::INCOMPLETE_INSTANTIATION | ETSObjectFlags::CHECKED_INVOKE_LEGITIMACY); copiedType->SetVariable(variable_); diff --git a/ets2panda/checker/types/ts/tupleType.cpp b/ets2panda/checker/types/ts/tupleType.cpp index 130c533eff..71f3cce18c 100644 --- a/ets2panda/checker/types/ts/tupleType.cpp +++ b/ets2panda/checker/types/ts/tupleType.cpp @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021-2024 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/ets2panda/compiler/core/ETSCompiler.cpp b/ets2panda/compiler/core/ETSCompiler.cpp index 7f7059aeca..e359745992 100644 --- a/ets2panda/compiler/core/ETSCompiler.cpp +++ b/ets2panda/compiler/core/ETSCompiler.cpp @@ -721,6 +721,7 @@ void ETSCompiler::EmitCall(const ir::CallExpression *expr, compiler::VReg &calle void ETSCompiler::Compile(const ir::CallExpression *expr) const { ETSGen *etsg = GetETSGen(); + ES2PANDA_ASSERT(etsg != nullptr); compiler::RegScope rs(etsg); compiler::VReg calleeReg = etsg->AllocReg(); diff --git a/ets2panda/compiler/lowering/ets/declareOverloadLowering.cpp b/ets2panda/compiler/lowering/ets/declareOverloadLowering.cpp index ad3cebeced..fcc756fd81 100644 --- a/ets2panda/compiler/lowering/ets/declareOverloadLowering.cpp +++ b/ets2panda/compiler/lowering/ets/declareOverloadLowering.cpp @@ -95,14 +95,17 @@ void BuildOverloadHelperFunction(public_lib::Context *ctx, ir::MethodDefinition Rebind(ctx->phaseManager, varBinder, helperOverload); helperOverload->Function()->AddFlag((ir::ScriptFunctionFlags::OVERLOAD)); auto funcScope = helperOverload->Function()->Scope(); + ES2PANDA_ASSERT(funcScope != nullptr); funcScope->BindName(method->Function()->Scope()->Name()); helperOverload->Function()->Id()->SetVariable(helperOverload->Id()->Variable()); checker->BuildFunctionSignature(helperOverload->Function(), method->IsConstructor()); auto *const overloadType = checker->BuildMethodType(helperOverload->Function()); + ES2PANDA_ASSERT(overloadType != nullptr); helperOverload->SetTsType(overloadType); + ES2PANDA_ASSERT(method->TsType() != nullptr); ES2PANDA_ASSERT(method->TsType()->IsETSFunctionType()); method->TsType()->AsETSFunctionType()->SetHelperSignature(helperOverload->Function()->Signature()); } diff --git a/ets2panda/compiler/lowering/ets/genericBridgesLowering.cpp b/ets2panda/compiler/lowering/ets/genericBridgesLowering.cpp index 0fa3241d61..73bfbf019f 100644 --- a/ets2panda/compiler/lowering/ets/genericBridgesLowering.cpp +++ b/ets2panda/compiler/lowering/ets/genericBridgesLowering.cpp @@ -389,11 +389,11 @@ GenericBridgesPhase::Substitutions GenericBridgesPhase::GetSubstitutions( // has either explicit class type substitutions or type parameters with narrowing constraints. for (std::size_t i = 0U; i < parameterNumber; ++i) { auto *const typeParameter = typeParameters[i]->AsETSTypeParameter(); - checker::Type *const typeArgument = typeArguments[i]; + ES2PANDA_ASSERT(typeArguments[i] != nullptr); // Collect type parameters defaults/constraints in the base class // and type argument substitutions in the derived class - checker->EmplaceSubstituted(&substitutions.derivedSubstitutions, typeParameter, typeArgument); + checker->EmplaceSubstituted(&substitutions.derivedSubstitutions, typeParameter, typeArguments[i]); if (auto *const defaultType = typeParameter->GetDefaultType(); defaultType != nullptr) { checker->EmplaceSubstituted(&substitutions.baseConstraints, typeParameter, defaultType); } else { diff --git a/ets2panda/compiler/lowering/ets/restTupleLowering.cpp b/ets2panda/compiler/lowering/ets/restTupleLowering.cpp index fba4736600..645134e452 100644 --- a/ets2panda/compiler/lowering/ets/restTupleLowering.cpp +++ b/ets2panda/compiler/lowering/ets/restTupleLowering.cpp @@ -179,6 +179,7 @@ ArenaVector CreateFunctionNormalParams(public_lib::Context *ct for (auto param : funcExpr->AsFunctionExpression()->Function()->AsScriptFunction()->Params()) { if (!param->AsETSParameterExpression()->IsRestParameter()) { auto newParam = param->AsETSParameterExpression()->Clone(allocator, nullptr); + ES2PANDA_ASSERT(newParam != nullptr); params.push_back(newParam); } } diff --git a/ets2panda/compiler/lowering/ets/topLevelStmts/globalDeclTransformer.cpp b/ets2panda/compiler/lowering/ets/topLevelStmts/globalDeclTransformer.cpp index cb97aee09e..15ad8b3a96 100644 --- a/ets2panda/compiler/lowering/ets/topLevelStmts/globalDeclTransformer.cpp +++ b/ets2panda/compiler/lowering/ets/topLevelStmts/globalDeclTransformer.cpp @@ -212,6 +212,7 @@ ir::ExpressionStatement *GlobalDeclTransformer::InitTopLevelProperty(ir::ClassPr // Code will be ignored, but checker is going to deduce the type. initializer = classProperty->Value()->Clone(allocator_, classProperty)->AsExpression(); + ES2PANDA_ASSERT(initializer != nullptr); return CreateAssignmentStatement(classProperty, initializer); } diff --git a/ets2panda/compiler/lowering/scopesInit/scopesInitPhase.cpp b/ets2panda/compiler/lowering/scopesInit/scopesInitPhase.cpp index 29e91fdc6d..efd9181ee8 100644 --- a/ets2panda/compiler/lowering/scopesInit/scopesInitPhase.cpp +++ b/ets2panda/compiler/lowering/scopesInit/scopesInitPhase.cpp @@ -400,6 +400,7 @@ void ScopesInitPhase::VisitExportNamedDeclaration(ir::ExportNamedDeclaration *ex spec->Exported()->Name(), spec->Local()->Name(), spec); exportDecls.push_back(decl); } + ES2PANDA_ASSERT(VarBinder()->GetScope()->AsModuleScope() != nullptr); VarBinder()->GetScope()->AsModuleScope()->AddExportDecl(exportDecl, std::move(exportDecls)); } } diff --git a/ets2panda/evaluate/debugInfoDeserialization/inheritanceResolution.cpp b/ets2panda/evaluate/debugInfoDeserialization/inheritanceResolution.cpp index 586bbb08f0..eac52ffb91 100644 --- a/ets2panda/evaluate/debugInfoDeserialization/inheritanceResolution.cpp +++ b/ets2panda/evaluate/debugInfoDeserialization/inheritanceResolution.cpp @@ -169,6 +169,7 @@ util::StringView DebugInfoDeserializer::CollectChainInfo(ArenaVectorsourceFilePath, abcSuperName.Utf8(), cda, program); // Update information for the next iteration. + ES2PANDA_ASSERT(debugInfoStorage != nullptr); auto optClassInfo = GetSuperClassModuleAndClassName(*cda, debugInfoStorage); if (!optClassInfo) { // Go until reach Object: diff --git a/ets2panda/evaluate/irCheckHelper.cpp b/ets2panda/evaluate/irCheckHelper.cpp index 2ae79653f3..2b0cbdc582 100644 --- a/ets2panda/evaluate/irCheckHelper.cpp +++ b/ets2panda/evaluate/irCheckHelper.cpp @@ -97,7 +97,7 @@ void IrCheckHelper::HandleCustomNodes() void IrCheckHelper::CheckGlobalEntity(parser::Program *program, ir::AstNode *node, bool mustCheck) { ES2PANDA_ASSERT(program); - + ES2PANDA_ASSERT(node); auto *globalClass = program->GlobalClass(); auto *globalClassScope = program->GlobalClassScope(); diff --git a/ets2panda/ir/base/classProperty.cpp b/ets2panda/ir/base/classProperty.cpp index a292d8c689..dd5376a233 100644 --- a/ets2panda/ir/base/classProperty.cpp +++ b/ets2panda/ir/base/classProperty.cpp @@ -263,10 +263,12 @@ checker::VerifiedType ClassProperty::Check(checker::ETSChecker *checker) ClassProperty *ClassProperty::Clone(ArenaAllocator *const allocator, AstNode *const parent) { auto *const key = Key()->Clone(allocator, nullptr)->AsExpression(); + ES2PANDA_ASSERT(key != nullptr); auto *const value = Value() != nullptr ? Value()->Clone(allocator, nullptr)->AsExpression() : nullptr; auto *const typeAnnotation = TypeAnnotation() != nullptr ? TypeAnnotation()->Clone(allocator, nullptr) : nullptr; auto *const clone = allocator->New(key, value, typeAnnotation, Modifiers(), allocator, IsComputed()); + ES2PANDA_ASSERT(clone != nullptr); if (parent != nullptr) { clone->SetParent(parent); diff --git a/ets2panda/ir/base/scriptFunction.cpp b/ets2panda/ir/base/scriptFunction.cpp index 0cd1d4a6cf..a38330891d 100644 --- a/ets2panda/ir/base/scriptFunction.cpp +++ b/ets2panda/ir/base/scriptFunction.cpp @@ -220,6 +220,7 @@ ScriptFunction *ScriptFunction::Clone(ArenaAllocator *allocator, AstNode *parent clone->SetAnnotations(Annotations()); } + ES2PANDA_ASSERT(clone != nullptr); return clone; } diff --git a/ets2panda/ir/ets/etsStringLiteralType.cpp b/ets2panda/ir/ets/etsStringLiteralType.cpp index cff8978020..38cdb5192d 100644 --- a/ets2panda/ir/ets/etsStringLiteralType.cpp +++ b/ets2panda/ir/ets/etsStringLiteralType.cpp @@ -65,7 +65,7 @@ checker::Type *ETSStringLiteralType::GetType([[maybe_unused]] checker::ETSChecke ETSStringLiteralType *ETSStringLiteralType::Clone(ArenaAllocator *allocator, AstNode *parent) { auto *const clone = allocator->New(value_, allocator); - + ES2PANDA_ASSERT(clone != nullptr); if (parent != nullptr) { clone->SetParent(parent); } diff --git a/ets2panda/ir/ets/etsUnionType.cpp b/ets2panda/ir/ets/etsUnionType.cpp index 95f556c907..5f243d207b 100644 --- a/ets2panda/ir/ets/etsUnionType.cpp +++ b/ets2panda/ir/ets/etsUnionType.cpp @@ -112,9 +112,11 @@ ETSUnionType *ETSUnionType::Clone(ArenaAllocator *const allocator, AstNode *cons ArenaVector types(allocator->Adapter()); for (auto *it : Types()) { auto *type = it->Clone(allocator, nullptr); + ES2PANDA_ASSERT(type != nullptr); types.push_back(type); } ETSUnionType *const clone = allocator->New(std::move(types), allocator); + ES2PANDA_ASSERT(clone != nullptr); if (parent != nullptr) { clone->SetParent(parent); @@ -124,6 +126,7 @@ ETSUnionType *ETSUnionType::Clone(ArenaAllocator *const allocator, AstNode *cons } clone->SetRange(Range()); for (auto *it : clone->Types()) { + ES2PANDA_ASSERT(it != nullptr); it->SetParent(clone); } return clone; diff --git a/ets2panda/ir/statements/switchCaseStatement.cpp b/ets2panda/ir/statements/switchCaseStatement.cpp index 07d1b0d3af..95bacd368d 100644 --- a/ets2panda/ir/statements/switchCaseStatement.cpp +++ b/ets2panda/ir/statements/switchCaseStatement.cpp @@ -157,7 +157,7 @@ SwitchCaseStatement *SwitchCaseStatement::Clone(ArenaAllocator *const allocator, } auto clone = util::NodeAllocator::ForceSetParent(allocator, test, std::move(consequent)); - + ES2PANDA_ASSERT(clone != nullptr); clone->SetParent(parent); clone->SetRange(Range()); return clone; diff --git a/ets2panda/ir/statements/switchStatement.cpp b/ets2panda/ir/statements/switchStatement.cpp index c9bc019eaa..51486392ce 100644 --- a/ets2panda/ir/statements/switchStatement.cpp +++ b/ets2panda/ir/statements/switchStatement.cpp @@ -93,6 +93,7 @@ checker::VerifiedType SwitchStatement::Check(checker::ETSChecker *const checker) SwitchStatement *SwitchStatement::Clone(ArenaAllocator *const allocator, AstNode *const parent) { + ES2PANDA_ASSERT(discriminant_ != nullptr); auto *const discriminant = discriminant_->Clone(allocator, nullptr)->AsExpression(); ArenaVector cases(allocator->Adapter()); diff --git a/ets2panda/ir/ts/tsUnionType.cpp b/ets2panda/ir/ts/tsUnionType.cpp index 97cc33ed09..95e2084bfd 100644 --- a/ets2panda/ir/ts/tsUnionType.cpp +++ b/ets2panda/ir/ts/tsUnionType.cpp @@ -83,6 +83,7 @@ checker::Type *TSUnionType::GetType(checker::TSChecker *checker) ArenaVector types(checker->Allocator()->Adapter()); for (auto *it : types_) { + ES2PANDA_ASSERT(it != nullptr); types.push_back(it->GetType(checker)); } diff --git a/ets2panda/parser/ETSparserNamespaces.cpp b/ets2panda/parser/ETSparserNamespaces.cpp index 6909d6890f..bff629dd5b 100644 --- a/ets2panda/parser/ETSparserNamespaces.cpp +++ b/ets2panda/parser/ETSparserNamespaces.cpp @@ -70,6 +70,7 @@ ir::ETSModule *ETSParser::ParseNamespaceImp(ir::ModifierFlags flags) auto *result = AllocNode(Allocator(), ArenaVector(Allocator()->Adapter()), ExpectIdentifier(), ir::ModuleFlag::NAMESPACE, GetContext().GetLanguage(), globalProgram_); + ES2PANDA_ASSERT(result != nullptr); ir::ETSModule *parent = result; ir::ETSModule *child = nullptr; while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) { @@ -78,6 +79,7 @@ ir::ETSModule *ETSParser::ParseNamespaceImp(ir::ModifierFlags flags) child = AllocNode(Allocator(), ArenaVector(Allocator()->Adapter()), ExpectIdentifier(), ir::ModuleFlag::NAMESPACE, GetContext().GetLanguage(), globalProgram_); + ES2PANDA_ASSERT(child != nullptr); child->SetParent(parent); child->SetRange({start, Lexer()->GetToken().Start()}); child->AddModifier(ir::ModifierFlags::EXPORT); diff --git a/ets2panda/parser/ETSparserStatements.cpp b/ets2panda/parser/ETSparserStatements.cpp index 7d665ac913..bd1fc8fa8b 100644 --- a/ets2panda/parser/ETSparserStatements.cpp +++ b/ets2panda/parser/ETSparserStatements.cpp @@ -333,6 +333,7 @@ ir::Statement *ETSParser::ParseTryStatement() Lexer()->NextToken(); // eat the 'try' keyword ir::BlockStatement *body = ParseBlockStatement(); + ES2PANDA_ASSERT(body != nullptr); ArenaVector catchClauses(Allocator()->Adapter()); @@ -345,6 +346,7 @@ ir::Statement *ETSParser::ParseTryStatement() Lexer()->NextToken(); // eat 'finally' keyword finalizer = ParseBlockStatement(); + ES2PANDA_ASSERT(finalizer != nullptr); } if (catchClauses.empty() && finalizer == nullptr) { diff --git a/ets2panda/parser/TSparser.cpp b/ets2panda/parser/TSparser.cpp index 69368d4acc..cb0f84662e 100644 --- a/ets2panda/parser/TSparser.cpp +++ b/ets2panda/parser/TSparser.cpp @@ -1831,6 +1831,7 @@ ArenaVector TSParser::ParseFunctionParams() } ir::Expression *parameter = ParseFunctionParameter(); + ES2PANDA_ASSERT(parameter != nullptr); ValidateFunctionParam(params, parameter, &seenOptional); if (!decorators.empty()) { diff --git a/ets2panda/parser/statementParser.cpp b/ets2panda/parser/statementParser.cpp index 915bc7bcba..e547446fbc 100644 --- a/ets2panda/parser/statementParser.cpp +++ b/ets2panda/parser/statementParser.cpp @@ -1229,6 +1229,7 @@ void ParserImpl::ReportMultipleDefaultError() ir::SwitchCaseStatement *ParserImpl::ParseSwitchCaseStatement(bool *seenDefault) { + ES2PANDA_ASSERT(seenDefault != nullptr); auto const &token = lexer_->GetToken(); lexer::SourcePosition caseStartLoc = token.Start(); ir::Expression *testExpr = nullptr; -- Gitee