diff --git a/ets2panda/checker/ETSchecker.cpp b/ets2panda/checker/ETSchecker.cpp index 8556428fab368b58762f763e3be2ecde65e43204..e3668a12989047f7de30b5fc08c8a141fc3060f2 100644 --- a/ets2panda/checker/ETSchecker.cpp +++ b/ets2panda/checker/ETSchecker.cpp @@ -196,6 +196,8 @@ void ETSChecker::CheckProgram(parser::Program *program, bool runAnalysis) for (auto &[_, extPrograms] : program->ExternalSources()) { (void)_; for (auto *extProg : extPrograms) { + checker::SavedCheckerContext savedContext(this, Context().Status(), Context().ContainingClass()); + AddStatus(checker::CheckerStatus::IN_EXTERNAL); CheckProgram(extProg, VarBinder()->IsGenStdLib()); } } diff --git a/ets2panda/checker/checkerContext.h b/ets2panda/checker/checkerContext.h index f50d37811a4ac2c5147783e34ae6e525968b1049..67d2a0cf5cc2e525d819f9e300965489f88f9aa6 100644 --- a/ets2panda/checker/checkerContext.h +++ b/ets2panda/checker/checkerContext.h @@ -53,6 +53,7 @@ enum class CheckerStatus : uint32_t { MEET_BREAK = 1U << 21U, MEET_CONTINUE = 1U << 22U, MEET_THROW = 1U << 23U, + IN_EXTERNAL = 1U << 24U, }; } // namespace ark::es2panda::checker diff --git a/ets2panda/checker/ets/helpers.cpp b/ets2panda/checker/ets/helpers.cpp index 6fde4aa6325eb30bcec4ff31014a876e46ee6215..3da03cd7b5dfd7e2a0b4a87e68e5070a8bdab022 100644 --- a/ets2panda/checker/ets/helpers.cpp +++ b/ets2panda/checker/ets/helpers.cpp @@ -2334,7 +2334,7 @@ void ETSChecker::GenerateGetterSetterPropertyAndMethod(ir::ClassProperty *origin { auto *const classDef = classType->GetDeclNode()->AsClassDefinition(); auto *interfaceProp = originalProp->Clone(Allocator(), originalProp->Parent()); - interfaceProp->ClearModifier(ir::ModifierFlags::GETTER_SETTER | ir::ModifierFlags::EXTERNAL); + interfaceProp->ClearModifier(ir::ModifierFlags::GETTER_SETTER); ASSERT(Scope()->IsClassScope()); auto *const scope = Scope()->AsClassScope(); @@ -2369,7 +2369,7 @@ void ETSChecker::GenerateGetterSetterPropertyAndMethod(ir::ClassProperty *origin var = methodScope->FindLocal(name, varbinder::ResolveBindingOptions::BINDINGS); } - if ((originalProp->Modifiers() & ir::ModifierFlags::EXTERNAL) != 0U) { + if (HasStatus(CheckerStatus::IN_EXTERNAL)) { getter->Function()->AddFlag(ir::ScriptFunctionFlags::EXTERNAL); } @@ -2388,7 +2388,7 @@ ir::MethodDefinition *ETSChecker::GenerateSetterForProperty(ir::ClassProperty *o setter->Function()->AddModifier(ir::ModifierFlags::OVERRIDE); } - if ((originalProp->Modifiers() & ir::ModifierFlags::EXTERNAL) != 0U) { + if (HasStatus(CheckerStatus::IN_EXTERNAL)) { setter->Function()->AddFlag(ir::ScriptFunctionFlags::EXTERNAL); } diff --git a/ets2panda/checker/ets/object.cpp b/ets2panda/checker/ets/object.cpp index a9b6d01793ff5aea9ead183f69c689507fe1d1f5..1e6e3c8b606f22917fb94bf33d0b781c78038553 100644 --- a/ets2panda/checker/ets/object.cpp +++ b/ets2panda/checker/ets/object.cpp @@ -850,10 +850,6 @@ void ETSChecker::ApplyModifiersAndRemoveImplementedAbstracts(ArenaVectorFields()) { if (field->Name() == (*it)->Name()) { - if (isGetSetExternal.isExternal) { - field->Declaration()->Node()->AddModifier(ir::ModifierFlags::EXTERNAL); - } - field->Declaration()->Node()->AddModifier(isGetSetExternal.isGetter && isGetSetExternal.isSetter ? ir::ModifierFlags::GETTER_SETTER : isGetSetExternal.isGetter ? ir::ModifierFlags::GETTER diff --git a/ets2panda/ir/astNodeFlags.h b/ets2panda/ir/astNodeFlags.h index 6ccc32303bc603fe8237b82666c9ab6ddb164dc0..4ed01c98f077a855219243d5d121d733bcb04d79 100644 --- a/ets2panda/ir/astNodeFlags.h +++ b/ets2panda/ir/astNodeFlags.h @@ -60,7 +60,6 @@ enum class ModifierFlags : uint32_t { SETTER = 1U << 22U, DEFAULT_EXPORT = 1U << 23U, EXPORT_TYPE = 1U << 24U, - EXTERNAL = 1U << 25U, SUPER_OWNER = 1U << 26U, ACCESS = PUBLIC | PROTECTED | PRIVATE | INTERNAL, ALL = STATIC | ASYNC | ACCESS | DECLARE | READONLY | ABSTRACT,