diff --git a/ets2panda/checker/ets/object.cpp b/ets2panda/checker/ets/object.cpp index 82f486c79ec36b88168d8a7e19e117f1e46cefbd..88a29aac6f0959a2a2f6bde151c4011bda6b9c8b 100644 --- a/ets2panda/checker/ets/object.cpp +++ b/ets2panda/checker/ets/object.cpp @@ -1277,11 +1277,7 @@ void ETSChecker::CheckClassDefinition(ir::ClassDefinition *classDef) classType->SuperType()->GetDeclNode()->Check(this); } - if (classType->GetDeclNode() != classDef) { - ES2PANDA_ASSERT(IsAnyError()); - classDef->SetTsType(GlobalTypeError()); - return; - } + ES2PANDA_ASSERT(classType->GetDeclNode() == classDef); auto newStatus = checker::CheckerStatus::IN_CLASS; if (Context().ContainingClass() != classType) { diff --git a/ets2panda/checker/ets/typeCreation.cpp b/ets2panda/checker/ets/typeCreation.cpp index 959fcad7731532ffdfb72a35ebfbf334621adbbd..7fa9f971b4a12fb575f099b7a42b5b3625f52f59 100644 --- a/ets2panda/checker/ets/typeCreation.cpp +++ b/ets2panda/checker/ets/typeCreation.cpp @@ -287,10 +287,12 @@ static ETSObjectType *InitializeGlobalBuiltinObjectType(ETSChecker *checker, Glo auto const setType = [checker](GlobalTypeId slotId, Type *type) { auto &slot = checker->GetGlobalTypesHolder()->GlobalTypes()[helpers::ToUnderlying(slotId)]; - if (slot == nullptr) { - slot = type; + if (UNLIKELY(slot != nullptr)) { + ES2PANDA_ASSERT(checker->IsAnyError()); + return type; } - return slot; + slot = type; + return type; }; auto *const programAllocator = checker->ProgramAllocator(); @@ -374,8 +376,8 @@ ETSObjectType *ETSChecker::CreateETSObjectType(ir::AstNode *declNode, ETSObjectF Relation()); } } else if (internalName == compiler::Signatures::BUILTIN_ARRAY) { - objectType = ProgramAllocator()->New(ProgramAllocator(), name, - std::make_tuple(declNode, flags, Relation())); + objectType = ProgramAllocator()->New( + ProgramAllocator(), name, std::make_tuple(declNode, flags | ETSObjectFlags::BUILTIN_ARRAY, Relation())); } else { objectType = ProgramAllocator()->New(ProgramAllocator(), name, internalName, std::make_tuple(declNode, flags, Relation())); diff --git a/ets2panda/checker/types/ets/etsResizableArrayType.h b/ets2panda/checker/types/ets/etsResizableArrayType.h index 90936ceadfbcb45ac54ccc707dc04d294f067d07..c9b10498a8846d39f5e10a2a76989e3075edffdd 100644 --- a/ets2panda/checker/types/ets/etsResizableArrayType.h +++ b/ets2panda/checker/types/ets/etsResizableArrayType.h @@ -28,6 +28,7 @@ public: ETSObjectFlags::CLASS | ETSObjectFlags::BUILTIN_ARRAY | ETSObjectFlags::RESOLVED_SUPER), element_(nullptr) { + ES2PANDA_ASSERT(IsETSResizableArrayType()); SetSuperType(super); } @@ -35,6 +36,7 @@ public: std::tuple info) : ETSObjectType(allocator, name, compiler::Signatures::BUILTIN_ARRAY, info), element_(nullptr) { + ES2PANDA_ASSERT(IsETSResizableArrayType()); } explicit ETSResizableArrayType(ThreadSafeArenaAllocator *allocator, ETSObjectType *super, TypeRelation *relation, @@ -46,6 +48,7 @@ public: relation)), element_(element) { + ES2PANDA_ASSERT(IsETSResizableArrayType()); SetSuperType(super); variable_ = super->Variable(); }