diff --git a/ets2panda/checker/ets/aliveAnalyzer.cpp b/ets2panda/checker/ets/aliveAnalyzer.cpp index e3b69b9a5a5316259121d7733565f27098923fa2..1ea5c06c03849f0a74a73c34882acec5b7a275c9 100644 --- a/ets2panda/checker/ets/aliveAnalyzer.cpp +++ b/ets2panda/checker/ets/aliveAnalyzer.cpp @@ -375,7 +375,8 @@ void AliveAnalyzer::AnalyzeCall(const ir::CallExpression *callExpr) for (const auto *it : callExpr->Arguments()) { AnalyzeNode(it); } - if (callExpr->Signature()->ReturnType() == checker_->GetGlobalTypesHolder()->GlobalETSNeverType()) { + if (callExpr->Signature() != nullptr && + callExpr->Signature()->ReturnType() == checker_->GetGlobalTypesHolder()->GlobalETSNeverType()) { MarkDead(); } } diff --git a/ets2panda/checker/ets/function.cpp b/ets2panda/checker/ets/function.cpp index ea80a961c377bad8c0774150bebde324fc61cc1b..8ebd162350c7e5e44c5aceb4ba72cb70cf9e60aa 100644 --- a/ets2panda/checker/ets/function.cpp +++ b/ets2panda/checker/ets/function.cpp @@ -1461,7 +1461,6 @@ bool ETSChecker::CheckIdenticalOverloads(ETSFunctionType *func, ETSFunctionType { // Don't necessary to check overload for invalid functions if (func->Name().Is(ERROR_LITERAL)) { - ES2PANDA_ASSERT(IsAnyError()); return false; } @@ -1493,8 +1492,7 @@ Signature *ETSChecker::ComposeSignature(ir::ScriptFunction *func, SignatureInfo varbinder::Variable *nameVar) { auto *signature = CreateSignature(signatureInfo, returnType, func); - if (signature == nullptr) { // #23134 - ES2PANDA_ASSERT(IsAnyError()); + if (signature == nullptr) { return nullptr; } signature->SetOwner(Context().ContainingClass()); @@ -1527,7 +1525,7 @@ Type *ETSChecker::ComposeReturnType(ir::TypeNode *typeAnnotation, bool isAsync) static varbinder::LocalVariable *SetupSignatureParameter(ir::ETSParameterExpression *param, Type *type) { - auto *const variable = param->Ident()->Variable(); // #23134 + auto *const variable = param->Ident()->Variable(); if (variable == nullptr) { return nullptr; } @@ -1558,7 +1556,7 @@ static bool AppendSignatureInfoParam(ETSChecker *checker, SignatureInfo *sigInfo return checker->GlobalTypeError(); }()); - if (variable == nullptr) { // #23134 + if (variable == nullptr) { return false; } @@ -1586,16 +1584,14 @@ SignatureInfo *ETSChecker::ComposeSignatureInfo(ir::TSTypeParameterDeclaration * for (auto *const p : params) { if (!p->IsETSParameterExpression() || - !AppendSignatureInfoParam(this, signatureInfo, p->AsETSParameterExpression())) { // #23134 - ES2PANDA_ASSERT(IsAnyError()); + !AppendSignatureInfoParam(this, signatureInfo, p->AsETSParameterExpression())) { return nullptr; } } if (!params.empty()) { if (auto param = params.back()->AsETSParameterExpression(); param->IsRestParameter()) { - if (param->TypeAnnotation() == nullptr) { // #23134 - ES2PANDA_ASSERT(IsAnyError()); + if (param->TypeAnnotation() == nullptr) { return nullptr; } auto restParamType = param->RestParameter()->TypeAnnotation()->GetType(this); @@ -1657,8 +1653,7 @@ void ETSChecker::BuildFunctionSignature(ir::ScriptFunction *func, bool isConstru ? func->GetPreferredReturnType() : ComposeReturnType(func->ReturnTypeAnnotation(), func->IsAsyncFunc()); auto *signature = ComposeSignature(func, signatureInfo, returnType, nameVar); - if (signature == nullptr) { // #23134 - ES2PANDA_ASSERT(IsAnyError()); + if (signature == nullptr) { return; } diff --git a/ets2panda/checker/ets/typeCreation.cpp b/ets2panda/checker/ets/typeCreation.cpp index 1c8c6c9a98910a1e00c65c7f932c68aaca91f26f..1d90416d54d67e01bb259be7b5de094aebfead75 100644 --- a/ets2panda/checker/ets/typeCreation.cpp +++ b/ets2panda/checker/ets/typeCreation.cpp @@ -192,8 +192,7 @@ static SignatureFlags ConvertToSignatureFlags(ir::ModifierFlags inModifiers, ir: Signature *ETSChecker::CreateSignature(SignatureInfo *info, Type *returnType, ir::ScriptFunction *func) { - if (info == nullptr) { // #23134 - ES2PANDA_ASSERT(IsAnyError()); + if (info == nullptr) { return nullptr; } auto signature = ProgramAllocator()->New(info, returnType, func); @@ -206,8 +205,7 @@ Signature *ETSChecker::CreateSignature(SignatureInfo *info, Type *returnType, ir Signature *ETSChecker::CreateSignature(SignatureInfo *info, Type *returnType, ir::ScriptFunctionFlags sff, bool hasReceiver) { - if (info == nullptr) { // #23134 - ES2PANDA_ASSERT(IsAnyError()); + if (info == nullptr) { return nullptr; } auto signature = ProgramAllocator()->New(info, returnType, nullptr); diff --git a/ets2panda/compiler/lowering/ets/lambdaLowering.cpp b/ets2panda/compiler/lowering/ets/lambdaLowering.cpp index c62bcac5c1bd15b538287363c64fe95f302ff04a..0764e54677d1cea3b68cd7308eaff96980667f8d 100644 --- a/ets2panda/compiler/lowering/ets/lambdaLowering.cpp +++ b/ets2panda/compiler/lowering/ets/lambdaLowering.cpp @@ -955,6 +955,9 @@ static ir::AstNode *ConvertLambda(public_lib::Context *ctx, ir::ArrowFunctionExp auto *checker = ctx->GetChecker()->AsETSChecker(); lambda->Check(checker); + if (lambda->TsType() == nullptr || lambda->TsType()->IsTypeError()) { + return nullptr; + } ES2PANDA_ASSERT(lambda->TsType()->IsETSFunctionType()); LambdaInfo info; @@ -1149,6 +1152,9 @@ static ir::AstNode *InsertInvokeCall(public_lib::Context *ctx, ir::CallExpressio auto *oldCallee = call->Callee(); auto *oldType = checker->GetApparentType(oldCallee->TsType()); + if (oldType == nullptr || oldType->IsTypeError()) { + return nullptr; + } size_t arity = call->Arguments().size(); auto *ifaceType = oldType->IsETSObjectType() ? oldType->AsETSObjectType() diff --git a/ets2panda/ir/annotationAllowed.h b/ets2panda/ir/annotationAllowed.h index 90eea9d9542ac2c5668e163977c4f9fc06fe5b3d..d9a6cc98b6c7b9917a644796dad1a4c6eefaa0c3 100644 --- a/ets2panda/ir/annotationAllowed.h +++ b/ets2panda/ir/annotationAllowed.h @@ -56,7 +56,8 @@ public: { auto &annotations = Annotations(); for (size_t ix = 0; ix < annotations.size(); ix++) { - if (auto *transformedNode = cb(annotations[ix]); annotations[ix] != transformedNode) { + if (auto *transformedNode = cb(annotations[ix]); + annotations[ix] != transformedNode && transformedNode != nullptr) { annotations[ix]->SetTransformedNode(transformationName, transformedNode); SetValueAnnotations(transformedNode->AsAnnotationUsage(), ix); } diff --git a/ets2panda/ir/as/namedType.cpp b/ets2panda/ir/as/namedType.cpp index 48880e158992324656f677fc6c14b7cf8f6a4a10..79c6519a938bbbf9cd7be17888596f57e2c84d86 100644 --- a/ets2panda/ir/as/namedType.cpp +++ b/ets2panda/ir/as/namedType.cpp @@ -26,20 +26,20 @@ namespace ark::es2panda::ir { void NamedType::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(name_); name_ != transformedNode) { + if (auto *transformedNode = cb(name_); name_ != transformedNode && transformedNode != nullptr) { name_->SetTransformedNode(transformationName, transformedNode); name_ = transformedNode->AsIdentifier(); } if (typeParams_ != nullptr) { - if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode) { + if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode && transformedNode != nullptr) { typeParams_->SetTransformedNode(transformationName, transformedNode); typeParams_ = transformedNode->AsTSTypeParameterInstantiation(); } } if (next_ != nullptr) { - if (auto *transformedNode = cb(next_); next_ != transformedNode) { + if (auto *transformedNode = cb(next_); next_ != transformedNode && transformedNode != nullptr) { next_->SetTransformedNode(transformationName, transformedNode); next_ = transformedNode->AsNamedType(); } diff --git a/ets2panda/ir/as/prefixAssertionExpression.cpp b/ets2panda/ir/as/prefixAssertionExpression.cpp index 544713d799e9cccf830668b77f6c40f31106075c..50dbec51fde329dd757c0bac674350e1f41ea840 100644 --- a/ets2panda/ir/as/prefixAssertionExpression.cpp +++ b/ets2panda/ir/as/prefixAssertionExpression.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 @@ -25,12 +25,12 @@ namespace ark::es2panda::ir { void PrefixAssertionExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(type_); type_ != transformedNode) { + if (auto *transformedNode = cb(type_); type_ != transformedNode && transformedNode != nullptr) { type_->SetTransformedNode(transformationName, transformedNode); type_ = static_cast(transformedNode); } - if (auto *transformedNode = cb(expr_); expr_ != transformedNode) { + if (auto *transformedNode = cb(expr_); expr_ != transformedNode && transformedNode != nullptr) { expr_->SetTransformedNode(transformationName, transformedNode); expr_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/astNode.h b/ets2panda/ir/astNode.h index 431dd5a0462974f4c18e7fe4f6fbb3628001931c..35eee16d7b31b022e8513a824c1be7e08a175eb8 100644 --- a/ets2panda/ir/astNode.h +++ b/ets2panda/ir/astNode.h @@ -552,7 +552,9 @@ public: { std::function hcb = [&](AstNode *child) { AstNode *res = cb(child); - res->TransformChildren(hcb, transformationName); + if (res != nullptr) { + res->TransformChildren(hcb, transformationName); + } return res; }; TransformChildren(hcb, transformationName); @@ -573,7 +575,9 @@ public: { std::function hcb = [&](AstNode *child) { AstNode *upd = pre(child); - upd->TransformChildren(hcb, transformationName); + if (upd != nullptr) { + upd->TransformChildren(hcb, transformationName); + } post(upd); return upd; }; diff --git a/ets2panda/ir/base/catchClause.cpp b/ets2panda/ir/base/catchClause.cpp index 53b37af715be1c22af75319ea91fbecb391e2a3e..8eb136193f1c3e2c6ff269507bea11dacf7c4055 100644 --- a/ets2panda/ir/base/catchClause.cpp +++ b/ets2panda/ir/base/catchClause.cpp @@ -23,13 +23,13 @@ namespace ark::es2panda::ir { void CatchClause::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (param_ != nullptr) { - if (auto *transformedNode = cb(param_); param_ != transformedNode) { + if (auto *transformedNode = cb(param_); param_ != transformedNode && transformedNode != nullptr) { param_->SetTransformedNode(transformationName, transformedNode); param_ = transformedNode->AsExpression(); } } - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsBlockStatement(); } diff --git a/ets2panda/ir/base/classDefinition.cpp b/ets2panda/ir/base/classDefinition.cpp index 5fe57979b3febc8c29b9a88686744169729a3a5f..c6b4ea839db604a86e0a1ae0b8a615bc2fe9d52b 100644 --- a/ets2panda/ir/base/classDefinition.cpp +++ b/ets2panda/ir/base/classDefinition.cpp @@ -181,7 +181,7 @@ void ClassDefinition::TransformBase(const NodeTransformer &cb, std::string_view { auto const ident = Ident(); if (ident != nullptr) { - if (auto *transformedNode = cb(ident); ident != transformedNode) { + if (auto *transformedNode = cb(ident); ident != transformedNode && transformedNode != nullptr) { ident->SetTransformedNode(transformationName, transformedNode); SetIdent(transformedNode->AsIdentifier()); } @@ -189,7 +189,7 @@ void ClassDefinition::TransformBase(const NodeTransformer &cb, std::string_view auto const typeParam = TypeParams(); if (typeParam != nullptr) { - if (auto *transformedNode = cb(typeParam); typeParam != transformedNode) { + if (auto *transformedNode = cb(typeParam); typeParam != transformedNode && transformedNode != nullptr) { typeParam->SetTransformedNode(transformationName, transformedNode); SetTypeParams(transformedNode->AsTSTypeParameterDeclaration()); } @@ -197,7 +197,7 @@ void ClassDefinition::TransformBase(const NodeTransformer &cb, std::string_view auto const superClass = SuperClass(); if (superClass != nullptr) { - if (auto *transformedNode = cb(superClass); superClass != transformedNode) { + if (auto *transformedNode = cb(superClass); superClass != transformedNode && transformedNode != nullptr) { superClass->SetTransformedNode(transformationName, transformedNode); SetSuperClass(transformedNode->AsExpression()); } @@ -205,7 +205,8 @@ void ClassDefinition::TransformBase(const NodeTransformer &cb, std::string_view auto const superTypeParam = SuperTypeParams(); if (superTypeParam != nullptr) { - if (auto *transformedNode = cb(superTypeParam); superTypeParam != transformedNode) { + if (auto *transformedNode = cb(superTypeParam); + superTypeParam != transformedNode && transformedNode != nullptr) { superTypeParam->SetTransformedNode(transformationName, transformedNode); SetSuperTypeParams(transformedNode->AsTSTypeParameterInstantiation()); } @@ -218,7 +219,7 @@ void ClassDefinition::TransformChildren(const NodeTransformer &cb, std::string_v auto const &implement = Implements(); for (size_t ix = 0; ix < implement.size(); ix++) { - if (auto *transformedNode = cb(implement[ix]); implement[ix] != transformedNode) { + if (auto *transformedNode = cb(implement[ix]); implement[ix] != transformedNode && transformedNode != nullptr) { implement[ix]->SetTransformedNode(transformationName, transformedNode); SetValueImplements(transformedNode->AsTSClassImplements(), ix); } @@ -228,7 +229,7 @@ void ClassDefinition::TransformChildren(const NodeTransformer &cb, std::string_v auto const &ctor = Ctor(); if (ctor != nullptr) { - if (auto *transformedNode = cb(ctor); ctor != transformedNode) { + if (auto *transformedNode = cb(ctor); ctor != transformedNode && transformedNode != nullptr) { ctor->SetTransformedNode(transformationName, transformedNode); SetCtor(transformedNode->AsMethodDefinition()); } @@ -238,7 +239,7 @@ void ClassDefinition::TransformChildren(const NodeTransformer &cb, std::string_v // NOLINTNEXTLINE(modernize-loop-convert) auto const &body = Body(); for (size_t ix = 0; ix < body.size(); ix++) { - if (auto *transformedNode = cb(body[ix]); body[ix] != transformedNode) { + if (auto *transformedNode = cb(body[ix]); body[ix] != transformedNode && transformedNode != nullptr) { body[ix]->SetTransformedNode(transformationName, transformedNode); SetValueBody(transformedNode, ix); } diff --git a/ets2panda/ir/base/classProperty.cpp b/ets2panda/ir/base/classProperty.cpp index 9fb04ee7152e4bcb2738ff9d67a9544d9659118d..5ec70086cc05e5ee99f5ba035de0df19792268b9 100644 --- a/ets2panda/ir/base/classProperty.cpp +++ b/ets2panda/ir/base/classProperty.cpp @@ -37,7 +37,7 @@ void ClassProperty::TransformChildren(const NodeTransformer &cb, std::string_vie { auto *key = Key(); if (key != nullptr) { - if (auto *transformedNode = cb(key); key != transformedNode) { + if (auto *transformedNode = cb(key); key != transformedNode && transformedNode != nullptr) { key->SetTransformedNode(transformationName, transformedNode); SetKey(transformedNode->AsExpression()); } @@ -45,7 +45,7 @@ void ClassProperty::TransformChildren(const NodeTransformer &cb, std::string_vie auto *value = Value(); if (value != nullptr) { - if (auto *transformedNode = cb(value); value != transformedNode) { + if (auto *transformedNode = cb(value); value != transformedNode && transformedNode != nullptr) { value->SetTransformedNode(transformationName, transformedNode); SetValue(transformedNode->AsExpression()); } @@ -53,7 +53,8 @@ void ClassProperty::TransformChildren(const NodeTransformer &cb, std::string_vie auto *typeAnnotation = TypeAnnotation(); if (typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTypeAnnotation(static_cast(transformedNode)); } @@ -61,7 +62,8 @@ void ClassProperty::TransformChildren(const NodeTransformer &cb, std::string_vie auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } @@ -69,7 +71,8 @@ void ClassProperty::TransformChildren(const NodeTransformer &cb, std::string_vie auto const &annotations = Annotations(); for (size_t ix = 0; ix < annotations.size(); ix++) { - if (auto *transformedNode = cb(annotations[ix]); annotations[ix] != transformedNode) { + if (auto *transformedNode = cb(annotations[ix]); + annotations[ix] != transformedNode && transformedNode != nullptr) { annotations[ix]->SetTransformedNode(transformationName, transformedNode); SetValueAnnotations(transformedNode->AsAnnotationUsage(), ix); } diff --git a/ets2panda/ir/base/classStaticBlock.cpp b/ets2panda/ir/base/classStaticBlock.cpp index f8b01d54a74793c7fd1baeb48743ea551c13a731..f44c717440bde7a63493b5ee93fa024196080010 100644 --- a/ets2panda/ir/base/classStaticBlock.cpp +++ b/ets2panda/ir/base/classStaticBlock.cpp @@ -31,7 +31,7 @@ namespace ark::es2panda::ir { void ClassStaticBlock::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { auto const value = Value(); - if (auto *transformedNode = cb(value); value != transformedNode) { + if (auto *transformedNode = cb(value); value != transformedNode && transformedNode != nullptr) { value->SetTransformedNode(transformationName, transformedNode); SetValue(transformedNode->AsExpression()); } diff --git a/ets2panda/ir/base/decorator.cpp b/ets2panda/ir/base/decorator.cpp index 08bb4ffc5c219cc153df211a791e630ae058f539..9824aea6e573915e394c677e3fdf51aa3c0ac95e 100644 --- a/ets2panda/ir/base/decorator.cpp +++ b/ets2panda/ir/base/decorator.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void Decorator::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expr_); expr_ != transformedNode) { + if (auto *transformedNode = cb(expr_); expr_ != transformedNode && transformedNode != nullptr) { expr_->SetTransformedNode(transformationName, transformedNode); expr_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/base/methodDefinition.cpp b/ets2panda/ir/base/methodDefinition.cpp index 6f705a2f977eca5675b1fc2d24eecce979da647c..e0e0bac9012f4692cec44cc920e1d38fd24ed318 100644 --- a/ets2panda/ir/base/methodDefinition.cpp +++ b/ets2panda/ir/base/methodDefinition.cpp @@ -106,20 +106,20 @@ void MethodDefinition::Iterate(const NodeTraverser &cb) const void MethodDefinition::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { auto *key = Key(); - if (auto *transformedNode = cb(key); key != transformedNode) { + if (auto *transformedNode = cb(key); key != transformedNode && transformedNode != nullptr) { key->SetTransformedNode(transformationName, transformedNode); SetKey(transformedNode->AsExpression()); } auto *value = Value(); - if (auto *transformedNode = cb(value); value != transformedNode) { + if (auto *transformedNode = cb(value); value != transformedNode && transformedNode != nullptr) { value->SetTransformedNode(transformationName, transformedNode); SetValue(transformedNode->AsExpression()); } auto const &overloads = Overloads(); for (size_t ix = 0; ix < overloads.size(); ix++) { - if (auto *transformedNode = cb(overloads[ix]); overloads[ix] != transformedNode) { + if (auto *transformedNode = cb(overloads[ix]); overloads[ix] != transformedNode && transformedNode != nullptr) { overloads[ix]->SetTransformedNode(transformationName, transformedNode); SetValueOverloads(transformedNode->AsMethodDefinition(), ix); } @@ -127,7 +127,8 @@ void MethodDefinition::TransformChildren(const NodeTransformer &cb, std::string_ auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } diff --git a/ets2panda/ir/base/property.cpp b/ets2panda/ir/base/property.cpp index 24deab39d0e1c4e3e62e9051620e2a3bbd23259e..ddcbeea86ed29a0250ea2e69c7127f4297c62c76 100644 --- a/ets2panda/ir/base/property.cpp +++ b/ets2panda/ir/base/property.cpp @@ -117,12 +117,12 @@ ValidationInfo Property::ValidateExpression() void Property::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(key_); key_ != transformedNode) { + if (auto *transformedNode = cb(key_); key_ != transformedNode && transformedNode != nullptr) { key_->SetTransformedNode(transformationName, transformedNode); key_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(value_); value_ != transformedNode) { + if (auto *transformedNode = cb(value_); value_ != transformedNode && transformedNode != nullptr) { value_->SetTransformedNode(transformationName, transformedNode); value_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/base/scriptFunction.cpp b/ets2panda/ir/base/scriptFunction.cpp index 71fe36ba69d9ead1439534435835a77178d1bcfd..034ab5d1cd9da6c45bf28a3a94b4cc92bfcad836 100644 --- a/ets2panda/ir/base/scriptFunction.cpp +++ b/ets2panda/ir/base/scriptFunction.cpp @@ -209,7 +209,7 @@ void ScriptFunction::TransformChildren(const NodeTransformer &cb, std::string_vi { auto const id = Id(); if (id != nullptr) { - if (auto *transformedNode = cb(id); id != transformedNode) { + if (auto *transformedNode = cb(id); id != transformedNode && transformedNode != nullptr) { id->SetTransformedNode(transformationName, transformedNode); SetIdent(transformedNode->AsIdentifier()); } @@ -219,7 +219,7 @@ void ScriptFunction::TransformChildren(const NodeTransformer &cb, std::string_vi auto const &body = Body(); if (body != nullptr) { - if (auto *transformedNode = cb(body); body != transformedNode) { + if (auto *transformedNode = cb(body); body != transformedNode && transformedNode != nullptr) { body->SetTransformedNode(transformationName, transformedNode); SetBody(transformedNode); } diff --git a/ets2panda/ir/base/scriptFunctionSignature.cpp b/ets2panda/ir/base/scriptFunctionSignature.cpp index 85b03b1dc008e2af6b6349ea531b93fa4a66c9c2..f4c40b2539982bbf82dbbb19a4a9f67d50d8bdc3 100644 --- a/ets2panda/ir/base/scriptFunctionSignature.cpp +++ b/ets2panda/ir/base/scriptFunctionSignature.cpp @@ -37,21 +37,22 @@ void FunctionSignature::Iterate(const NodeTraverser &cb) const void FunctionSignature::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { if (typeParams_ != nullptr) { - if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode) { + if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode && transformedNode != nullptr) { typeParams_->SetTransformedNode(transformationName, transformedNode); typeParams_ = transformedNode->AsTSTypeParameterDeclaration(); } } for (auto *&it : VectorIterationGuard(params_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } } if (returnTypeAnnotation_ != nullptr) { - if (auto *transformedNode = cb(returnTypeAnnotation_); returnTypeAnnotation_ != transformedNode) { + if (auto *transformedNode = cb(returnTypeAnnotation_); + returnTypeAnnotation_ != transformedNode && transformedNode != nullptr) { returnTypeAnnotation_->SetTransformedNode(transformationName, transformedNode); returnTypeAnnotation_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/base/spreadElement.cpp b/ets2panda/ir/base/spreadElement.cpp index a8417930319850984ece9b9b5ab10864e48fab4d..9c6bf01bbe746c4463f613fbb8528fac5295e7d6 100644 --- a/ets2panda/ir/base/spreadElement.cpp +++ b/ets2panda/ir/base/spreadElement.cpp @@ -98,19 +98,20 @@ bool SpreadElement::ConvertibleToRest(bool isDeclaration, bool allowPattern) void SpreadElement::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsDecorator(); } } - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } if (auto *const typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } diff --git a/ets2panda/ir/base/tsIndexSignature.cpp b/ets2panda/ir/base/tsIndexSignature.cpp index ae7cd74478a29b55931b0379b073fa1666dc7ac5..08d8e3dbe0a8221faa6dea6ce38984d3f151b969 100644 --- a/ets2panda/ir/base/tsIndexSignature.cpp +++ b/ets2panda/ir/base/tsIndexSignature.cpp @@ -28,12 +28,12 @@ TSIndexSignature::TSIndexSignatureKind TSIndexSignature::Kind() const noexcept void TSIndexSignature::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(param_); param_ != transformedNode) { + if (auto *transformedNode = cb(param_); param_ != transformedNode && transformedNode != nullptr) { param_->SetTransformedNode(transformationName, transformedNode); param_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(typeAnnotation_); typeAnnotation_ != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation_); typeAnnotation_ != transformedNode && transformedNode != nullptr) { typeAnnotation_->SetTransformedNode(transformationName, transformedNode); typeAnnotation_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/base/tsMethodSignature.cpp b/ets2panda/ir/base/tsMethodSignature.cpp index de2b99a6a186fff17126ab382bfa9beff3108b51..0cbd1a986aca8635d3494500755de9d206264de8 100644 --- a/ets2panda/ir/base/tsMethodSignature.cpp +++ b/ets2panda/ir/base/tsMethodSignature.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 @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void TSMethodSignature::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(key_); key_ != transformedNode) { + if (auto *transformedNode = cb(key_); key_ != transformedNode && transformedNode != nullptr) { key_->SetTransformedNode(transformationName, transformedNode); key_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/base/tsPropertySignature.cpp b/ets2panda/ir/base/tsPropertySignature.cpp index 7c993c2ad75ddd29183f08902a0a91b749aaaf62..78df8b2c41cdad31608bb4feb79224d37c9fafaf 100644 --- a/ets2panda/ir/base/tsPropertySignature.cpp +++ b/ets2panda/ir/base/tsPropertySignature.cpp @@ -22,13 +22,14 @@ namespace ark::es2panda::ir { void TSPropertySignature::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(key_); key_ != transformedNode) { + if (auto *transformedNode = cb(key_); key_ != transformedNode && transformedNode != nullptr) { key_->SetTransformedNode(transformationName, transformedNode); key_ = transformedNode->AsExpression(); } if (auto *const typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } diff --git a/ets2panda/ir/ets/etsClassLiteral.cpp b/ets2panda/ir/ets/etsClassLiteral.cpp index fa65001a99ffab679c7d6060de604ad42ae13e46..9789eb63c3d81683437607972bbf8a1b56892258 100644 --- a/ets2panda/ir/ets/etsClassLiteral.cpp +++ b/ets2panda/ir/ets/etsClassLiteral.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void ETSClassLiteral::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expr_); expr_ != transformedNode) { + if (auto *transformedNode = cb(expr_); expr_ != transformedNode && transformedNode != nullptr) { expr_->SetTransformedNode(transformationName, transformedNode); expr_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ets/etsKeyofType.cpp b/ets2panda/ir/ets/etsKeyofType.cpp index d266214e5bf495de704a4e7d552ea5450dedc295..ebb0a48af07771866c6e9b50e346f0546391122a 100644 --- a/ets2panda/ir/ets/etsKeyofType.cpp +++ b/ets2panda/ir/ets/etsKeyofType.cpp @@ -20,7 +20,7 @@ namespace ark::es2panda::ir { void ETSKeyofType::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(type_); type_ != transformedNode) { + if (auto *transformedNode = cb(type_); type_ != transformedNode && transformedNode != nullptr) { type_->SetTransformedNode(transformationName, transformedNode); type_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ets/etsNewArrayInstanceExpression.cpp b/ets2panda/ir/ets/etsNewArrayInstanceExpression.cpp index db8c7b5eead7f07ae97839b97d97ead564f57d2e..29581a4b5c2b9db6d7d912b6cf4f2ce71eb741e7 100644 --- a/ets2panda/ir/ets/etsNewArrayInstanceExpression.cpp +++ b/ets2panda/ir/ets/etsNewArrayInstanceExpression.cpp @@ -25,12 +25,12 @@ namespace ark::es2panda::ir { void ETSNewArrayInstanceExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(typeReference_); typeReference_ != transformedNode) { + if (auto *transformedNode = cb(typeReference_); typeReference_ != transformedNode && transformedNode != nullptr) { typeReference_->SetTransformedNode(transformationName, transformedNode); typeReference_ = static_cast(transformedNode); } - if (auto *transformedNode = cb(dimension_); dimension_ != transformedNode) { + if (auto *transformedNode = cb(dimension_); dimension_ != transformedNode && transformedNode != nullptr) { dimension_->SetTransformedNode(transformationName, transformedNode); dimension_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ets/etsNewClassInstanceExpression.cpp b/ets2panda/ir/ets/etsNewClassInstanceExpression.cpp index 4a32953e5d01a35222dc3c926a26f7530529404b..85429c9ccbff1dd2d1764866d4c045f034a42ebe 100644 --- a/ets2panda/ir/ets/etsNewClassInstanceExpression.cpp +++ b/ets2panda/ir/ets/etsNewClassInstanceExpression.cpp @@ -22,13 +22,13 @@ namespace ark::es2panda::ir { void ETSNewClassInstanceExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(typeReference_); typeReference_ != transformedNode) { + if (auto *transformedNode = cb(typeReference_); typeReference_ != transformedNode && transformedNode != nullptr) { typeReference_->SetTransformedNode(transformationName, transformedNode); typeReference_ = transformedNode->AsExpression(); } for (auto *&arg : arguments_) { - if (auto *transformedNode = cb(arg); arg != transformedNode) { + if (auto *transformedNode = cb(arg); arg != transformedNode && transformedNode != nullptr) { arg->SetTransformedNode(transformationName, transformedNode); arg = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ets/etsNewMultiDimArrayInstanceExpression.cpp b/ets2panda/ir/ets/etsNewMultiDimArrayInstanceExpression.cpp index d5cd0530e8a068c0ca2686790ea898583e004a58..4308404156b765a0d86136ede9a801d5944369c0 100644 --- a/ets2panda/ir/ets/etsNewMultiDimArrayInstanceExpression.cpp +++ b/ets2panda/ir/ets/etsNewMultiDimArrayInstanceExpression.cpp @@ -24,13 +24,13 @@ namespace ark::es2panda::ir { void ETSNewMultiDimArrayInstanceExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(typeReference_); typeReference_ != transformedNode) { + if (auto *transformedNode = cb(typeReference_); typeReference_ != transformedNode && transformedNode != nullptr) { typeReference_->SetTransformedNode(transformationName, transformedNode); typeReference_ = static_cast(transformedNode); } for (auto *&dim : dimensions_) { - if (auto *transformedNode = cb(dim); dim != transformedNode) { + if (auto *transformedNode = cb(dim); dim != transformedNode && transformedNode != nullptr) { dim->SetTransformedNode(transformationName, transformedNode); dim = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ets/etsNonNullishTypeNode.cpp b/ets2panda/ir/ets/etsNonNullishTypeNode.cpp index 14226f3c0fb1e0cf9030546b1d811e7864319a89..be9d02552af5d81d7f54c3add9f68a73d2f5be1f 100644 --- a/ets2panda/ir/ets/etsNonNullishTypeNode.cpp +++ b/ets2panda/ir/ets/etsNonNullishTypeNode.cpp @@ -20,7 +20,7 @@ namespace ark::es2panda::ir { void ETSNonNullishTypeNode::TransformChildren([[maybe_unused]] const NodeTransformer &cb, [[maybe_unused]] std::string_view const transformationName) { - if (auto *transformedNode = cb(typeNode_); typeNode_ != transformedNode) { + if (auto *transformedNode = cb(typeNode_); typeNode_ != transformedNode && transformedNode != nullptr) { typeNode_->SetTransformedNode(transformationName, transformedNode); typeNode_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ets/etsPackageDeclaration.cpp b/ets2panda/ir/ets/etsPackageDeclaration.cpp index 277abfc2d35ba40850a7e92cfeb2d8336a804f49..f4b2a2accfea02c47ea1daffccb0c2a3dd73ed5e 100644 --- a/ets2panda/ir/ets/etsPackageDeclaration.cpp +++ b/ets2panda/ir/ets/etsPackageDeclaration.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void ETSPackageDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(name_); name_ != transformedNode) { + if (auto *transformedNode = cb(name_); name_ != transformedNode && transformedNode != nullptr) { name_->SetTransformedNode(transformationName, transformedNode); name_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ets/etsParameterExpression.cpp b/ets2panda/ir/ets/etsParameterExpression.cpp index 300573755bbaca5882dd11d55b2a13e4d9249b52..f7006c894e81e023cc740b11dfc85c2a97495f01 100644 --- a/ets2panda/ir/ets/etsParameterExpression.cpp +++ b/ets2panda/ir/ets/etsParameterExpression.cpp @@ -162,13 +162,13 @@ void ETSParameterExpression::TransformChildren(const NodeTransformer &cb, std::s auto const ident = Ident(); auto newNode = GetOrCreateHistoryNodeAs(); if (IsRestParameter()) { - if (auto *transformedNode = cb(spread); spread != transformedNode) { + if (auto *transformedNode = cb(spread); spread != transformedNode && transformedNode != nullptr) { spread->SetTransformedNode(transformationName, transformedNode); SetSpread(transformedNode->AsRestElement()); } newNode->ident_ = Spread()->Argument()->AsIdentifier(); } else { - if (auto *transformedNode = cb(ident); ident != transformedNode) { + if (auto *transformedNode = cb(ident); ident != transformedNode && transformedNode != nullptr) { ident->SetTransformedNode(transformationName, transformedNode); SetIdent(transformedNode->AsIdentifier()); } @@ -176,7 +176,7 @@ void ETSParameterExpression::TransformChildren(const NodeTransformer &cb, std::s auto const initializer = Initializer(); if (initializer != nullptr) { - if (auto *transformedNode = cb(initializer); initializer != transformedNode) { + if (auto *transformedNode = cb(initializer); initializer != transformedNode && transformedNode != nullptr) { initializer->SetTransformedNode(transformationName, transformedNode); SetInitializer(transformedNode->AsExpression()); } diff --git a/ets2panda/ir/ets/etsReExportDeclaration.cpp b/ets2panda/ir/ets/etsReExportDeclaration.cpp index 4475c8b08ca38e60ee149065501f58154901a988..97dd4af5c9385959a0b9883683c9d581649f4e0b 100644 --- a/ets2panda/ir/ets/etsReExportDeclaration.cpp +++ b/ets2panda/ir/ets/etsReExportDeclaration.cpp @@ -42,7 +42,7 @@ void ETSReExportDeclaration::TransformChildren(const NodeTransformer &cb, std::s { auto const etsImportDecl = GetETSImportDeclarations(); if (etsImportDecl != nullptr) { - if (auto *transformedNode = cb(etsImportDecl); etsImportDecl != transformedNode) { + if (auto *transformedNode = cb(etsImportDecl); etsImportDecl != transformedNode && transformedNode != nullptr) { etsImportDecl->SetTransformedNode(transformationName, transformedNode); SetETSImportDeclarations(transformedNode->AsETSImportDeclaration()); } diff --git a/ets2panda/ir/ets/etsTuple.cpp b/ets2panda/ir/ets/etsTuple.cpp index 3b143a0872be34026de52c55f93c1d4a00ac8912..a75fd4b2ccdd7dad757c3cfb5b159dcc49938e59 100644 --- a/ets2panda/ir/ets/etsTuple.cpp +++ b/ets2panda/ir/ets/etsTuple.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void ETSTuple::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&it : GetTupleTypeAnnotationsList()) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = static_cast(transformedNode); } diff --git a/ets2panda/ir/ets/etsTypeReference.cpp b/ets2panda/ir/ets/etsTypeReference.cpp index 7986198c729d4d33902ce54239119b9df91e4c72..59865bf9c5f8caac500469f20b87aec03b896c07 100644 --- a/ets2panda/ir/ets/etsTypeReference.cpp +++ b/ets2panda/ir/ets/etsTypeReference.cpp @@ -30,7 +30,7 @@ void ETSTypeReference::SetPart(ETSTypeReferencePart *part) void ETSTypeReference::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { auto const part = Part(); - if (auto *transformedNode = cb(part); part != transformedNode) { + if (auto *transformedNode = cb(part); part != transformedNode && transformedNode != nullptr) { part->SetTransformedNode(transformationName, transformedNode); SetPart(transformedNode->AsETSTypeReferencePart()); } diff --git a/ets2panda/ir/ets/etsTypeReferencePart.cpp b/ets2panda/ir/ets/etsTypeReferencePart.cpp index 9dbef072a275a2e41a81acddb471b649f2ec868a..1169fd75cb33f68a288a8a806bd8da0544d0c83e 100644 --- a/ets2panda/ir/ets/etsTypeReferencePart.cpp +++ b/ets2panda/ir/ets/etsTypeReferencePart.cpp @@ -42,7 +42,7 @@ void ETSTypeReferencePart::TransformChildren(const NodeTransformer &cb, std::str { auto const name = Name(); if (name != nullptr) { - if (auto *transformedNode = cb(name); name != transformedNode) { + if (auto *transformedNode = cb(name); name != transformedNode && transformedNode != nullptr) { name->SetTransformedNode(transformationName, transformedNode); SetName(transformedNode->AsExpression()); } @@ -50,7 +50,7 @@ void ETSTypeReferencePart::TransformChildren(const NodeTransformer &cb, std::str auto const typeParams = TypeParams(); if (typeParams != nullptr) { - if (auto *transformedNode = cb(typeParams); typeParams != transformedNode) { + if (auto *transformedNode = cb(typeParams); typeParams != transformedNode && transformedNode != nullptr) { typeParams->SetTransformedNode(transformationName, transformedNode); SetTypeParams(transformedNode->AsTSTypeParameterInstantiation()); } @@ -58,7 +58,7 @@ void ETSTypeReferencePart::TransformChildren(const NodeTransformer &cb, std::str auto const prev = Previous(); if (prev != nullptr) { - if (auto *transformedNode = cb(prev); prev != transformedNode) { + if (auto *transformedNode = cb(prev); prev != transformedNode && transformedNode != nullptr) { prev->SetTransformedNode(transformationName, transformedNode); SetPrevious(transformedNode->AsETSTypeReferencePart()); } diff --git a/ets2panda/ir/ets/etsUnionType.cpp b/ets2panda/ir/ets/etsUnionType.cpp index de035bcd614e25de7767a2deb57d10ecdda0008f..b4f3934f7e23582383e55ac4da1e52f7a76f4be8 100644 --- a/ets2panda/ir/ets/etsUnionType.cpp +++ b/ets2panda/ir/ets/etsUnionType.cpp @@ -22,7 +22,7 @@ void ETSUnionType::TransformChildren(const NodeTransformer &cb, std::string_view { auto const &types = Types(); for (size_t ix = 0; ix < types.size(); ix++) { - if (auto *transformedNode = cb(types[ix]); types[ix] != transformedNode) { + if (auto *transformedNode = cb(types[ix]); types[ix] != transformedNode && transformedNode != nullptr) { types[ix]->SetTransformedNode(transformationName, transformedNode); SetValueTypes(static_cast(transformedNode), ix); } diff --git a/ets2panda/ir/ets/etsWildcardType.cpp b/ets2panda/ir/ets/etsWildcardType.cpp index ab5ffc9e50fbb072feb58b2639252def5c8c2610..aaff31fc9874d72f68021259a5e2a70773f1acfc 100644 --- a/ets2panda/ir/ets/etsWildcardType.cpp +++ b/ets2panda/ir/ets/etsWildcardType.cpp @@ -27,7 +27,8 @@ namespace ark::es2panda::ir { void ETSWildcardType::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { if (typeReference_ != nullptr) { - if (auto *transformedNode = cb(typeReference_); typeReference_ != transformedNode) { + if (auto *transformedNode = cb(typeReference_); + typeReference_ != transformedNode && transformedNode != nullptr) { typeReference_->SetTransformedNode(transformationName, transformedNode); typeReference_ = transformedNode->AsETSTypeReference(); } diff --git a/ets2panda/ir/expressions/arrayExpression.cpp b/ets2panda/ir/expressions/arrayExpression.cpp index 418e936818e9c2e198a93441584e6ca2171db617..381571a8520e7d4b1df4fa6ca2e72efbe0b77192 100644 --- a/ets2panda/ir/expressions/arrayExpression.cpp +++ b/ets2panda/ir/expressions/arrayExpression.cpp @@ -159,21 +159,22 @@ ValidationInfo ArrayExpression::ValidateExpression() void ArrayExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsDecorator(); } } for (auto *&it : VectorIterationGuard(elements_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } } if (auto *typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } diff --git a/ets2panda/ir/expressions/arrowFunctionExpression.cpp b/ets2panda/ir/expressions/arrowFunctionExpression.cpp index 772cf69fc00187f97ae507b676a4bf3f41238c4e..d4e0b1fd513afa7033ad5a1df93512ada08bd83a 100644 --- a/ets2panda/ir/expressions/arrowFunctionExpression.cpp +++ b/ets2panda/ir/expressions/arrowFunctionExpression.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void ArrowFunctionExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(func_); func_ != transformedNode) { + if (auto *transformedNode = cb(func_); func_ != transformedNode && transformedNode != nullptr) { func_->SetTransformedNode(transformationName, transformedNode); func_ = transformedNode->AsScriptFunction(); } diff --git a/ets2panda/ir/expressions/assignmentExpression.cpp b/ets2panda/ir/expressions/assignmentExpression.cpp index d6ff928480d45c4bc8df7b2dd6c477c1795f5945..e6398892464ba43860f10fb4742bfd5f566d8710 100644 --- a/ets2panda/ir/expressions/assignmentExpression.cpp +++ b/ets2panda/ir/expressions/assignmentExpression.cpp @@ -84,12 +84,12 @@ bool AssignmentExpression::ConvertibleToAssignmentPattern(bool mustBePattern) void AssignmentExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(left_); left_ != transformedNode) { + if (auto *transformedNode = cb(left_); left_ != transformedNode && transformedNode != nullptr) { left_->SetTransformedNode(transformationName, transformedNode); left_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(right_); right_ != transformedNode) { + if (auto *transformedNode = cb(right_); right_ != transformedNode && transformedNode != nullptr) { right_->SetTransformedNode(transformationName, transformedNode); right_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/awaitExpression.cpp b/ets2panda/ir/expressions/awaitExpression.cpp index 6071bd415566f9e8464bb35b442657090727777f..c58f6a9111c5aafee02a10b1c1c584433889423e 100644 --- a/ets2panda/ir/expressions/awaitExpression.cpp +++ b/ets2panda/ir/expressions/awaitExpression.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void AwaitExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (argument_ != nullptr) { - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/binaryExpression.cpp b/ets2panda/ir/expressions/binaryExpression.cpp index 21babd5626bdef88c2f2888de6318c7058a1bfec..3ae20b372d7c5daf5c73ccf47811d92781478f06 100644 --- a/ets2panda/ir/expressions/binaryExpression.cpp +++ b/ets2panda/ir/expressions/binaryExpression.cpp @@ -22,12 +22,12 @@ namespace ark::es2panda::ir { void BinaryExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(left_); left_ != transformedNode) { + if (auto *transformedNode = cb(left_); left_ != transformedNode && transformedNode != nullptr) { left_->SetTransformedNode(transformationName, transformedNode); left_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(right_); right_ != transformedNode) { + if (auto *transformedNode = cb(right_); right_ != transformedNode && transformedNode != nullptr) { right_->SetTransformedNode(transformationName, transformedNode); right_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/blockExpression.cpp b/ets2panda/ir/expressions/blockExpression.cpp index c38cb577107be65d90d5b14663582df782b9d698..31caf86dec6de6186f28b876b74f3da27c9da094 100644 --- a/ets2panda/ir/expressions/blockExpression.cpp +++ b/ets2panda/ir/expressions/blockExpression.cpp @@ -50,7 +50,7 @@ BlockExpression *BlockExpression::Clone(ArenaAllocator *const allocator, AstNode void BlockExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&node : statements_) { - if (auto *transformedNode = cb(node); node != transformedNode) { + if (auto *transformedNode = cb(node); node != transformedNode && transformedNode != nullptr) { node->SetTransformedNode(transformationName, transformedNode); node = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/expressions/callExpression.cpp b/ets2panda/ir/expressions/callExpression.cpp index a7bfa507bb79d431683688d41d9312edb523bc4b..5b79bde50613d9131df540ebc9e20367d72942f1 100644 --- a/ets2panda/ir/expressions/callExpression.cpp +++ b/ets2panda/ir/expressions/callExpression.cpp @@ -22,27 +22,28 @@ namespace ark::es2panda::ir { void CallExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(callee_); callee_ != transformedNode) { + if (auto *transformedNode = cb(callee_); callee_ != transformedNode && transformedNode != nullptr) { callee_->SetTransformedNode(transformationName, transformedNode); callee_ = transformedNode->AsExpression(); } if (typeParams_ != nullptr) { - if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode) { + if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode && transformedNode != nullptr) { typeParams_->SetTransformedNode(transformationName, transformedNode); typeParams_ = transformedNode->AsTSTypeParameterInstantiation(); } } for (auto *&it : VectorIterationGuard(arguments_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } } if (trailingLambdaInfo_.block != nullptr) { - if (auto *transformedNode = cb(trailingLambdaInfo_.block); trailingLambdaInfo_.block != transformedNode) { + if (auto *transformedNode = cb(trailingLambdaInfo_.block); + trailingLambdaInfo_.block != transformedNode && transformedNode != nullptr) { trailingLambdaInfo_.block->SetTransformedNode(transformationName, transformedNode); trailingLambdaInfo_.block = transformedNode->AsBlockStatement(); } diff --git a/ets2panda/ir/expressions/chainExpression.cpp b/ets2panda/ir/expressions/chainExpression.cpp index d805249fd3d378d40466e0dc9446cda71542704d..980701fd83bc105573ba819db53265e29d39fd7b 100644 --- a/ets2panda/ir/expressions/chainExpression.cpp +++ b/ets2panda/ir/expressions/chainExpression.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void ChainExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expression_); expression_ != transformedNode) { + if (auto *transformedNode = cb(expression_); expression_ != transformedNode && transformedNode != nullptr) { expression_->SetTransformedNode(transformationName, transformedNode); expression_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/classExpression.cpp b/ets2panda/ir/expressions/classExpression.cpp index d5d8d83cfb6b53c8fcdd10ce892424f3279c1d36..fa4ed950667cc427e526df9dde75c30bcd180e3e 100644 --- a/ets2panda/ir/expressions/classExpression.cpp +++ b/ets2panda/ir/expressions/classExpression.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void ClassExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(def_); def_ != transformedNode) { + if (auto *transformedNode = cb(def_); def_ != transformedNode && transformedNode != nullptr) { def_->SetTransformedNode(transformationName, transformedNode); def_ = transformedNode->AsClassDefinition(); } diff --git a/ets2panda/ir/expressions/conditionalExpression.cpp b/ets2panda/ir/expressions/conditionalExpression.cpp index e0db6c2ec31acc059641e691bf94534f20e10b32..3c7f846fe747bb3f4afc7e5599ac7fe25d03fcca 100644 --- a/ets2panda/ir/expressions/conditionalExpression.cpp +++ b/ets2panda/ir/expressions/conditionalExpression.cpp @@ -22,17 +22,17 @@ namespace ark::es2panda::ir { void ConditionalExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(test_); test_ != transformedNode) { + if (auto *transformedNode = cb(test_); test_ != transformedNode && transformedNode != nullptr) { test_->SetTransformedNode(transformationName, transformedNode); test_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(consequent_); consequent_ != transformedNode) { + if (auto *transformedNode = cb(consequent_); consequent_ != transformedNode && transformedNode != nullptr) { consequent_->SetTransformedNode(transformationName, transformedNode); consequent_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(alternate_); alternate_ != transformedNode) { + if (auto *transformedNode = cb(alternate_); alternate_ != transformedNode && transformedNode != nullptr) { alternate_->SetTransformedNode(transformationName, transformedNode); alternate_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/functionExpression.cpp b/ets2panda/ir/expressions/functionExpression.cpp index 8e39aaff4b939adf8686cdbb9cde559be716d632..6ab33a2d40dd91c3fd386fbe56ea18ca25c4e584 100644 --- a/ets2panda/ir/expressions/functionExpression.cpp +++ b/ets2panda/ir/expressions/functionExpression.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void FunctionExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(func_); func_ != transformedNode) { + if (auto *transformedNode = cb(func_); func_ != transformedNode && transformedNode != nullptr) { func_->SetTransformedNode(transformationName, transformedNode); func_ = transformedNode->AsScriptFunction(); } diff --git a/ets2panda/ir/expressions/identifier.cpp b/ets2panda/ir/expressions/identifier.cpp index 7689fcca3783ffb17e830003d5b1eb4b69be1eac..6574115daac5dea1d9fc751c91dbfcde30836130 100644 --- a/ets2panda/ir/expressions/identifier.cpp +++ b/ets2panda/ir/expressions/identifier.cpp @@ -95,7 +95,8 @@ Identifier *Identifier::CloneReference(ArenaAllocator *const allocator, AstNode void Identifier::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { if (auto *typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } @@ -103,7 +104,8 @@ void Identifier::TransformChildren(const NodeTransformer &cb, std::string_view c auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } diff --git a/ets2panda/ir/expressions/importExpression.cpp b/ets2panda/ir/expressions/importExpression.cpp index 9a0c7d40fe9edb91e42a61004f826be1739fa38d..8585eda32626a51d87e1c88e72d7118b41d6805a 100644 --- a/ets2panda/ir/expressions/importExpression.cpp +++ b/ets2panda/ir/expressions/importExpression.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void ImportExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(source_); source_ != transformedNode) { + if (auto *transformedNode = cb(source_); source_ != transformedNode && transformedNode != nullptr) { source_->SetTransformedNode(transformationName, transformedNode); source_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/memberExpression.cpp b/ets2panda/ir/expressions/memberExpression.cpp index 2ea5a0d8472cd3c0e10310e1f093841c896e51ff..3ea03a21ab2cb0975f6847477037bba1054308a7 100644 --- a/ets2panda/ir/expressions/memberExpression.cpp +++ b/ets2panda/ir/expressions/memberExpression.cpp @@ -38,12 +38,12 @@ bool MemberExpression::IsPrivateReference() const noexcept void MemberExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(object_); object_ != transformedNode) { + if (auto *transformedNode = cb(object_); object_ != transformedNode && transformedNode != nullptr) { object_->SetTransformedNode(transformationName, transformedNode); object_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(property_); property_ != transformedNode) { + if (auto *transformedNode = cb(property_); property_ != transformedNode && transformedNode != nullptr) { property_->SetTransformedNode(transformationName, transformedNode); property_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/newExpression.cpp b/ets2panda/ir/expressions/newExpression.cpp index 0138a4216c9fc9b83eb011f432a0efc88df7d3b5..0cf9ee51822c8eabc78023244d0dddf2895c436f 100644 --- a/ets2panda/ir/expressions/newExpression.cpp +++ b/ets2panda/ir/expressions/newExpression.cpp @@ -45,13 +45,13 @@ NewExpression *NewExpression::Clone(ArenaAllocator *const allocator, AstNode *co void NewExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(callee_); callee_ != transformedNode) { + if (auto *transformedNode = cb(callee_); callee_ != transformedNode && transformedNode != nullptr) { callee_->SetTransformedNode(transformationName, transformedNode); callee_ = transformedNode->AsExpression(); } for (auto *&it : VectorIterationGuard(arguments_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/objectExpression.cpp b/ets2panda/ir/expressions/objectExpression.cpp index 81da3dda0865a5dc74cd27a158858a7b0dcbddfa..8912892cef3bb58d2f330f60fae2503e3861befa 100644 --- a/ets2panda/ir/expressions/objectExpression.cpp +++ b/ets2panda/ir/expressions/objectExpression.cpp @@ -176,21 +176,22 @@ void ObjectExpression::SetOptional(bool optional) void ObjectExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsDecorator(); } } for (auto *&it : VectorIterationGuard(properties_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } } if (auto *typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } diff --git a/ets2panda/ir/expressions/sequenceExpression.cpp b/ets2panda/ir/expressions/sequenceExpression.cpp index cbe9d5dbbbc48dedb4f3d5e8e2123143ad720a18..7e97275d5fbab2f5cc955db8049a7e7291b0334c 100644 --- a/ets2panda/ir/expressions/sequenceExpression.cpp +++ b/ets2panda/ir/expressions/sequenceExpression.cpp @@ -43,7 +43,7 @@ SequenceExpression *SequenceExpression::Clone(ArenaAllocator *const allocator, A void SequenceExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&it : VectorIterationGuard(sequence_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/taggedTemplateExpression.cpp b/ets2panda/ir/expressions/taggedTemplateExpression.cpp index 54eb9a71c812af5ac6db0cde68e84ff427c1b6a4..f7cc97df5e9f93d7b55f60e483164099992e60dc 100644 --- a/ets2panda/ir/expressions/taggedTemplateExpression.cpp +++ b/ets2panda/ir/expressions/taggedTemplateExpression.cpp @@ -23,18 +23,18 @@ namespace ark::es2panda::ir { void TaggedTemplateExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { if (typeParams_ != nullptr) { - if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode) { + if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode && transformedNode != nullptr) { typeParams_->SetTransformedNode(transformationName, transformedNode); typeParams_ = transformedNode->AsTSTypeParameterInstantiation(); } } - if (auto *transformedNode = cb(tag_); tag_ != transformedNode) { + if (auto *transformedNode = cb(tag_); tag_ != transformedNode && transformedNode != nullptr) { tag_->SetTransformedNode(transformationName, transformedNode); tag_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(quasi_); quasi_ != transformedNode) { + if (auto *transformedNode = cb(quasi_); quasi_ != transformedNode && transformedNode != nullptr) { quasi_->SetTransformedNode(transformationName, transformedNode); quasi_ = transformedNode->AsTemplateLiteral(); } diff --git a/ets2panda/ir/expressions/templateLiteral.cpp b/ets2panda/ir/expressions/templateLiteral.cpp index e7c10eda77d4c16e652fa6bf392c8ceaa555743d..38cefb2887cbaebdb5ef6c43de3fc162acc8a8ef 100644 --- a/ets2panda/ir/expressions/templateLiteral.cpp +++ b/ets2panda/ir/expressions/templateLiteral.cpp @@ -51,14 +51,14 @@ TemplateLiteral *TemplateLiteral::Clone(ArenaAllocator *const allocator, AstNode void TemplateLiteral::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&it : VectorIterationGuard(expressions_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } } for (auto *&it : VectorIterationGuard(quasis_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsTemplateElement(); } diff --git a/ets2panda/ir/expressions/typeofExpression.cpp b/ets2panda/ir/expressions/typeofExpression.cpp index c5d2b5e4d7c87f965a40bd143aa2bb65161f4c78..2569b9baf804cb18930e5490b15502c768a0c104 100644 --- a/ets2panda/ir/expressions/typeofExpression.cpp +++ b/ets2panda/ir/expressions/typeofExpression.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void TypeofExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/unaryExpression.cpp b/ets2panda/ir/expressions/unaryExpression.cpp index 8cdaa4bdf74ded85d488d550f97b503ddbb8722e..11f6ea16368b97053e9700a94883e0c9729b50bf 100644 --- a/ets2panda/ir/expressions/unaryExpression.cpp +++ b/ets2panda/ir/expressions/unaryExpression.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void UnaryExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/updateExpression.cpp b/ets2panda/ir/expressions/updateExpression.cpp index f594e7fc0959697c83711aa0ea628cb947304f96..12020d11b1ec562406596536532149370fc128a0 100644 --- a/ets2panda/ir/expressions/updateExpression.cpp +++ b/ets2panda/ir/expressions/updateExpression.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void UpdateExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/expressions/yieldExpression.cpp b/ets2panda/ir/expressions/yieldExpression.cpp index a64f33df86ab387efca9f3d2e13fe947d4e2c48d..ef0886faee953b1df795e8fc60642004a1a6f5ed 100644 --- a/ets2panda/ir/expressions/yieldExpression.cpp +++ b/ets2panda/ir/expressions/yieldExpression.cpp @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void YieldExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { if (argument_ != nullptr) { - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/module/exportAllDeclaration.cpp b/ets2panda/ir/module/exportAllDeclaration.cpp index b61b9dd17c3ba42ff5145da53355b414374ab52a..2dcc19c1af21d22a9bee7f636bb621d94366a648 100644 --- a/ets2panda/ir/module/exportAllDeclaration.cpp +++ b/ets2panda/ir/module/exportAllDeclaration.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 @@ -24,13 +24,13 @@ namespace ark::es2panda::ir { void ExportAllDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(source_); source_ != transformedNode) { + if (auto *transformedNode = cb(source_); source_ != transformedNode && transformedNode != nullptr) { source_->SetTransformedNode(transformationName, transformedNode); source_ = transformedNode->AsStringLiteral(); } if (exported_ != nullptr) { - if (auto *transformedNode = cb(exported_); exported_ != transformedNode) { + if (auto *transformedNode = cb(exported_); exported_ != transformedNode && transformedNode != nullptr) { exported_->SetTransformedNode(transformationName, transformedNode); exported_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/module/exportDefaultDeclaration.cpp b/ets2panda/ir/module/exportDefaultDeclaration.cpp index 5d96ad38e2c22aeedb7017a324ab44ce33b8c0fb..6f808e16966b27582e2f68654d5f237b2a172714 100644 --- a/ets2panda/ir/module/exportDefaultDeclaration.cpp +++ b/ets2panda/ir/module/exportDefaultDeclaration.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 @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void ExportDefaultDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(decl_); decl_ != transformedNode) { + if (auto *transformedNode = cb(decl_); decl_ != transformedNode && transformedNode != nullptr) { decl_->SetTransformedNode(transformationName, transformedNode); decl_ = transformedNode; } diff --git a/ets2panda/ir/module/exportNamedDeclaration.cpp b/ets2panda/ir/module/exportNamedDeclaration.cpp index 8225acdd1bc0d10f92aa9b31dccc1b40d07d2a76..39d15ddef3c68e9b48aed33015adf7f6be3daa26 100644 --- a/ets2panda/ir/module/exportNamedDeclaration.cpp +++ b/ets2panda/ir/module/exportNamedDeclaration.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 @@ -25,27 +25,27 @@ namespace ark::es2panda::ir { void ExportNamedDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsDecorator(); } } if (decl_ != nullptr) { - if (auto *transformedNode = cb(decl_); decl_ != transformedNode) { + if (auto *transformedNode = cb(decl_); decl_ != transformedNode && transformedNode != nullptr) { decl_->SetTransformedNode(transformationName, transformedNode); decl_ = transformedNode; } } else { if (source_ != nullptr) { - if (auto *transformedNode = cb(source_); source_ != transformedNode) { + if (auto *transformedNode = cb(source_); source_ != transformedNode && transformedNode != nullptr) { source_->SetTransformedNode(transformationName, transformedNode); source_ = transformedNode->AsStringLiteral(); } } for (auto *&it : VectorIterationGuard(specifiers_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExportSpecifier(); } diff --git a/ets2panda/ir/module/exportSpecifier.cpp b/ets2panda/ir/module/exportSpecifier.cpp index 1133414d19f41eb489e3847f49e98fb98041246f..6c00ca58898a2bb8043bc4d5e57aae900fba5e61 100644 --- a/ets2panda/ir/module/exportSpecifier.cpp +++ b/ets2panda/ir/module/exportSpecifier.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 @@ -24,12 +24,12 @@ namespace ark::es2panda::ir { void ExportSpecifier::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(local_); local_ != transformedNode) { + if (auto *transformedNode = cb(local_); local_ != transformedNode && transformedNode != nullptr) { local_->SetTransformedNode(transformationName, transformedNode); local_ = transformedNode->AsIdentifier(); } - if (auto *transformedNode = cb(exported_); exported_ != transformedNode) { + if (auto *transformedNode = cb(exported_); exported_ != transformedNode && transformedNode != nullptr) { exported_->SetTransformedNode(transformationName, transformedNode); exported_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/module/importDeclaration.cpp b/ets2panda/ir/module/importDeclaration.cpp index 161970f5f50147e5d86bb4768247e8a9f2df32ff..59a383ef31ce69909ccaa5154bf2df0cf05f4170 100644 --- a/ets2panda/ir/module/importDeclaration.cpp +++ b/ets2panda/ir/module/importDeclaration.cpp @@ -32,14 +32,15 @@ void ImportDeclaration::SetSource(StringLiteral *source) void ImportDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { auto const source = Source(); - if (auto *transformedNode = cb(source); source != transformedNode) { + if (auto *transformedNode = cb(source); source != transformedNode && transformedNode != nullptr) { source->SetTransformedNode(transformationName, transformedNode); SetSource(transformedNode->AsStringLiteral()); } auto const &specifiers = Specifiers(); for (size_t index = 0; index < specifiers.size(); ++index) { - if (auto *transformedNode = cb(specifiers[index]); specifiers[index] != transformedNode) { + if (auto *transformedNode = cb(specifiers[index]); + specifiers[index] != transformedNode && transformedNode != nullptr) { specifiers[index]->SetTransformedNode(transformationName, transformedNode); SetValueSpecifiers(transformedNode, index); } diff --git a/ets2panda/ir/module/importDefaultSpecifier.cpp b/ets2panda/ir/module/importDefaultSpecifier.cpp index cd2c11fd56249dc4548f194c0bf11933f8a8dc92..4cc402a2eba20e12a6692227e18743de5b0b531c 100644 --- a/ets2panda/ir/module/importDefaultSpecifier.cpp +++ b/ets2panda/ir/module/importDefaultSpecifier.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 @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void ImportDefaultSpecifier::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(local_); local_ != transformedNode) { + if (auto *transformedNode = cb(local_); local_ != transformedNode && transformedNode != nullptr) { local_->SetTransformedNode(transformationName, transformedNode); local_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/module/importNamespaceSpecifier.cpp b/ets2panda/ir/module/importNamespaceSpecifier.cpp index 5519952e54cd2a89c6aa69641e91dd9e40c6392f..401410f6d28b73e8082478ad68a96a371c39eb62 100644 --- a/ets2panda/ir/module/importNamespaceSpecifier.cpp +++ b/ets2panda/ir/module/importNamespaceSpecifier.cpp @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void ImportNamespaceSpecifier::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(local_); local_ != transformedNode) { + if (auto *transformedNode = cb(local_); local_ != transformedNode && transformedNode != nullptr) { local_->SetTransformedNode(transformationName, transformedNode); local_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/module/importSpecifier.cpp b/ets2panda/ir/module/importSpecifier.cpp index fd7908212057486147a975439f1721bc1e394c3c..afe75a164ff0840d325cfe760193400d3c94fcfa 100644 --- a/ets2panda/ir/module/importSpecifier.cpp +++ b/ets2panda/ir/module/importSpecifier.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 @@ -25,13 +25,13 @@ namespace ark::es2panda::ir { void ImportSpecifier::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (local_ != nullptr) { - if (auto *transformedNode = cb(local_); local_ != transformedNode) { + if (auto *transformedNode = cb(local_); local_ != transformedNode && transformedNode != nullptr) { local_->SetTransformedNode(transformationName, transformedNode); local_ = transformedNode->AsIdentifier(); } } - if (auto *transformedNode = cb(imported_); imported_ != transformedNode) { + if (auto *transformedNode = cb(imported_); imported_ != transformedNode && transformedNode != nullptr) { imported_->SetTransformedNode(transformationName, transformedNode); imported_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/statements/annotationDeclaration.cpp b/ets2panda/ir/statements/annotationDeclaration.cpp index f353444a467119200613d572cbd67fbcba968163..6a8af12a56b72e927eca690d6771e90cb5290149 100644 --- a/ets2panda/ir/statements/annotationDeclaration.cpp +++ b/ets2panda/ir/statements/annotationDeclaration.cpp @@ -68,7 +68,8 @@ void AnnotationDeclaration::TransformChildren(const NodeTransformer &cb, std::st { auto const &properties = Properties(); for (size_t ix = 0; ix < properties.size(); ix++) { - if (auto *transformedNode = cb(properties[ix]); properties[ix] != transformedNode) { + if (auto *transformedNode = cb(properties[ix]); + properties[ix] != transformedNode && transformedNode != nullptr) { properties[ix]->SetTransformedNode(transformationName, transformedNode); SetValueProperties(transformedNode->AsTSClassImplements(), ix); } @@ -76,7 +77,7 @@ void AnnotationDeclaration::TransformChildren(const NodeTransformer &cb, std::st auto const expr = Expr(); if (expr != nullptr) { - if (auto *transformedNode = cb(expr); expr != transformedNode) { + if (auto *transformedNode = cb(expr); expr != transformedNode && transformedNode != nullptr) { expr->SetTransformedNode(transformationName, transformedNode); SetExpr(transformedNode->AsIdentifier()); } diff --git a/ets2panda/ir/statements/annotationUsage.cpp b/ets2panda/ir/statements/annotationUsage.cpp index 3ef4f21fafbe7b09e688fbd299363bc1161b52da..a9ddd65ce418cb81942e90e5c3643536d88c5da8 100644 --- a/ets2panda/ir/statements/annotationUsage.cpp +++ b/ets2panda/ir/statements/annotationUsage.cpp @@ -21,13 +21,13 @@ namespace ark::es2panda::ir { void AnnotationUsage::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(expr_); expr_ != transformedNode) { + if (auto *transformedNode = cb(expr_); expr_ != transformedNode && transformedNode != nullptr) { expr_->SetTransformedNode(transformationName, transformedNode); expr_ = transformedNode->AsExpression(); } for (auto *&it : VectorIterationGuard(properties_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode; } diff --git a/ets2panda/ir/statements/blockStatement.cpp b/ets2panda/ir/statements/blockStatement.cpp index abbe7d12b09e925f5b0f41b78027bab834556bc6..8ddb4ea1cc74a2977a9e6a2df864c6c73be2582d 100644 --- a/ets2panda/ir/statements/blockStatement.cpp +++ b/ets2panda/ir/statements/blockStatement.cpp @@ -31,7 +31,7 @@ void BlockStatement::TransformChildren(const NodeTransformer &cb, std::string_vi auto const &constStatements = Statements(); for (size_t index = 0; index < constStatements.size(); index++) { auto statement = constStatements[index]; - if (auto *transformedNode = cb(statement); statement != transformedNode) { + if (auto *transformedNode = cb(statement); statement != transformedNode && transformedNode != nullptr) { statement->SetTransformedNode(transformationName, transformedNode); auto &statements = AstNode::GetOrCreateHistoryNodeAs()->statements_; statements[index] = transformedNode->AsStatement(); diff --git a/ets2panda/ir/statements/breakStatement.cpp b/ets2panda/ir/statements/breakStatement.cpp index 3a8b44bde410dd6fa6b878f5da8faab8e4817e8c..20ff4216cdcc76a77d1844d64573d942627ab102 100644 --- a/ets2panda/ir/statements/breakStatement.cpp +++ b/ets2panda/ir/statements/breakStatement.cpp @@ -26,7 +26,7 @@ namespace ark::es2panda::ir { void BreakStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (ident_ != nullptr) { - if (auto *transformedNode = cb(ident_); ident_ != transformedNode) { + if (auto *transformedNode = cb(ident_); ident_ != transformedNode && transformedNode != nullptr) { ident_->SetTransformedNode(transformationName, transformedNode); ident_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/statements/classDeclaration.cpp b/ets2panda/ir/statements/classDeclaration.cpp index 398e74f231c4a3fad40511c8d6f3c13d1b066703..522d4204832f928e39be3034818ced68ffa7771f 100644 --- a/ets2panda/ir/statements/classDeclaration.cpp +++ b/ets2panda/ir/statements/classDeclaration.cpp @@ -75,14 +75,15 @@ void ClassDeclaration::TransformChildren(const NodeTransformer &cb, std::string_ { auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } } auto const def = Definition(); - if (auto *transformedNode = cb(def); def != transformedNode) { + if (auto *transformedNode = cb(def); def != transformedNode && transformedNode != nullptr) { def->SetTransformedNode(transformationName, transformedNode); SetDefinition(transformedNode->AsClassDefinition()); } diff --git a/ets2panda/ir/statements/continueStatement.cpp b/ets2panda/ir/statements/continueStatement.cpp index 89bacf1b7131cfd90b9e94dd5d3598809e161ce4..90c9a05361c14db65091f77c0571d9528a33b734 100644 --- a/ets2panda/ir/statements/continueStatement.cpp +++ b/ets2panda/ir/statements/continueStatement.cpp @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void ContinueStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (ident_ != nullptr) { - if (auto *transformedNode = cb(ident_); ident_ != transformedNode) { + if (auto *transformedNode = cb(ident_); ident_ != transformedNode && transformedNode != nullptr) { ident_->SetTransformedNode(transformationName, transformedNode); ident_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/statements/doWhileStatement.cpp b/ets2panda/ir/statements/doWhileStatement.cpp index 58e70f28f5e02b7c4451ebc2e36d8f0c09376e1c..4653e3834b02bdd23537a17aefa9a529727b00dc 100644 --- a/ets2panda/ir/statements/doWhileStatement.cpp +++ b/ets2panda/ir/statements/doWhileStatement.cpp @@ -28,12 +28,12 @@ namespace ark::es2panda::ir { void DoWhileStatement::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsStatement(); } - if (auto *transformedNode = cb(test_); test_ != transformedNode) { + if (auto *transformedNode = cb(test_); test_ != transformedNode && transformedNode != nullptr) { test_->SetTransformedNode(transformationName, transformedNode); test_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/statements/expressionStatement.cpp b/ets2panda/ir/statements/expressionStatement.cpp index f4bb8535148401c14e916d3cabd6b3104086e0cb..a6ed6f61604448c14f0916cd16a064e90cd06f48 100644 --- a/ets2panda/ir/statements/expressionStatement.cpp +++ b/ets2panda/ir/statements/expressionStatement.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void ExpressionStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expression_); expression_ != transformedNode) { + if (auto *transformedNode = cb(expression_); expression_ != transformedNode && transformedNode != nullptr) { expression_->SetTransformedNode(transformationName, transformedNode); expression_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/statements/forInStatement.cpp b/ets2panda/ir/statements/forInStatement.cpp index 9436f75696f297a3a274ff248d40a1d1eaefdadc..0dbb4f59bfbceef519fc1ed3d646599a538af7b6 100644 --- a/ets2panda/ir/statements/forInStatement.cpp +++ b/ets2panda/ir/statements/forInStatement.cpp @@ -27,17 +27,17 @@ namespace ark::es2panda::ir { void ForInStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(left_); left_ != transformedNode) { + if (auto *transformedNode = cb(left_); left_ != transformedNode && transformedNode != nullptr) { left_->SetTransformedNode(transformationName, transformedNode); left_ = transformedNode; } - if (auto *transformedNode = cb(right_); right_ != transformedNode) { + if (auto *transformedNode = cb(right_); right_ != transformedNode && transformedNode != nullptr) { right_->SetTransformedNode(transformationName, transformedNode); right_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/statements/forOfStatement.cpp b/ets2panda/ir/statements/forOfStatement.cpp index 953d2822686fed5db2a26f1b66b7ea3dd97210e8..660fdf4b7bfbd9100178acbd38561ba72e21aff0 100644 --- a/ets2panda/ir/statements/forOfStatement.cpp +++ b/ets2panda/ir/statements/forOfStatement.cpp @@ -43,17 +43,17 @@ checker::Type *ForOfStatement::CreateUnionIteratorTypes(checker::ETSChecker *che void ForOfStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(left_); left_ != transformedNode) { + if (auto *transformedNode = cb(left_); left_ != transformedNode && transformedNode != nullptr) { left_->SetTransformedNode(transformationName, transformedNode); left_ = transformedNode; } - if (auto *transformedNode = cb(right_); right_ != transformedNode) { + if (auto *transformedNode = cb(right_); right_ != transformedNode && transformedNode != nullptr) { right_->SetTransformedNode(transformationName, transformedNode); right_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/statements/forUpdateStatement.cpp b/ets2panda/ir/statements/forUpdateStatement.cpp index 912dd11f40e02c16def7bf72aa490607a2a316e2..e95f7198b9b97ac665c55a0fe211e09dd73deaa5 100644 --- a/ets2panda/ir/statements/forUpdateStatement.cpp +++ b/ets2panda/ir/statements/forUpdateStatement.cpp @@ -28,27 +28,27 @@ namespace ark::es2panda::ir { void ForUpdateStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (init_ != nullptr) { - if (auto *transformedNode = cb(init_); init_ != transformedNode) { + if (auto *transformedNode = cb(init_); init_ != transformedNode && transformedNode != nullptr) { init_->SetTransformedNode(transformationName, transformedNode); init_ = transformedNode; } } if (test_ != nullptr) { - if (auto *transformedNode = cb(test_); test_ != transformedNode) { + if (auto *transformedNode = cb(test_); test_ != transformedNode && transformedNode != nullptr) { test_->SetTransformedNode(transformationName, transformedNode); test_ = transformedNode->AsExpression(); } } if (update_ != nullptr) { - if (auto *transformedNode = cb(update_); update_ != transformedNode) { + if (auto *transformedNode = cb(update_); update_ != transformedNode && transformedNode != nullptr) { update_->SetTransformedNode(transformationName, transformedNode); update_ = transformedNode->AsExpression(); } } - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/statements/functionDeclaration.cpp b/ets2panda/ir/statements/functionDeclaration.cpp index be0f1341c4236c1f037cb58711cdfb5950c63bcd..67a0d03e816003502e280f46e693051ebfc04ce2 100644 --- a/ets2panda/ir/statements/functionDeclaration.cpp +++ b/ets2panda/ir/statements/functionDeclaration.cpp @@ -33,7 +33,8 @@ void FunctionDeclaration::TransformChildren(const NodeTransformer &cb, std::stri { auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } @@ -42,7 +43,7 @@ void FunctionDeclaration::TransformChildren(const NodeTransformer &cb, std::stri TransformAnnotations(cb, transformationName); auto const func = Function(); - if (auto *transformedNode = cb(func); func != transformedNode) { + if (auto *transformedNode = cb(func); func != transformedNode && transformedNode != nullptr) { func->SetTransformedNode(transformationName, transformedNode); SetFunction(transformedNode->AsScriptFunction()); } diff --git a/ets2panda/ir/statements/ifStatement.cpp b/ets2panda/ir/statements/ifStatement.cpp index fb33121bbc7eb508de10a1d66ab3ee5a869a0941..47183b1c6d19cc876082c55b13c3657bfcb1be42 100644 --- a/ets2panda/ir/statements/ifStatement.cpp +++ b/ets2panda/ir/statements/ifStatement.cpp @@ -22,18 +22,18 @@ namespace ark::es2panda::ir { void IfStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(test_); test_ != transformedNode) { + if (auto *transformedNode = cb(test_); test_ != transformedNode && transformedNode != nullptr) { test_->SetTransformedNode(transformationName, transformedNode); test_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(consequent_); consequent_ != transformedNode) { + if (auto *transformedNode = cb(consequent_); consequent_ != transformedNode && transformedNode != nullptr) { consequent_->SetTransformedNode(transformationName, transformedNode); consequent_ = transformedNode->AsStatement(); } if (alternate_ != nullptr) { - if (auto *transformedNode = cb(alternate_); alternate_ != transformedNode) { + if (auto *transformedNode = cb(alternate_); alternate_ != transformedNode && transformedNode != nullptr) { alternate_->SetTransformedNode(transformationName, transformedNode); alternate_ = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/statements/labelledStatement.cpp b/ets2panda/ir/statements/labelledStatement.cpp index 0a4f1c2b7fe207b863aa7751fe1b0261b23a880a..fe2a24c71b177bb1649acf0daf046b9d84ee75c4 100644 --- a/ets2panda/ir/statements/labelledStatement.cpp +++ b/ets2panda/ir/statements/labelledStatement.cpp @@ -24,12 +24,12 @@ namespace ark::es2panda::ir { void LabelledStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(ident_); ident_ != transformedNode) { + if (auto *transformedNode = cb(ident_); ident_ != transformedNode && transformedNode != nullptr) { ident_->SetTransformedNode(transformationName, transformedNode); ident_ = transformedNode->AsIdentifier(); } - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/statements/returnStatement.cpp b/ets2panda/ir/statements/returnStatement.cpp index a14d55209022265152bc5a14a5507f8b11834a97..490cf9738e933956b8dd9f6cc9e7d0ab6423980b 100644 --- a/ets2panda/ir/statements/returnStatement.cpp +++ b/ets2panda/ir/statements/returnStatement.cpp @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void ReturnStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (argument_ != nullptr) { - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/statements/switchCaseStatement.cpp b/ets2panda/ir/statements/switchCaseStatement.cpp index 77df9b94db3efa316d97a2390f82ff3d7a0257ea..4bad674364518dad6dfc4fec64cf4773bede469c 100644 --- a/ets2panda/ir/statements/switchCaseStatement.cpp +++ b/ets2panda/ir/statements/switchCaseStatement.cpp @@ -26,14 +26,14 @@ namespace ark::es2panda::ir { void SwitchCaseStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (test_ != nullptr) { - if (auto *transformedNode = cb(test_); test_ != transformedNode) { + if (auto *transformedNode = cb(test_); test_ != transformedNode && transformedNode != nullptr) { test_->SetTransformedNode(transformationName, transformedNode); test_ = transformedNode->AsExpression(); } } for (auto *&it : VectorIterationGuard(consequent_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/statements/switchStatement.cpp b/ets2panda/ir/statements/switchStatement.cpp index c9bc019eaa8c7d9dbc23c9bbe73a1b066254c22e..cfb31d79efda0020a9bef9b4832bbdd0b5ef2c2b 100644 --- a/ets2panda/ir/statements/switchStatement.cpp +++ b/ets2panda/ir/statements/switchStatement.cpp @@ -24,13 +24,13 @@ namespace ark::es2panda::ir { void SwitchStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(discriminant_); discriminant_ != transformedNode) { + if (auto *transformedNode = cb(discriminant_); discriminant_ != transformedNode && transformedNode != nullptr) { discriminant_->SetTransformedNode(transformationName, transformedNode); discriminant_ = transformedNode->AsExpression(); } for (auto *&it : VectorIterationGuard(cases_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsSwitchCaseStatement(); } diff --git a/ets2panda/ir/statements/throwStatement.cpp b/ets2panda/ir/statements/throwStatement.cpp index 83b2159df5ea7f23e5d1c6d8907a673907f68496..a468e3c6ef6ab4dbf94865e1894712f17982e512 100644 --- a/ets2panda/ir/statements/throwStatement.cpp +++ b/ets2panda/ir/statements/throwStatement.cpp @@ -22,7 +22,7 @@ namespace ark::es2panda::ir { void ThrowStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { + if (auto *transformedNode = cb(argument_); argument_ != transformedNode && transformedNode != nullptr) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/statements/tryStatement.cpp b/ets2panda/ir/statements/tryStatement.cpp index 7281fa5e603bdbc09c286237cb291cb658f78f4e..a7dec812bdd8655e39cb858e13ad2a2e20d48bf4 100644 --- a/ets2panda/ir/statements/tryStatement.cpp +++ b/ets2panda/ir/statements/tryStatement.cpp @@ -28,20 +28,20 @@ namespace ark::es2panda::ir { void TryStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(block_); block_ != transformedNode) { + if (auto *transformedNode = cb(block_); block_ != transformedNode && transformedNode != nullptr) { block_->SetTransformedNode(transformationName, transformedNode); block_ = transformedNode->AsBlockStatement(); } for (auto *&it : VectorIterationGuard(catchClauses_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsCatchClause(); } } if (finalizer_ != nullptr) { - if (auto *transformedNode = cb(finalizer_); finalizer_ != transformedNode) { + if (auto *transformedNode = cb(finalizer_); finalizer_ != transformedNode && transformedNode != nullptr) { finalizer_->SetTransformedNode(transformationName, transformedNode); finalizer_ = transformedNode->AsBlockStatement(); } diff --git a/ets2panda/ir/statements/variableDeclaration.cpp b/ets2panda/ir/statements/variableDeclaration.cpp index adbe853c541c2bd7ec89bbdbb15de828f6b06f90..2dc07787fb32dc28bf2a430000eda05883128c06 100644 --- a/ets2panda/ir/statements/variableDeclaration.cpp +++ b/ets2panda/ir/statements/variableDeclaration.cpp @@ -91,7 +91,8 @@ void VariableDeclaration::TransformChildren(const NodeTransformer &cb, std::stri { auto const &decorators = Decorators(); for (size_t index = 0; index < decorators.size(); ++index) { - if (auto *transformedNode = cb(decorators[index]); decorators[index] != transformedNode) { + if (auto *transformedNode = cb(decorators[index]); + decorators[index] != transformedNode && transformedNode != nullptr) { decorators[index]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), index); } @@ -99,7 +100,8 @@ void VariableDeclaration::TransformChildren(const NodeTransformer &cb, std::stri auto const &annotations = Annotations(); for (size_t index = 0; index < annotations.size(); ++index) { - if (auto *transformedNode = cb(annotations[index]); annotations[index] != transformedNode) { + if (auto *transformedNode = cb(annotations[index]); + annotations[index] != transformedNode && transformedNode != nullptr) { annotations[index]->SetTransformedNode(transformationName, transformedNode); SetValueAnnotations(transformedNode->AsAnnotationUsage(), index); } @@ -107,7 +109,8 @@ void VariableDeclaration::TransformChildren(const NodeTransformer &cb, std::stri auto const &declarators = Declarators(); for (size_t index = 0; index < declarators.size(); ++index) { - if (auto *transformedNode = cb(declarators[index]); declarators[index] != transformedNode) { + if (auto *transformedNode = cb(declarators[index]); + declarators[index] != transformedNode && transformedNode != nullptr) { declarators[index]->SetTransformedNode(transformationName, transformedNode); SetValueDeclarators(transformedNode->AsVariableDeclarator(), index); } diff --git a/ets2panda/ir/statements/variableDeclarator.cpp b/ets2panda/ir/statements/variableDeclarator.cpp index 78ee2fd4f8d96bd15b1e87376e49fd117c0a500f..4b165318e8c9928853b773424c241c3e1b1d9ac9 100644 --- a/ets2panda/ir/statements/variableDeclarator.cpp +++ b/ets2panda/ir/statements/variableDeclarator.cpp @@ -23,13 +23,13 @@ namespace ark::es2panda::ir { void VariableDeclarator::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(id_); id_ != transformedNode) { + if (auto *transformedNode = cb(id_); id_ != transformedNode && transformedNode != nullptr) { id_->SetTransformedNode(transformationName, transformedNode); id_ = transformedNode->AsExpression(); } if (init_ != nullptr) { - if (auto *transformedNode = cb(init_); init_ != transformedNode) { + if (auto *transformedNode = cb(init_); init_ != transformedNode && transformedNode != nullptr) { init_->SetTransformedNode(transformationName, transformedNode); init_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/statements/whileStatement.cpp b/ets2panda/ir/statements/whileStatement.cpp index 5bdc886393ced88805b5fd6d7e863bba745f40a8..fd1cce4ad9d746e88eda9ee3fd502fb249ba5519 100644 --- a/ets2panda/ir/statements/whileStatement.cpp +++ b/ets2panda/ir/statements/whileStatement.cpp @@ -28,12 +28,12 @@ namespace ark::es2panda::ir { void WhileStatement::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(test_); test_ != transformedNode) { + if (auto *transformedNode = cb(test_); test_ != transformedNode && transformedNode != nullptr) { test_->SetTransformedNode(transformationName, transformedNode); test_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/ts/tsArrayType.cpp b/ets2panda/ir/ts/tsArrayType.cpp index 8ab2361fb9039274516edac8ef14f3d914e4b5f2..ff9541c69ca101bbce017e1a525223228748a1b5 100644 --- a/ets2panda/ir/ts/tsArrayType.cpp +++ b/ets2panda/ir/ts/tsArrayType.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void TSArrayType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(elementType_); elementType_ != transformedNode) { + if (auto *transformedNode = cb(elementType_); elementType_ != transformedNode && transformedNode != nullptr) { elementType_->SetTransformedNode(transformationName, transformedNode); elementType_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsAsExpression.cpp b/ets2panda/ir/ts/tsAsExpression.cpp index 8452359ba29487af524341dcf22e966550a4d907..cca306107c57d91be437d0718f72eca18f9e80a9 100644 --- a/ets2panda/ir/ts/tsAsExpression.cpp +++ b/ets2panda/ir/ts/tsAsExpression.cpp @@ -37,13 +37,14 @@ void TSAsExpression::SetExpr(Expression *expr) noexcept void TSAsExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expression_); expression_ != transformedNode) { + if (auto *transformedNode = cb(expression_); expression_ != transformedNode && transformedNode != nullptr) { expression_->SetTransformedNode(transformationName, transformedNode); expression_ = transformedNode->AsExpression(); } if (auto *typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } diff --git a/ets2panda/ir/ts/tsClassImplements.cpp b/ets2panda/ir/ts/tsClassImplements.cpp index dfe2da11dfcbe9f307f31a704ca4c1adc08c5277..1832b3ac7623709c42473820fee8a4eea2cb1df8 100644 --- a/ets2panda/ir/ts/tsClassImplements.cpp +++ b/ets2panda/ir/ts/tsClassImplements.cpp @@ -26,7 +26,7 @@ namespace ark::es2panda::ir { void TSClassImplements::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expression_); expression_ != transformedNode) { + if (auto *transformedNode = cb(expression_); expression_ != transformedNode && transformedNode != nullptr) { expression_->SetTransformedNode(transformationName, transformedNode); expression_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsConditionalType.cpp b/ets2panda/ir/ts/tsConditionalType.cpp index 6a166ea3f06d02257c0994ce89bcfb8fba60fed6..208d2da59e97bf4229a0cc58e40056364660a063 100644 --- a/ets2panda/ir/ts/tsConditionalType.cpp +++ b/ets2panda/ir/ts/tsConditionalType.cpp @@ -24,22 +24,22 @@ namespace ark::es2panda::ir { void TSConditionalType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(checkType_); checkType_ != transformedNode) { + if (auto *transformedNode = cb(checkType_); checkType_ != transformedNode && transformedNode != nullptr) { checkType_->SetTransformedNode(transformationName, transformedNode); checkType_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(extendsType_); extendsType_ != transformedNode) { + if (auto *transformedNode = cb(extendsType_); extendsType_ != transformedNode && transformedNode != nullptr) { extendsType_->SetTransformedNode(transformationName, transformedNode); extendsType_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(trueType_); trueType_ != transformedNode) { + if (auto *transformedNode = cb(trueType_); trueType_ != transformedNode && transformedNode != nullptr) { trueType_->SetTransformedNode(transformationName, transformedNode); trueType_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(falseType_); falseType_ != transformedNode) { + if (auto *transformedNode = cb(falseType_); falseType_ != transformedNode && transformedNode != nullptr) { falseType_->SetTransformedNode(transformationName, transformedNode); falseType_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsEnumDeclaration.cpp b/ets2panda/ir/ts/tsEnumDeclaration.cpp index c3d9c28f0209d0d046394dcbf88c44e6614bb9fb..92f0a8089f5bb928e1d2bbba3e53ac36a676eaa1 100644 --- a/ets2panda/ir/ts/tsEnumDeclaration.cpp +++ b/ets2panda/ir/ts/tsEnumDeclaration.cpp @@ -45,21 +45,22 @@ void TSEnumDeclaration::TransformChildren(const NodeTransformer &cb, std::string { auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } } auto const key = Key(); - if (auto *transformedNode = cb(key); key != transformedNode) { + if (auto *transformedNode = cb(key); key != transformedNode && transformedNode != nullptr) { key->SetTransformedNode(transformationName, transformedNode); SetKey(transformedNode->AsIdentifier()); } auto const &members = Members(); for (size_t ix = 0; ix < members.size(); ix++) { - if (auto *transformedNode = cb(members[ix]); members[ix] != transformedNode) { + if (auto *transformedNode = cb(members[ix]); members[ix] != transformedNode && transformedNode != nullptr) { members[ix]->SetTransformedNode(transformationName, transformedNode); SetValueMembers(transformedNode->AsDecorator(), ix); } diff --git a/ets2panda/ir/ts/tsEnumMember.cpp b/ets2panda/ir/ts/tsEnumMember.cpp index f4f126095afdeed1b303c2dfceb7b419125489c3..bb2d9f031ea0e2b13f61d039a86a9c7bcce6e746 100644 --- a/ets2panda/ir/ts/tsEnumMember.cpp +++ b/ets2panda/ir/ts/tsEnumMember.cpp @@ -24,13 +24,13 @@ namespace ark::es2panda::ir { void TSEnumMember::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(key_); key_ != transformedNode) { + if (auto *transformedNode = cb(key_); key_ != transformedNode && transformedNode != nullptr) { key_->SetTransformedNode(transformationName, transformedNode); key_ = transformedNode->AsExpression(); } if (init_ != nullptr) { - if (auto *transformedNode = cb(init_); init_ != transformedNode) { + if (auto *transformedNode = cb(init_); init_ != transformedNode && transformedNode != nullptr) { init_->SetTransformedNode(transformationName, transformedNode); init_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsExternalModuleReference.cpp b/ets2panda/ir/ts/tsExternalModuleReference.cpp index 12207c3d4f1c83ee5d547b41505baaa37d5e4100..2838ad69ace3ec4cb046cf978aefa80a26058cba 100644 --- a/ets2panda/ir/ts/tsExternalModuleReference.cpp +++ b/ets2panda/ir/ts/tsExternalModuleReference.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 @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void TSExternalModuleReference::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expr_); expr_ != transformedNode) { + if (auto *transformedNode = cb(expr_); expr_ != transformedNode && transformedNode != nullptr) { expr_->SetTransformedNode(transformationName, transformedNode); expr_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsImportEqualsDeclaration.cpp b/ets2panda/ir/ts/tsImportEqualsDeclaration.cpp index efaa3883806d54e1b86ff8aa8bf051597ef6a363..4bcb8cb6037eab4847b3927587d83b8580451193 100644 --- a/ets2panda/ir/ts/tsImportEqualsDeclaration.cpp +++ b/ets2panda/ir/ts/tsImportEqualsDeclaration.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 @@ -26,12 +26,13 @@ namespace ark::es2panda::ir { void TSImportEqualsDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(id_); id_ != transformedNode) { + if (auto *transformedNode = cb(id_); id_ != transformedNode && transformedNode != nullptr) { id_->SetTransformedNode(transformationName, transformedNode); id_ = transformedNode->AsIdentifier(); } - if (auto *transformedNode = cb(moduleReference_); moduleReference_ != transformedNode) { + if (auto *transformedNode = cb(moduleReference_); + moduleReference_ != transformedNode && transformedNode != nullptr) { moduleReference_->SetTransformedNode(transformationName, transformedNode); moduleReference_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsImportType.cpp b/ets2panda/ir/ts/tsImportType.cpp index a0f981b892b10daf920ba9c037d28d4acb2c6f8e..d6a9d7c6a563f54621cd1ee3c9235ec1c4df2ee6 100644 --- a/ets2panda/ir/ts/tsImportType.cpp +++ b/ets2panda/ir/ts/tsImportType.cpp @@ -26,20 +26,20 @@ namespace ark::es2panda::ir { void TSImportType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(param_); param_ != transformedNode) { + if (auto *transformedNode = cb(param_); param_ != transformedNode && transformedNode != nullptr) { param_->SetTransformedNode(transformationName, transformedNode); param_ = transformedNode->AsExpression(); } if (typeParams_ != nullptr) { - if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode) { + if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode && transformedNode != nullptr) { typeParams_->SetTransformedNode(transformationName, transformedNode); typeParams_ = transformedNode->AsTSTypeParameterInstantiation(); } } if (qualifier_ != nullptr) { - if (auto *transformedNode = cb(qualifier_); qualifier_ != transformedNode) { + if (auto *transformedNode = cb(qualifier_); qualifier_ != transformedNode && transformedNode != nullptr) { qualifier_->SetTransformedNode(transformationName, transformedNode); qualifier_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsIndexedAccessType.cpp b/ets2panda/ir/ts/tsIndexedAccessType.cpp index e1e110231a601b905106b838db5c8fa0c83df80d..f1f00b7942c3014fe6e6d512d61b159ac2950f00 100644 --- a/ets2panda/ir/ts/tsIndexedAccessType.cpp +++ b/ets2panda/ir/ts/tsIndexedAccessType.cpp @@ -25,12 +25,12 @@ namespace ark::es2panda::ir { void TSIndexedAccessType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(objectType_); objectType_ != transformedNode) { + if (auto *transformedNode = cb(objectType_); objectType_ != transformedNode && transformedNode != nullptr) { objectType_->SetTransformedNode(transformationName, transformedNode); objectType_ = static_cast(transformedNode); } - if (auto *transformedNode = cb(indexType_); indexType_ != transformedNode) { + if (auto *transformedNode = cb(indexType_); indexType_ != transformedNode && transformedNode != nullptr) { indexType_->SetTransformedNode(transformationName, transformedNode); indexType_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsInferType.cpp b/ets2panda/ir/ts/tsInferType.cpp index dd9d1746dcbcf30eef9bd39581a407ecd6e3bd70..12e6b7d049acf4a360e579398ca2a3961061bab9 100644 --- a/ets2panda/ir/ts/tsInferType.cpp +++ b/ets2panda/ir/ts/tsInferType.cpp @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void TSInferType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(typeParam_); typeParam_ != transformedNode) { + if (auto *transformedNode = cb(typeParam_); typeParam_ != transformedNode && transformedNode != nullptr) { typeParam_->SetTransformedNode(transformationName, transformedNode); typeParam_ = transformedNode->AsTSTypeParameter(); } diff --git a/ets2panda/ir/ts/tsInterfaceBody.cpp b/ets2panda/ir/ts/tsInterfaceBody.cpp index 94c56deddb610c93475c945c57739196999bba2b..26650f2cdba8e1333dd7458dd80645700871690b 100644 --- a/ets2panda/ir/ts/tsInterfaceBody.cpp +++ b/ets2panda/ir/ts/tsInterfaceBody.cpp @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void TSInterfaceBody::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(body_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode; } diff --git a/ets2panda/ir/ts/tsInterfaceDeclaration.cpp b/ets2panda/ir/ts/tsInterfaceDeclaration.cpp index 4455a8b7764190e5cef66af761cd7fd5d742f193..c1002c43e43fb86a7f1ec338472cfad1d72ec7ab 100644 --- a/ets2panda/ir/ts/tsInterfaceDeclaration.cpp +++ b/ets2panda/ir/ts/tsInterfaceDeclaration.cpp @@ -127,7 +127,8 @@ void TSInterfaceDeclaration::TransformChildren(const NodeTransformer &cb, std::s { auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } @@ -136,14 +137,14 @@ void TSInterfaceDeclaration::TransformChildren(const NodeTransformer &cb, std::s TransformAnnotations(cb, transformationName); auto const id = Id(); - if (auto *transformedNode = cb(id); id != transformedNode) { + if (auto *transformedNode = cb(id); id != transformedNode && transformedNode != nullptr) { id->SetTransformedNode(transformationName, transformedNode); SetId(transformedNode->AsIdentifier()); } auto const typeParams = TypeParams(); if (typeParams != nullptr) { - if (auto *transformedNode = cb(typeParams); typeParams != transformedNode) { + if (auto *transformedNode = cb(typeParams); typeParams != transformedNode && transformedNode != nullptr) { typeParams->SetTransformedNode(transformationName, transformedNode); SetTypeParams(transformedNode->AsTSTypeParameterDeclaration()); } @@ -151,14 +152,14 @@ void TSInterfaceDeclaration::TransformChildren(const NodeTransformer &cb, std::s auto const &extends = Extends(); for (size_t ix = 0; ix < extends.size(); ix++) { - if (auto *transformedNode = cb(extends[ix]); extends[ix] != transformedNode) { + if (auto *transformedNode = cb(extends[ix]); extends[ix] != transformedNode && transformedNode != nullptr) { extends[ix]->SetTransformedNode(transformationName, transformedNode); SetValueExtends(transformedNode->AsTSInterfaceHeritage(), ix); } } auto const &body = Body(); - if (auto *transformedNode = cb(body); body != transformedNode) { + if (auto *transformedNode = cb(body); body != transformedNode && transformedNode != nullptr) { body->SetTransformedNode(transformationName, transformedNode); SetBody(transformedNode->AsTSInterfaceBody()); } diff --git a/ets2panda/ir/ts/tsInterfaceHeritage.cpp b/ets2panda/ir/ts/tsInterfaceHeritage.cpp index c87aff667f9ba184f0436224eaa38ecae4d0a08a..fc987e3f4521dfefca9e04bd3ea782c81b173fde 100644 --- a/ets2panda/ir/ts/tsInterfaceHeritage.cpp +++ b/ets2panda/ir/ts/tsInterfaceHeritage.cpp @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void TSInterfaceHeritage::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expr_); expr_ != transformedNode) { + if (auto *transformedNode = cb(expr_); expr_ != transformedNode && transformedNode != nullptr) { expr_->SetTransformedNode(transformationName, transformedNode); expr_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsIntersectionType.cpp b/ets2panda/ir/ts/tsIntersectionType.cpp index 6dc630a18a4c57e98d0250cdf88bddca4abed7b9..f78378a5aeb2bc676edca42214fd1a79e90cf6a6 100644 --- a/ets2panda/ir/ts/tsIntersectionType.cpp +++ b/ets2panda/ir/ts/tsIntersectionType.cpp @@ -26,7 +26,7 @@ namespace ark::es2panda::ir { void TSIntersectionType::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&it : VectorIterationGuard(types_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsLiteralType.cpp b/ets2panda/ir/ts/tsLiteralType.cpp index a679912bf4dbec77ce97320c56050f0a5e95b96b..781f8c888889259de6e49513d0f4272058d984e3 100644 --- a/ets2panda/ir/ts/tsLiteralType.cpp +++ b/ets2panda/ir/ts/tsLiteralType.cpp @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void TSLiteralType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(literal_); literal_ != transformedNode) { + if (auto *transformedNode = cb(literal_); literal_ != transformedNode && transformedNode != nullptr) { literal_->SetTransformedNode(transformationName, transformedNode); literal_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsMappedType.cpp b/ets2panda/ir/ts/tsMappedType.cpp index 61da853b75b4d81a1f1d2f1f6cb77ddda83e1e78..1e80223857f77976c25bf2e589056b04bb3c071c 100644 --- a/ets2panda/ir/ts/tsMappedType.cpp +++ b/ets2panda/ir/ts/tsMappedType.cpp @@ -26,13 +26,14 @@ namespace ark::es2panda::ir { void TSMappedType::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(typeParameter_); typeParameter_ != transformedNode) { + if (auto *transformedNode = cb(typeParameter_); typeParameter_ != transformedNode && transformedNode != nullptr) { typeParameter_->SetTransformedNode(transformationName, transformedNode); typeParameter_ = transformedNode->AsTSTypeParameter(); } if (typeAnnotation_ != nullptr) { - if (auto *transformedNode = cb(typeAnnotation_); typeAnnotation_ != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation_); + typeAnnotation_ != transformedNode && transformedNode != nullptr) { typeAnnotation_->SetTransformedNode(transformationName, transformedNode); typeAnnotation_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsModuleBlock.cpp b/ets2panda/ir/ts/tsModuleBlock.cpp index db77f5dee40dcd1a0f1810561f10faa36c5f6a97..742318f8b0c0b782cb1258d8372057d76db51003 100644 --- a/ets2panda/ir/ts/tsModuleBlock.cpp +++ b/ets2panda/ir/ts/tsModuleBlock.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 @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void TSModuleBlock::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(statements_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/ts/tsModuleDeclaration.cpp b/ets2panda/ir/ts/tsModuleDeclaration.cpp index 88d0f01fb6a8e4380b0545189f3a3e3f6a310dfa..e307582e6980ddeefc288f20dab66838818f5bb0 100644 --- a/ets2panda/ir/ts/tsModuleDeclaration.cpp +++ b/ets2panda/ir/ts/tsModuleDeclaration.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 @@ -26,19 +26,19 @@ namespace ark::es2panda::ir { void TSModuleDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode->AsDecorator(); } } - if (auto *transformedNode = cb(name_); name_ != transformedNode) { + if (auto *transformedNode = cb(name_); name_ != transformedNode && transformedNode != nullptr) { name_->SetTransformedNode(transformationName, transformedNode); name_ = transformedNode->AsExpression(); } if (body_ != nullptr) { - if (auto *transformedNode = cb(body_); body_ != transformedNode) { + if (auto *transformedNode = cb(body_); body_ != transformedNode && transformedNode != nullptr) { body_->SetTransformedNode(transformationName, transformedNode); body_ = transformedNode->AsStatement(); } diff --git a/ets2panda/ir/ts/tsNamedTupleMember.cpp b/ets2panda/ir/ts/tsNamedTupleMember.cpp index 742f9e6cd4f251a3a5beac4026f986dc92e86cdf..9111b94f028e6ab60ab384532f0def0432ff9ceb 100644 --- a/ets2panda/ir/ts/tsNamedTupleMember.cpp +++ b/ets2panda/ir/ts/tsNamedTupleMember.cpp @@ -25,12 +25,12 @@ namespace ark::es2panda::ir { void TSNamedTupleMember::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - if (auto *transformedNode = cb(label_); label_ != transformedNode) { + if (auto *transformedNode = cb(label_); label_ != transformedNode && transformedNode != nullptr) { label_->SetTransformedNode(transformationName, transformedNode); label_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(elementType_); elementType_ != transformedNode) { + if (auto *transformedNode = cb(elementType_); elementType_ != transformedNode && transformedNode != nullptr) { elementType_->SetTransformedNode(transformationName, transformedNode); elementType_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsNonNullExpression.cpp b/ets2panda/ir/ts/tsNonNullExpression.cpp index f789ed7a7b3a302a722791ca04b4e70bbc0144af..5001c3a3c23a02f6c4ef10095c4591b25ed32077 100644 --- a/ets2panda/ir/ts/tsNonNullExpression.cpp +++ b/ets2panda/ir/ts/tsNonNullExpression.cpp @@ -23,7 +23,7 @@ namespace ark::es2panda::ir { void TSNonNullExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(expr_); expr_ != transformedNode) { + if (auto *transformedNode = cb(expr_); expr_ != transformedNode && transformedNode != nullptr) { expr_->SetTransformedNode(transformationName, transformedNode); expr_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsParameterProperty.cpp b/ets2panda/ir/ts/tsParameterProperty.cpp index 047484053faa822cf6aa5dcee3ec6ea0264975b4..5328a38f2a26626ecae0f7cd78fae9d846216d63 100644 --- a/ets2panda/ir/ts/tsParameterProperty.cpp +++ b/ets2panda/ir/ts/tsParameterProperty.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 @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void TSParameterProperty::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(parameter_); parameter_ != transformedNode) { + if (auto *transformedNode = cb(parameter_); parameter_ != transformedNode && transformedNode != nullptr) { parameter_->SetTransformedNode(transformationName, transformedNode); parameter_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsParenthesizedType.cpp b/ets2panda/ir/ts/tsParenthesizedType.cpp index 4608efb394706a13363c6b93748cf1b8f4073207..24a2a6e4154a68dbefdbc91acaed09d207f08ffa 100644 --- a/ets2panda/ir/ts/tsParenthesizedType.cpp +++ b/ets2panda/ir/ts/tsParenthesizedType.cpp @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void TSParenthesizedType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(type_); type_ != transformedNode) { + if (auto *transformedNode = cb(type_); type_ != transformedNode && transformedNode != nullptr) { type_->SetTransformedNode(transformationName, transformedNode); type_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsQualifiedName.cpp b/ets2panda/ir/ts/tsQualifiedName.cpp index d71f7db781d5718f6cc2928bcd0c84aac8cc5423..52e3cf0cb2fecc875bed10f6ba6fbb6ae01cf883 100644 --- a/ets2panda/ir/ts/tsQualifiedName.cpp +++ b/ets2panda/ir/ts/tsQualifiedName.cpp @@ -44,12 +44,12 @@ void TSQualifiedName::Iterate(const NodeTraverser &cb) const void TSQualifiedName::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(left_); left_ != transformedNode) { + if (auto *transformedNode = cb(left_); left_ != transformedNode && transformedNode != nullptr) { left_->SetTransformedNode(transformationName, transformedNode); left_ = transformedNode->AsExpression(); } - if (auto *transformedNode = cb(right_); right_ != transformedNode) { + if (auto *transformedNode = cb(right_); right_ != transformedNode && transformedNode != nullptr) { right_->SetTransformedNode(transformationName, transformedNode); right_ = transformedNode->AsIdentifier(); } diff --git a/ets2panda/ir/ts/tsTupleType.cpp b/ets2panda/ir/ts/tsTupleType.cpp index d98cbd162299827eb3f569f9e88ad891da90f6aa..9aaad91959dfc7a9952fbb5da6a21ddbf31b8423 100644 --- a/ets2panda/ir/ts/tsTupleType.cpp +++ b/ets2panda/ir/ts/tsTupleType.cpp @@ -30,7 +30,7 @@ namespace ark::es2panda::ir { void TSTupleType::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { for (auto *&it : VectorIterationGuard(elementTypes_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp b/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp index 75532d60154cff4050fefed4cab1dfcbdf7e5054..f142f16b92c4b1c5219dbe37b92a140f3a6c8617 100644 --- a/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp +++ b/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp @@ -42,7 +42,8 @@ void TSTypeAliasDeclaration::TransformChildren(const NodeTransformer &cb, std::s { auto const &decorators = Decorators(); for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { + if (auto *transformedNode = cb(decorators[ix]); + decorators[ix] != transformedNode && transformedNode != nullptr) { decorators[ix]->SetTransformedNode(transformationName, transformedNode); SetValueDecorators(transformedNode->AsDecorator(), ix); } @@ -50,28 +51,30 @@ void TSTypeAliasDeclaration::TransformChildren(const NodeTransformer &cb, std::s auto const &annotations = Annotations(); for (size_t ix = 0; ix < annotations.size(); ix++) { - if (auto *transformedNode = cb(annotations[ix]); annotations[ix] != transformedNode) { + if (auto *transformedNode = cb(annotations[ix]); + annotations[ix] != transformedNode && transformedNode != nullptr) { annotations[ix]->SetTransformedNode(transformationName, transformedNode); SetValueAnnotations(transformedNode->AsAnnotationUsage(), ix); } } auto const id = Id(); - if (auto *transformedNode = cb(id); id != transformedNode) { + if (auto *transformedNode = cb(id); id != transformedNode && transformedNode != nullptr) { id->SetTransformedNode(transformationName, transformedNode); SetId(transformedNode->AsIdentifier()); } auto const typeParams = TypeParams(); if (typeParams != nullptr) { - if (auto *transformedNode = cb(typeParams); typeParams != transformedNode) { + if (auto *transformedNode = cb(typeParams); typeParams != transformedNode && transformedNode != nullptr) { typeParams->SetTransformedNode(transformationName, transformedNode); SetTypeParameters(transformedNode->AsTSTypeParameterDeclaration()); } } if (auto *typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } diff --git a/ets2panda/ir/ts/tsTypeAssertion.cpp b/ets2panda/ir/ts/tsTypeAssertion.cpp index 64ecd8063413a9b2c65b41d495d41c8125f0a543..9e15cff417a253008bf6cddc58a7f7fd2e61fb61 100644 --- a/ets2panda/ir/ts/tsTypeAssertion.cpp +++ b/ets2panda/ir/ts/tsTypeAssertion.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 @@ -26,13 +26,14 @@ namespace ark::es2panda::ir { void TSTypeAssertion::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (auto *typeAnnotation = TypeAnnotation(); typeAnnotation != nullptr) { - if (auto *transformedNode = cb(typeAnnotation); typeAnnotation != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation); + typeAnnotation != transformedNode && transformedNode != nullptr) { typeAnnotation->SetTransformedNode(transformationName, transformedNode); SetTsTypeAnnotation(static_cast(transformedNode)); } } - if (auto *transformedNode = cb(expression_); expression_ != transformedNode) { + if (auto *transformedNode = cb(expression_); expression_ != transformedNode && transformedNode != nullptr) { expression_->SetTransformedNode(transformationName, transformedNode); expression_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsTypeLiteral.cpp b/ets2panda/ir/ts/tsTypeLiteral.cpp index d13f7662cdbe610180fa9735b0f2f7fc4b03e09e..544d16d380205321a816d5cbfc6603b0818dd57f 100644 --- a/ets2panda/ir/ts/tsTypeLiteral.cpp +++ b/ets2panda/ir/ts/tsTypeLiteral.cpp @@ -29,7 +29,7 @@ namespace ark::es2panda::ir { void TSTypeLiteral::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(members_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = transformedNode; } diff --git a/ets2panda/ir/ts/tsTypeOperator.cpp b/ets2panda/ir/ts/tsTypeOperator.cpp index 2fa2ad26adb615ba84351e83fc4004db8bf77aed..6ed34b56cc8a0eee42f0658e6934b4e561eb5a16 100644 --- a/ets2panda/ir/ts/tsTypeOperator.cpp +++ b/ets2panda/ir/ts/tsTypeOperator.cpp @@ -24,7 +24,7 @@ namespace ark::es2panda::ir { void TSTypeOperator::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(type_); type_ != transformedNode) { + if (auto *transformedNode = cb(type_); type_ != transformedNode && transformedNode != nullptr) { type_->SetTransformedNode(transformationName, transformedNode); type_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsTypeParameter.cpp b/ets2panda/ir/ts/tsTypeParameter.cpp index 4a8d2538091f49b1c2581e45882b1b64083a07af..be06dbbe3bd44a3fd50b71e0629bf4182c728e1e 100644 --- a/ets2panda/ir/ts/tsTypeParameter.cpp +++ b/ets2panda/ir/ts/tsTypeParameter.cpp @@ -44,14 +44,14 @@ void TSTypeParameter::SetName(Identifier *name) void TSTypeParameter::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { auto const name = Name(); - if (auto *transformedNode = cb(name); name != transformedNode) { + if (auto *transformedNode = cb(name); name != transformedNode && transformedNode != nullptr) { name->SetTransformedNode(transformationName, transformedNode); SetName(transformedNode->AsIdentifier()); } auto const constraint = Constraint(); if (constraint != nullptr) { - if (auto *transformedNode = cb(constraint); constraint != transformedNode) { + if (auto *transformedNode = cb(constraint); constraint != transformedNode && transformedNode != nullptr) { constraint->SetTransformedNode(transformationName, transformedNode); SetConstraint(static_cast(transformedNode)); } @@ -59,7 +59,7 @@ void TSTypeParameter::TransformChildren(const NodeTransformer &cb, std::string_v auto const defaultType = DefaultType(); if (defaultType != nullptr) { - if (auto *transformedNode = cb(defaultType); defaultType != transformedNode) { + if (auto *transformedNode = cb(defaultType); defaultType != transformedNode && transformedNode != nullptr) { defaultType->SetTransformedNode(transformationName, transformedNode); SetDefaultType(static_cast(transformedNode)); } @@ -67,7 +67,8 @@ void TSTypeParameter::TransformChildren(const NodeTransformer &cb, std::string_v auto const annotations = Annotations(); for (size_t ix = 0; ix < annotations.size(); ix++) { - if (auto *transformedNode = cb(annotations[ix]); annotations[ix] != transformedNode) { + if (auto *transformedNode = cb(annotations[ix]); + annotations[ix] != transformedNode && transformedNode != nullptr) { annotations[ix]->SetTransformedNode(transformationName, transformedNode); SetValueAnnotations(transformedNode->AsAnnotationUsage(), ix); } diff --git a/ets2panda/ir/ts/tsTypeParameterDeclaration.cpp b/ets2panda/ir/ts/tsTypeParameterDeclaration.cpp index b6d574499828ec0b908aa3377fff49c7ac48b22a..1940060fe2109034923949fd2b8bec85c8746c97 100644 --- a/ets2panda/ir/ts/tsTypeParameterDeclaration.cpp +++ b/ets2panda/ir/ts/tsTypeParameterDeclaration.cpp @@ -38,7 +38,7 @@ void TSTypeParameterDeclaration::TransformChildren(const NodeTransformer &cb, st { auto const params = Params(); for (size_t ix = 0; ix < params.size(); ix++) { - if (auto *transformedNode = cb(params[ix]); params[ix] != transformedNode) { + if (auto *transformedNode = cb(params[ix]); params[ix] != transformedNode && transformedNode != nullptr) { params[ix]->SetTransformedNode(transformationName, transformedNode); SetValueParams(transformedNode->AsTSTypeParameter(), ix); } diff --git a/ets2panda/ir/ts/tsTypeParameterInstantiation.cpp b/ets2panda/ir/ts/tsTypeParameterInstantiation.cpp index 08a18265509d6d35709c4cf81f9c2fe3e9f8b90d..4947c84103b1e322ccffb4679209b7136f479e7d 100644 --- a/ets2panda/ir/ts/tsTypeParameterInstantiation.cpp +++ b/ets2panda/ir/ts/tsTypeParameterInstantiation.cpp @@ -44,7 +44,7 @@ TSTypeParameterInstantiation *TSTypeParameterInstantiation::Clone(ArenaAllocator void TSTypeParameterInstantiation::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(params_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsTypePredicate.cpp b/ets2panda/ir/ts/tsTypePredicate.cpp index 0ab2158429af2721d494a5d637138a376c662d11..a190faaf5a629476471ead554b5df99a75cf9a35 100644 --- a/ets2panda/ir/ts/tsTypePredicate.cpp +++ b/ets2panda/ir/ts/tsTypePredicate.cpp @@ -26,13 +26,14 @@ namespace ark::es2panda::ir { void TSTypePredicate::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(parameterName_); parameterName_ != transformedNode) { + if (auto *transformedNode = cb(parameterName_); parameterName_ != transformedNode && transformedNode != nullptr) { parameterName_->SetTransformedNode(transformationName, transformedNode); parameterName_ = transformedNode->AsExpression(); } if (typeAnnotation_ != nullptr) { - if (auto *transformedNode = cb(typeAnnotation_); typeAnnotation_ != transformedNode) { + if (auto *transformedNode = cb(typeAnnotation_); + typeAnnotation_ != transformedNode && transformedNode != nullptr) { typeAnnotation_->SetTransformedNode(transformationName, transformedNode); typeAnnotation_ = static_cast(transformedNode); } diff --git a/ets2panda/ir/ts/tsTypeQuery.cpp b/ets2panda/ir/ts/tsTypeQuery.cpp index 5fa24495e892a371b09abc180c525b490e16b252..76ce93c9b3d8926b2245c27d238626e1bdf6a375 100644 --- a/ets2panda/ir/ts/tsTypeQuery.cpp +++ b/ets2panda/ir/ts/tsTypeQuery.cpp @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void TSTypeQuery::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - if (auto *transformedNode = cb(exprName_); exprName_ != transformedNode) { + if (auto *transformedNode = cb(exprName_); exprName_ != transformedNode && transformedNode != nullptr) { exprName_->SetTransformedNode(transformationName, transformedNode); exprName_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsTypeReference.cpp b/ets2panda/ir/ts/tsTypeReference.cpp index 57b8f7d2ae2cd662db0504c73723e943cb43585f..0d3b3d71f193daa8077ef6e3c0a3feca011b34ca 100644 --- a/ets2panda/ir/ts/tsTypeReference.cpp +++ b/ets2panda/ir/ts/tsTypeReference.cpp @@ -34,13 +34,13 @@ namespace ark::es2panda::ir { void TSTypeReference::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { if (typeParams_ != nullptr) { - if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode) { + if (auto *transformedNode = cb(typeParams_); typeParams_ != transformedNode && transformedNode != nullptr) { typeParams_->SetTransformedNode(transformationName, transformedNode); typeParams_ = transformedNode->AsTSTypeParameterInstantiation(); } } - if (auto *transformedNode = cb(typeName_); typeName_ != transformedNode) { + if (auto *transformedNode = cb(typeName_); typeName_ != transformedNode && transformedNode != nullptr) { typeName_->SetTransformedNode(transformationName, transformedNode); typeName_ = transformedNode->AsExpression(); } diff --git a/ets2panda/ir/ts/tsUnionType.cpp b/ets2panda/ir/ts/tsUnionType.cpp index aca8a8aa8995d717e562b865296923db544b551e..b4055722cd40dcd17548dff5eb5432b55b1aa39e 100644 --- a/ets2panda/ir/ts/tsUnionType.cpp +++ b/ets2panda/ir/ts/tsUnionType.cpp @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { void TSUnionType::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { for (auto *&it : VectorIterationGuard(types_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { + if (auto *transformedNode = cb(it); it != transformedNode && transformedNode != nullptr) { it->SetTransformedNode(transformationName, transformedNode); it = static_cast(transformedNode); } diff --git a/ets2panda/test/ast/compiler/ets/lambda_infer_type/lambda_rest_param.ets b/ets2panda/test/ast/compiler/ets/lambda_infer_type/lambda_rest_param.ets new file mode 100644 index 0000000000000000000000000000000000000000..70b2107fba65784a999d1028ddcd8f6bf64256d7 --- /dev/null +++ b/ets2panda/test/ast/compiler/ets/lambda_infer_type/lambda_rest_param.ets @@ -0,0 +1,21 @@ +/* + * Copyright (c) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +let f = (...args) =>{ return args.length; }; +/* @@ label1 */f(1,2,3); + +((a:number, ...args)=> { return args.length; })(1,2,3,4,5) + +/* @@@ label1 Error TypeError: This expression is not callable. */