diff --git a/ets2panda/checker/types/ets/etsNullishTypes.cpp b/ets2panda/checker/types/ets/etsNullishTypes.cpp index 6e102e16751ae3c4b039af93f2d5a8278a34a2de..e9abc5839f4d6d494453c5aa8d7ad9fab029c3b0 100644 --- a/ets2panda/checker/types/ets/etsNullishTypes.cpp +++ b/ets2panda/checker/types/ets/etsNullishTypes.cpp @@ -59,12 +59,12 @@ void ETSNullType::ToString(std::stringstream &ss, [[maybe_unused]] bool precise) void ETSNullType::ToAssemblerType(std::stringstream &ss) const { - ss << compiler::Signatures::BUILTIN_OBJECT; + ss << compiler::Signatures::NULL_ASSEMBLY_TYPE; } void ETSNullType::ToDebugInfoType(std::stringstream &ss) const { - ss << ETSObjectType::NameToDescriptor(compiler::Signatures::BUILTIN_OBJECT); + ss << ETSObjectType::NameToDescriptor(compiler::Signatures::NULL_ASSEMBLY_TYPE); } Type *ETSNullType::Instantiate([[maybe_unused]] ArenaAllocator *allocator, [[maybe_unused]] TypeRelation *relation, diff --git a/ets2panda/test/unit/union_emit_test.cpp b/ets2panda/test/unit/union_emit_test.cpp index 47134d0b4f4334d4d2d230d68aca808426e9e267..13fcd11f6dc862ada91276bff2eb572405887db1 100644 --- a/ets2panda/test/unit/union_emit_test.cpp +++ b/ets2panda/test/unit/union_emit_test.cpp @@ -24,6 +24,16 @@ public: ~UnionAsmTest() override = default; + void CheckFunction(std::string_view funcSig, bool found = true) + { + pandasm::Function *func = GetFunction(funcSig, program_->functionStaticTable); + if (found) { + ASSERT_TRUE(func != nullptr) << "Function '" << funcSig << "' not found"; + } else { + ASSERT_TRUE(func == nullptr) << "Function '" << funcSig << "' found"; + } + } + void CheckUnionType(std::string_view recordName, bool found = true) { pandasm::Record *rec = GetRecord(recordName, program_); @@ -234,4 +244,19 @@ TEST_F(UnionAsmTest, union_test_as) CheckInsInFunction("dummy.ETSGLOBAL.test1:std.core.String;void;", "std.core.Runtime.failedTypeCastException", true); } +TEST_F(UnionAsmTest, union_null_object) +{ + SetCurrentProgram(R"( + type T1 = string | null | undefined | object + type T2 = string | object | null | undefined + function foo1(a: T1) {} + function foo2(a: T2) {} + )"); + + CheckFunction("dummy.ETSGLOBAL.foo1:{Ustd.core.Null,std.core.Object};void;"); + CheckFunction("dummy.ETSGLOBAL.foo2:{Ustd.core.Null,std.core.Object};void;"); + CheckFunction("dummy.ETSGLOBAL.foo1:std.core.Object;void;", false); + CheckFunction("dummy.ETSGLOBAL.foo2:std.core.Object;void;", false); +} + } // namespace ark::es2panda::compiler::test