From 3c3518c2de4b926e68dccaba538536c60975000a Mon Sep 17 00:00:00 2001 From: zhaoziming Date: Fri, 23 May 2025 23:45:31 +0800 Subject: [PATCH] test commmit for add handler Change-Id: Iac51a2cc3f20809f4ccb0d31f73347b123ee4809 --- .../plugins/ets/runtime/ets_class_linker_extension.cpp | 10 ++++++++-- .../plugins/ets/runtime/ets_class_linker_extension.h | 2 ++ static_core/plugins/ets/runtime/types/ets_class.h | 6 ++++++ static_core/plugins/ets/stdlib/std/core/Class.ets | 1 + static_core/runtime/include/class_linker_extension.h | 4 ++++ 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/static_core/plugins/ets/runtime/ets_class_linker_extension.cpp b/static_core/plugins/ets/runtime/ets_class_linker_extension.cpp index 9efc95e27f..bd90f0b18a 100644 --- a/static_core/plugins/ets/runtime/ets_class_linker_extension.cpp +++ b/static_core/plugins/ets/runtime/ets_class_linker_extension.cpp @@ -204,6 +204,11 @@ bool EtsClassLinkerExtension::InitializeArrayClass(Class *arrayClass, Class *com } bool EtsClassLinkerExtension::InitializeClass(Class *klass) +{ + return InitializeClass(klass, GetErrorHandler()); +} + +bool EtsClassLinkerExtension::InitializeClass(ark::Class *klass, [[maybe_unused]] ark::ClassLinkerErrorHandler *handler) { ASSERT(IsInitialized()); ASSERT_HAVE_ACCESS_TO_MANAGED_OBJECTS(); @@ -211,10 +216,11 @@ bool EtsClassLinkerExtension::InitializeClass(Class *klass) constexpr uint32_t ETS_ACCESS_FLAGS_MASK = 0xFFFFU; EtsClass::FromRuntimeClass(klass)->Initialize( - klass->GetBase() != nullptr ? EtsClass::FromRuntimeClass(klass->GetBase()) : nullptr, - klass->GetAccessFlags() & ETS_ACCESS_FLAGS_MASK, klass->IsPrimitive()); + klass->GetBase() != nullptr ? EtsClass::FromRuntimeClass(klass->GetBase()) : nullptr, + klass->GetAccessFlags() & ETS_ACCESS_FLAGS_MASK, klass->IsPrimitive()); return true; + } void EtsClassLinkerExtension::InitializePrimitiveClass(Class *primitiveClass) diff --git a/static_core/plugins/ets/runtime/ets_class_linker_extension.h b/static_core/plugins/ets/runtime/ets_class_linker_extension.h index 1800ebf9ac..a63e0281b7 100644 --- a/static_core/plugins/ets/runtime/ets_class_linker_extension.h +++ b/static_core/plugins/ets/runtime/ets_class_linker_extension.h @@ -71,6 +71,8 @@ public: bool InitializeClass(Class *klass) override; + bool InitializeClass(Class *klass, ClassLinkerErrorHandler *handler) override; + bool IsMethodNativeApi(const Method *method) const override; const void *GetNativeEntryPointFor(Method *method) const override; diff --git a/static_core/plugins/ets/runtime/types/ets_class.h b/static_core/plugins/ets/runtime/types/ets_class.h index 1f7f9a0a17..36fe9da636 100644 --- a/static_core/plugins/ets/runtime/types/ets_class.h +++ b/static_core/plugins/ets/runtime/types/ets_class.h @@ -502,6 +502,11 @@ public: return MEMBER_OFFSET(EtsClass, flags_); } + static constexpr size_t GetTypeMetadataOffset() + { + return MEMBER_OFFSET(EtsClass, typeMetadata_); + } + static constexpr size_t GCRefFieldsOffset() { return GetHeaderOffset() + sizeof(header_); @@ -609,6 +614,7 @@ private: FIELD_UNUSED ObjectPointer name_; // String FIELD_UNUSED ObjectPointer superClass_; // Class FIELD_UNUSED uint32_t flags_; + FIELD_UNUSED uint64_t typeMetadata_; // ets.Class fields END ark::Class klass_; diff --git a/static_core/plugins/ets/stdlib/std/core/Class.ets b/static_core/plugins/ets/stdlib/std/core/Class.ets index e2ea8bea00..873eee43be 100644 --- a/static_core/plugins/ets/stdlib/std/core/Class.ets +++ b/static_core/plugins/ets/stdlib/std/core/Class.ets @@ -22,6 +22,7 @@ export final class Class { private name: string | undefined private superClass: Class | undefined private flags: int + private typeMetadata: long private constructor() { throw new Error("Class constructor called") } private native getNameInternal(): string; diff --git a/static_core/runtime/include/class_linker_extension.h b/static_core/runtime/include/class_linker_extension.h index 787ad45c33..b0c7f34ebb 100644 --- a/static_core/runtime/include/class_linker_extension.h +++ b/static_core/runtime/include/class_linker_extension.h @@ -62,6 +62,10 @@ public: virtual bool InitializeClass(Class *klass) = 0; + virtual bool InitializeClass(Class *klass, [[maybe_unused]] ClassLinkerErrorHandler *handler) { + return InitializeClass(klass); + } + virtual const void *GetNativeEntryPointFor(Method *method) const = 0; virtual bool CanThrowException(const Method *method) const = 0; -- Gitee