From 95058bf32ded7c947a604096b2e3d405647411d5 Mon Sep 17 00:00:00 2001 From: zhaoziming Date: Fri, 23 May 2025 23:31:39 +0800 Subject: [PATCH] tmp commit adding error handler Change-Id: Ib2e558aeaf3b9a917a084b8f57a8697809262c8f --- static_core/plugins/ets/runtime/ets_class_linker_extension.cpp | 3 ++- static_core/plugins/ets/runtime/ets_class_linker_extension.h | 2 +- static_core/plugins/ets/runtime/types/ets_class.cpp | 1 + static_core/plugins/ets/runtime/types/ets_class.h | 1 + static_core/plugins/ets/stdlib/std/core/Class.ets | 1 + static_core/runtime/class_linker.cpp | 1 + static_core/runtime/core/core_class_linker_extension.h | 3 ++- static_core/runtime/include/class_linker_extension.h | 3 ++- static_core/runtime/tests/class_linker_test_extension.h | 2 +- 9 files changed, 12 insertions(+), 5 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..fc6016499e 100644 --- a/static_core/plugins/ets/runtime/ets_class_linker_extension.cpp +++ b/static_core/plugins/ets/runtime/ets_class_linker_extension.cpp @@ -203,7 +203,8 @@ bool EtsClassLinkerExtension::InitializeArrayClass(Class *arrayClass, Class *com return true; } -bool EtsClassLinkerExtension::InitializeClass(Class *klass) +// zzm +bool EtsClassLinkerExtension::InitializeClass(Class *klass, [[maybe_unused]] ClassLinkerErrorHandler *errorHandler) { ASSERT(IsInitialized()); ASSERT_HAVE_ACCESS_TO_MANAGED_OBJECTS(); 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..01fcde8817 100644 --- a/static_core/plugins/ets/runtime/ets_class_linker_extension.h +++ b/static_core/plugins/ets/runtime/ets_class_linker_extension.h @@ -69,7 +69,7 @@ public: void InitializeClassRoots(); - bool InitializeClass(Class *klass) override; + bool InitializeClass(Class *klass, ClassLinkerErrorHandler *errorHandler = nullptr) override; bool IsMethodNativeApi(const Method *method) const override; diff --git a/static_core/plugins/ets/runtime/types/ets_class.cpp b/static_core/plugins/ets/runtime/types/ets_class.cpp index ca06a88b58..7b610aaba1 100644 --- a/static_core/plugins/ets/runtime/types/ets_class.cpp +++ b/static_core/plugins/ets/runtime/types/ets_class.cpp @@ -421,6 +421,7 @@ static bool HasFunctionTypeInSuperClasses(EtsClass *cls) return false; } +// zzm void EtsClass::Initialize(EtsClass *superClass, uint16_t accessFlags, bool isPrimitiveType) { ASSERT_HAVE_ACCESS_TO_MANAGED_OBJECTS(); diff --git a/static_core/plugins/ets/runtime/types/ets_class.h b/static_core/plugins/ets/runtime/types/ets_class.h index 1f7f9a0a17..2515da3eae 100644 --- a/static_core/plugins/ets/runtime/types/ets_class.h +++ b/static_core/plugins/ets/runtime/types/ets_class.h @@ -609,6 +609,7 @@ private: FIELD_UNUSED ObjectPointer name_; // String FIELD_UNUSED ObjectPointer superClass_; // Class FIELD_UNUSED uint32_t flags_; + FIELD_UNUSED uint32_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/class_linker.cpp b/static_core/runtime/class_linker.cpp index cad9d9876e..56278b8726 100644 --- a/static_core/runtime/class_linker.cpp +++ b/static_core/runtime/class_linker.cpp @@ -1051,6 +1051,7 @@ Class *ClassLinker::LoadClass(const panda_file::File *pf, panda_file::File::Enti Runtime::GetCurrent()->GetCha()->Update(klass); if (LIKELY(ext->CanInitializeClasses())) { + // zzm if (!ext->InitializeClass(klass)) { LOG(ERROR, CLASS_LINKER) << "Language specific initialization for class '" << descriptor << "' failed"; FreeClass(klass); diff --git a/static_core/runtime/core/core_class_linker_extension.h b/static_core/runtime/core/core_class_linker_extension.h index 24ba66eed8..c153d167dc 100644 --- a/static_core/runtime/core/core_class_linker_extension.h +++ b/static_core/runtime/core/core_class_linker_extension.h @@ -46,7 +46,8 @@ public: void FreeClass(Class *klass) override; - bool InitializeClass([[maybe_unused]] Class *klass) override + bool InitializeClass([[maybe_unused]] Class *klass, + [[maybe_unused]]ClassLinkerErrorHandler *handler = nullptr) override { return true; } diff --git a/static_core/runtime/include/class_linker_extension.h b/static_core/runtime/include/class_linker_extension.h index 787ad45c33..e0645a6030 100644 --- a/static_core/runtime/include/class_linker_extension.h +++ b/static_core/runtime/include/class_linker_extension.h @@ -60,7 +60,8 @@ public: virtual void FreeClass(Class *klass) = 0; - virtual bool InitializeClass(Class *klass) = 0; + // zzm + virtual bool InitializeClass(Class *klass, ClassLinkerErrorHandler *handler = nullptr) = 0; virtual const void *GetNativeEntryPointFor(Method *method) const = 0; diff --git a/static_core/runtime/tests/class_linker_test_extension.h b/static_core/runtime/tests/class_linker_test_extension.h index a2e9af5410..2140012b95 100644 --- a/static_core/runtime/tests/class_linker_test_extension.h +++ b/static_core/runtime/tests/class_linker_test_extension.h @@ -99,7 +99,7 @@ public: RemoveCreatedClass(klass); } - bool InitializeClass(Class * /*klass*/) override + bool InitializeClass(Class * /*klass*/, ClassLinkerErrorHandler * /* */) override { return true; } -- Gitee