1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker #ifndef ART_RUNTIME_MIRROR_CLASS_FLAGS_H_ 18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_MIRROR_CLASS_FLAGS_H_ 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker #include <stdint.h> 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker #include "base/macros.h" 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN { 25*795d594fSAndroid Build Coastguard Worker namespace mirror { 26*795d594fSAndroid Build Coastguard Worker 27*795d594fSAndroid Build Coastguard Worker // Normal instance with at least one ref field other than the class. 28*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagNormal = 0x00000000; 29*795d594fSAndroid Build Coastguard Worker 30*795d594fSAndroid Build Coastguard Worker // Only normal objects which have no reference fields, e.g. string or primitive array or normal 31*795d594fSAndroid Build Coastguard Worker // class instance with no fields other than klass. 32*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagNoReferenceFields = 0x00000001; 33*795d594fSAndroid Build Coastguard Worker 34*795d594fSAndroid Build Coastguard Worker // Class is java.lang.String.class. 35*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagString = 0x00000004; 36*795d594fSAndroid Build Coastguard Worker 37*795d594fSAndroid Build Coastguard Worker // Class is an object array class. 38*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagObjectArray = 0x00000008; 39*795d594fSAndroid Build Coastguard Worker 40*795d594fSAndroid Build Coastguard Worker // Class is java.lang.Class.class. 41*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagClass = 0x00000010; 42*795d594fSAndroid Build Coastguard Worker 43*795d594fSAndroid Build Coastguard Worker // Class is ClassLoader or one of its subclasses. 44*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagClassLoader = 0x00000020; 45*795d594fSAndroid Build Coastguard Worker 46*795d594fSAndroid Build Coastguard Worker // Class is DexCache. 47*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagDexCache = 0x00000040; 48*795d594fSAndroid Build Coastguard Worker 49*795d594fSAndroid Build Coastguard Worker // Class is a soft/weak/phantom class. 50*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagSoftReference = 0x00000080; 51*795d594fSAndroid Build Coastguard Worker 52*795d594fSAndroid Build Coastguard Worker // Class is a weak reference class. 53*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagWeakReference = 0x00000100; 54*795d594fSAndroid Build Coastguard Worker 55*795d594fSAndroid Build Coastguard Worker // Class is a finalizer reference class. 56*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagFinalizerReference = 0x00000200; 57*795d594fSAndroid Build Coastguard Worker 58*795d594fSAndroid Build Coastguard Worker // Class is the phantom reference class. 59*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagPhantomReference = 0x00000400; 60*795d594fSAndroid Build Coastguard Worker 61*795d594fSAndroid Build Coastguard Worker // Class is a record class. See doc at java.lang.Class#isRecord(). 62*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagRecord = 0x00000800; 63*795d594fSAndroid Build Coastguard Worker 64*795d594fSAndroid Build Coastguard Worker // Class is a primitive array class. 65*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagPrimitiveArray = 0x00001000; 66*795d594fSAndroid Build Coastguard Worker 67*795d594fSAndroid Build Coastguard Worker // NOTE: The most significant 2 bits are used to store the component size shift 68*795d594fSAndroid Build Coastguard Worker // for arrays (both primitive and object). See Primitive::ComponentSizeShift() 69*795d594fSAndroid Build Coastguard Worker // for size shift of different types. 70*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kArrayComponentSizeShiftShift = 30; 71*795d594fSAndroid Build Coastguard Worker 72*795d594fSAndroid Build Coastguard Worker // Combination of flags to figure out if the class is either the weak/soft/phantom/finalizer 73*795d594fSAndroid Build Coastguard Worker // reference class. 74*795d594fSAndroid Build Coastguard Worker static constexpr uint32_t kClassFlagReference = 75*795d594fSAndroid Build Coastguard Worker kClassFlagSoftReference | 76*795d594fSAndroid Build Coastguard Worker kClassFlagWeakReference | 77*795d594fSAndroid Build Coastguard Worker kClassFlagFinalizerReference | 78*795d594fSAndroid Build Coastguard Worker kClassFlagPhantomReference; 79*795d594fSAndroid Build Coastguard Worker 80*795d594fSAndroid Build Coastguard Worker } // namespace mirror 81*795d594fSAndroid Build Coastguard Worker } // namespace art 82*795d594fSAndroid Build Coastguard Worker 83*795d594fSAndroid Build Coastguard Worker #endif // ART_RUNTIME_MIRROR_CLASS_FLAGS_H_ 84*795d594fSAndroid Build Coastguard Worker 85