• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2021-2022 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 panda {
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 
75     class ErrorHandler : public ClassLinkerErrorHandler {
76     public:
77         void OnError(ClassLinker::Error error, const PandaString &message) override;
78     };
79 
80     ErrorHandler errorHandler_;
81 };
82 
83 }  // namespace panda
84 
85 #endif  // PANDA_RUNTIME_CORE_CORE_CLASS_LINKER_EXTENSION_H