14dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien/* 24dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * Copyright (C) 2012 The Android Open Source Project 34dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * 44dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * Licensed under the Apache License, Version 2.0 (the "License"); 54dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * you may not use this file except in compliance with the License. 64dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * You may obtain a copy of the License at 74dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * 84dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * http://www.apache.org/licenses/LICENSE-2.0 94dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * 104dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * Unless required by applicable law or agreed to in writing, software 114dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * distributed under the License is distributed on an "AS IS" BASIS, 124dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * See the License for the specific language governing permissions and 144dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien * limitations under the License. 154dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien */ 164dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_COMPILER_DRIVER_DEX_COMPILATION_UNIT_H_ 18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_COMPILER_DRIVER_DEX_COMPILATION_UNIT_H_ 194dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 204dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien#include <stdint.h> 214dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 22736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier#include "base/arena_object.h" 23265091e581c9f643b37e7966890911f09e223269Brian Carlstrom#include "dex_file.h" 24736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier#include "handle.h" 25265091e581c9f643b37e7966890911f09e223269Brian Carlstrom#include "jni.h" 26265091e581c9f643b37e7966890911f09e223269Brian Carlstrom 274dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chiennamespace art { 282dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersnamespace mirror { 294dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chienclass ClassLoader; 302dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersclass DexCache; 312dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers} // namespace mirror 324dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chienclass ClassLinker; 332730db03beee4d6687ddfb5000c33c0370fbc6ebVladimir Markoclass VerifiedMethod; 344dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 35c91df2d6339dd4adf2da582372451df19ce2ff44Vladimir Markoclass DexCompilationUnit : public DeletableArenaObject<kArenaAllocMisc> { 364dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien public: 37df739841b781dbd49c247e3795696389c4799020Vladimir Marko DexCompilationUnit(jobject class_loader, 38736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier ClassLinker* class_linker, 39736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier const DexFile& dex_file, 40736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier const DexFile::CodeItem* code_item, 41736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier uint16_t class_def_idx, 42736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier uint32_t method_idx, 43736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier uint32_t access_flags, 44736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier const VerifiedMethod* verified_method, 45736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier Handle<mirror::DexCache> dex_cache); 46265091e581c9f643b37e7966890911f09e223269Brian Carlstrom 4700f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers jobject GetClassLoader() const { 48dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien return class_loader_; 49dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien } 50dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien 51dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien ClassLinker* GetClassLinker() const { 52dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien return class_linker_; 53dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien } 54dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien 55dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien const DexFile* GetDexFile() const { 56dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien return dex_file_; 57dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien } 58dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien 59ee39a10e45a6a0880e8b829525c40d6055818560Ian Rogers uint16_t GetClassDefIndex() const { 60dc5daa0db249f8cfb8290bc8f7068cb2a0383393TDYa return class_def_idx_; 61dc5daa0db249f8cfb8290bc8f7068cb2a0383393TDYa } 62dc5daa0db249f8cfb8290bc8f7068cb2a0383393TDYa 63dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien uint32_t GetDexMethodIndex() const { 6489756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers return dex_method_idx_; 65dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien } 66dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien 67dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien const DexFile::CodeItem* GetCodeItem() const { 68dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien return code_item_; 69dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien } 70dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien 71bfe4ea4463848ccb91e0848d35d79539d52c627aLogan Chien const char* GetShorty() const { 7289756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers const DexFile::MethodId& method_id = dex_file_->GetMethodId(dex_method_idx_); 7361c65dc8a86545b3f6a3daaa360ad73ce97e7b0eLogan Chien return dex_file_->GetMethodShorty(method_id); 7461c65dc8a86545b3f6a3daaa360ad73ce97e7b0eLogan Chien } 7561c65dc8a86545b3f6a3daaa360ad73ce97e7b0eLogan Chien 76bfe4ea4463848ccb91e0848d35d79539d52c627aLogan Chien const char* GetShorty(uint32_t* shorty_len) const { 7789756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers const DexFile::MethodId& method_id = dex_file_->GetMethodId(dex_method_idx_); 7861c65dc8a86545b3f6a3daaa360ad73ce97e7b0eLogan Chien return dex_file_->GetMethodShorty(method_id, shorty_len); 7961c65dc8a86545b3f6a3daaa360ad73ce97e7b0eLogan Chien } 8061c65dc8a86545b3f6a3daaa360ad73ce97e7b0eLogan Chien 8189756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers uint32_t GetAccessFlags() const { 8289756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers return access_flags_; 8389756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers } 8489756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers 85a49bdffd3826ea45b5d8f435b2add160871351bbIan Rogers bool IsConstructor() const { 86a49bdffd3826ea45b5d8f435b2add160871351bbIan Rogers return ((access_flags_ & kAccConstructor) != 0); 87a49bdffd3826ea45b5d8f435b2add160871351bbIan Rogers } 88a49bdffd3826ea45b5d8f435b2add160871351bbIan Rogers 8989756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers bool IsNative() const { 9089756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers return ((access_flags_ & kAccNative) != 0); 9189756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers } 9289756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers 93dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien bool IsStatic() const { 94dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien return ((access_flags_ & kAccStatic) != 0); 95dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien } 96dd361c9eab3284e76e2d07c2e7d371b0f5269942Logan Chien 9789756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers bool IsSynchronized() const { 9889756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers return ((access_flags_ & kAccSynchronized) != 0); 9989756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers } 10089756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers 1012730db03beee4d6687ddfb5000c33c0370fbc6ebVladimir Marko const VerifiedMethod* GetVerifiedMethod() const { 1022730db03beee4d6687ddfb5000c33c0370fbc6ebVladimir Marko return verified_method_; 1032730db03beee4d6687ddfb5000c33c0370fbc6ebVladimir Marko } 1042730db03beee4d6687ddfb5000c33c0370fbc6ebVladimir Marko 105ab972ef472001fa113d54486d7592979e33480b3Mathieu Chartier void ClearVerifiedMethod() { 106ab972ef472001fa113d54486d7592979e33480b3Mathieu Chartier verified_method_ = nullptr; 107ab972ef472001fa113d54486d7592979e33480b3Mathieu Chartier } 108ab972ef472001fa113d54486d7592979e33480b3Mathieu Chartier 1091bf8d4dbe5cb9891e8a1125ff1928b544efc243aIan Rogers const std::string& GetSymbol(); 110265091e581c9f643b37e7966890911f09e223269Brian Carlstrom 111736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier Handle<mirror::DexCache> GetDexCache() const { 112736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier return dex_cache_; 113736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier } 114736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier 11589756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers private: 11689756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers const jobject class_loader_; 117265091e581c9f643b37e7966890911f09e223269Brian Carlstrom 11800f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers ClassLinker* const class_linker_; 1194dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 12000f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers const DexFile* const dex_file_; 1214dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 12200f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers const DexFile::CodeItem* const code_item_; 123ee39a10e45a6a0880e8b829525c40d6055818560Ian Rogers const uint16_t class_def_idx_; 12489756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers const uint32_t dex_method_idx_; 12500f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers const uint32_t access_flags_; 126ab972ef472001fa113d54486d7592979e33480b3Mathieu Chartier const VerifiedMethod* verified_method_; 127265091e581c9f643b37e7966890911f09e223269Brian Carlstrom 128736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier Handle<mirror::DexCache> dex_cache_; 129736b560f2d2c89b63dc895888c671b5519afa4c8Mathieu Chartier 1301bf8d4dbe5cb9891e8a1125ff1928b544efc243aIan Rogers std::string symbol_; 1314dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien}; 1324dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 1337934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom} // namespace art 1344dd96f56909ec35c83a3d468b0e47769988c1a1dLogan Chien 135fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif // ART_COMPILER_DRIVER_DEX_COMPILATION_UNIT_H_ 136