• 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     void InitializeArrayClass(Class *array_class, Class *component_class) override;
30 
31     void InitializePrimitiveClass(Class *primitive_class) 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 vtable_size, size_t imt_size, size_t size) override;
46 
47     void FreeClass(Class *klass) override;
48 
InitializeClass(Class * klass)49     void InitializeClass([[maybe_unused]] Class *klass) override {}
50 
GetNativeEntryPointFor(Method * method)51     const void *GetNativeEntryPointFor([[maybe_unused]] Method *method) const override
52     {
53         return reinterpret_cast<const void *>(intrinsics::UnknownIntrinsic);
54     }
55 
CanThrowException(const Method * method)56     bool CanThrowException([[maybe_unused]] const Method *method) const override
57     {
58         return true;
59     }
60 
GetErrorHandler()61     ClassLinkerErrorHandler *GetErrorHandler() override
62     {
63         return &error_handler_;
64     };
65 
66     NO_COPY_SEMANTIC(CoreClassLinkerExtension);
67     NO_MOVE_SEMANTIC(CoreClassLinkerExtension);
68 
69 private:
70     bool InitializeImpl(bool compressed_string_enabled) override;
71 
72     class ErrorHandler : public ClassLinkerErrorHandler {
73     public:
74         void OnError(ClassLinker::Error error, const PandaString &message) override;
75     };
76 
77     ErrorHandler error_handler_;
78 };
79 
80 }  // namespace panda
81 
82 #endif  // PANDA_RUNTIME_CORE_CORE_CLASS_LINKER_EXTENSION_H_
83