24
25 #ifndef SHARE_VM_CI_CIKLASS_HPP
26 #define SHARE_VM_CI_CIKLASS_HPP
27
28 #include "ci/ciType.hpp"
29
30 // ciKlass
31 //
32 // This class and its subclasses represent Klass*s in the
33 // HotSpot virtual machine. In the vm, each Klass* contains an
34 // embedded Klass object. ciKlass is subclassed to explicitly
35 // represent the kind of Klass embedded in the Klass*. For
36 // example, a Klass* with an embedded ObjArrayKlass object is
37 // represented in the ciObject hierarchy by the class
38 // ciObjArrayKlass.
39 class ciKlass : public ciType {
40 CI_PACKAGE_ACCESS
41 friend class ciEnv;
42 friend class ciField;
43 friend class ciMethod;
44 friend class ciObjArrayKlass;
45
46 private:
47 ciSymbol* _name;
48 jint _layout_helper;
49
50 protected:
51 ciKlass(KlassHandle k_h, ciSymbol* name);
52 ciKlass(ciSymbol* name, BasicType bt);
53
54 Klass* get_Klass() const {
55 Klass* k = (Klass*)_metadata;
56 assert(k != NULL, "illegal use of unloaded klass");
57 return k;
58 }
59
60 // Certain subklasses have an associated class loader.
61 virtual oop loader() { return NULL; }
62 virtual jobject loader_handle() { return NULL; }
63
103 virtual bool is_leaf_type() {
104 return false;
105 }
106
107 // Attempt to get a klass using this ciKlass's loader.
108 ciKlass* find_klass(ciSymbol* klass_name);
109 // Note: To find a class from its name string, use ciSymbol::make,
110 // but consider adding to vmSymbols.hpp instead.
111
112 // Get the instance of java.lang.Class corresponding to this klass.
113 ciInstance* java_mirror();
114
115 // Fetch Klass::modifier_flags.
116 jint modifier_flags();
117
118 // Fetch Klass::access_flags.
119 jint access_flags();
120
121 // What kind of ciObject is this?
122 bool is_klass() const { return true; }
123
124 void print_name_on(outputStream* st);
125 };
126
127 #endif // SHARE_VM_CI_CIKLASS_HPP
|
24
25 #ifndef SHARE_VM_CI_CIKLASS_HPP
26 #define SHARE_VM_CI_CIKLASS_HPP
27
28 #include "ci/ciType.hpp"
29
30 // ciKlass
31 //
32 // This class and its subclasses represent Klass*s in the
33 // HotSpot virtual machine. In the vm, each Klass* contains an
34 // embedded Klass object. ciKlass is subclassed to explicitly
35 // represent the kind of Klass embedded in the Klass*. For
36 // example, a Klass* with an embedded ObjArrayKlass object is
37 // represented in the ciObject hierarchy by the class
38 // ciObjArrayKlass.
39 class ciKlass : public ciType {
40 CI_PACKAGE_ACCESS
41 friend class ciEnv;
42 friend class ciField;
43 friend class ciMethod;
44 friend class ciMethodData;
45 friend class ciObjArrayKlass;
46
47 private:
48 ciSymbol* _name;
49 jint _layout_helper;
50
51 protected:
52 ciKlass(KlassHandle k_h, ciSymbol* name);
53 ciKlass(ciSymbol* name, BasicType bt);
54
55 Klass* get_Klass() const {
56 Klass* k = (Klass*)_metadata;
57 assert(k != NULL, "illegal use of unloaded klass");
58 return k;
59 }
60
61 // Certain subklasses have an associated class loader.
62 virtual oop loader() { return NULL; }
63 virtual jobject loader_handle() { return NULL; }
64
104 virtual bool is_leaf_type() {
105 return false;
106 }
107
108 // Attempt to get a klass using this ciKlass's loader.
109 ciKlass* find_klass(ciSymbol* klass_name);
110 // Note: To find a class from its name string, use ciSymbol::make,
111 // but consider adding to vmSymbols.hpp instead.
112
113 // Get the instance of java.lang.Class corresponding to this klass.
114 ciInstance* java_mirror();
115
116 // Fetch Klass::modifier_flags.
117 jint modifier_flags();
118
119 // Fetch Klass::access_flags.
120 jint access_flags();
121
122 // What kind of ciObject is this?
123 bool is_klass() const { return true; }
124
125 virtual ciKlass* exact_klass() = 0;
126
127 void print_name_on(outputStream* st);
128 };
129
130 #endif // SHARE_VM_CI_CIKLASS_HPP
|