diff --git a/runtime/compiler/ecmascript_runtime_interface.cpp b/runtime/compiler/ecmascript_runtime_interface.cpp index 37bd3d6010ab44dcb41b8ca17d3a44b0be714886..2daa0ec34a3d9dde946a1011837b9de94908982d 100644 --- a/runtime/compiler/ecmascript_runtime_interface.cpp +++ b/runtime/compiler/ecmascript_runtime_interface.cpp @@ -237,6 +237,25 @@ compiler::AnyBaseType EcmaRuntimeInterface::GetProfilingAnyType(RuntimeInterface return compiler::AnyBaseType::UNDEFINED_TYPE; } +compiler::AnyBaseType EcmaRuntimeInterface::ResolveSpecialAnyTypeByConstant(coretypes::TaggedValue any_const) +{ + JSTaggedValue js_any_const(any_const); + ASSERT(js_any_const.IsSpecial()); + if (js_any_const == JSTaggedValue::Hole()) { + return compiler::AnyBaseType::ECMASCRIPT_HOLE_TYPE; + } + if (js_any_const == JSTaggedValue::Undefined()) { + return compiler::AnyBaseType::ECMASCRIPT_UNDEFINED_TYPE; + } + if ((js_any_const == JSTaggedValue::False()) || (js_any_const == JSTaggedValue::False())) { + return compiler::AnyBaseType::ECMASCRIPT_BOOLEAN_TYPE; + } + if (js_any_const == JSTaggedValue::Null()) { + return compiler::AnyBaseType::ECMASCRIPT_NULL_TYPE; + } + return compiler::AnyBaseType::UNDEFINED_TYPE; +} + RuntimeInterface::NewObjDynInfo EcmaRuntimeInterface::GetNewObjDynInfo(uintptr_t ctor) const { static constexpr NewObjDynInfo SLOW_PATH = {NewObjDynInfo::AllocatorType::SLOW_PATH, diff --git a/runtime/compiler/ecmascript_runtime_interface.h b/runtime/compiler/ecmascript_runtime_interface.h index 31743db43787e3968524a2c59ca59adc4481fa1c..d0765c9dec2a29427c85ee1365bf6449120da004 100644 --- a/runtime/compiler/ecmascript_runtime_interface.h +++ b/runtime/compiler/ecmascript_runtime_interface.h @@ -119,6 +119,8 @@ public: const BytecodeInstruction *bc_inst, unsigned index, bool *is_integer_seen, bool *is_type_profiled) override; + compiler::AnyBaseType ResolveSpecialAnyTypeByConstant(coretypes::TaggedValue any_const) override; + NewObjDynInfo GetNewObjDynInfo(uintptr_t ctor) const override; bool GetProfileDataForNamedAccess(PandaRuntimeInterface::MethodPtr m, uintptr_t slot_id, ArenaVector *profile) override;