From 0bc1d5f3a9c01b435c5dbc277b4b94e4841473d4 Mon Sep 17 00:00:00 2001 From: Daniel Kofanov Date: Mon, 13 Mar 2023 14:18:22 +0300 Subject: [PATCH] [Compiler] Resolve AnyTypeCheck for constants Change-Id: I6b4d71a8d6969c8154400a262bf6f59c540f0f4c Signed-off-by: Daniel Kofanov --- .../compiler/ecmascript_runtime_interface.cpp | 19 +++++++++++++++++++ .../compiler/ecmascript_runtime_interface.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/runtime/compiler/ecmascript_runtime_interface.cpp b/runtime/compiler/ecmascript_runtime_interface.cpp index 37bd3d601..2daa0ec34 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 31743db43..d0765c9de 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; -- Gitee