• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef PANDA_RUNTIME_CORE_CORE_CLASS_LINKER_EXTENSION_H_
16 #define PANDA_RUNTIME_CORE_CORE_CLASS_LINKER_EXTENSION_H_
17 
18 #include "runtime/include/class_linker-inl.h"
19 #include "runtime/include/class_linker_extension.h"
20 
21 namespace ark {
22 
23 class CoreClassLinkerExtension : public ClassLinkerExtension {
24 public:
CoreClassLinkerExtension()25     CoreClassLinkerExtension() : ClassLinkerExtension(panda_file::SourceLang::PANDA_ASSEMBLY) {}
26 
27     ~CoreClassLinkerExtension() override;
28 
29     bool InitializeArrayClass(Class *arrayClass, Class *componentClass) override;
30 
31     void InitializePrimitiveClass(Class *primitiveClass) override;
32 
33     size_t GetClassVTableSize(ClassRoot root) override;
34 
35     size_t GetClassIMTSize(ClassRoot root) override;
36 
37     size_t GetClassSize(ClassRoot root) override;
38 
39     size_t GetArrayClassVTableSize() override;
40 
41     size_t GetArrayClassIMTSize() override;
42 
43     size_t GetArrayClassSize() override;
44 
45     Class *CreateClass(const uint8_t *descriptor, size_t vtableSize, size_t imtSize, size_t size) override;
46 
47     void FreeClass(Class *klass) override;
48 
InitializeClass(Class * klass)49     bool InitializeClass([[maybe_unused]] Class *klass) override
50     {
51         return true;
52     }
53 
GetNativeEntryPointFor(Method * method)54     const void *GetNativeEntryPointFor([[maybe_unused]] Method *method) const override
55     {
56         return reinterpret_cast<const void *>(intrinsics::UnknownIntrinsic);
57     }
58 
CanThrowException(const Method * method)59     bool CanThrowException([[maybe_unused]] const Method *method) const override
60     {
61         return true;
62     }
63 
GetErrorHandler()64     ClassLinkerErrorHandler *GetErrorHandler() override
65     {
66         return &errorHandler_;
67     };
68 
69     NO_COPY_SEMANTIC(CoreClassLinkerExtension);
70     NO_MOVE_SEMANTIC(CoreClassLinkerExtension);
71 
72 private:
73     bool InitializeImpl(bool compressedStringEnabled) override;
74     void InitializeClassRoots(const LanguageContext &ctx);
75 
76     class ErrorHandler : public ClassLinkerErrorHandler {
77     public:
78         void OnError(ClassLinker::Error error, const PandaString &message) override;
79     };
80 
81     ErrorHandler errorHandler_;
82 };
83 
84 }  // namespace ark
85 
86 #endif  // PANDA_RUNTIME_CORE_CORE_CLASS_LINKER_EXTENSION_H_
87