51 // This allows non-static field lists to be cached on shared types.
52 // Because the _type field is lazily initialized, however, there is a
53 // special restriction that a shared field cannot cache an unshared type.
54 // This puts a small performance penalty on shared fields with unshared
55 // types, such as StackTraceElement[] Throwable.stackTrace.
56 // (Throwable is shared because ClassCastException is shared, but
57 // StackTraceElement is not presently shared.)
58
59 // It is not a vicious circularity for a ciField to recursively create
60 // the ciSymbols necessary to represent its name and signature.
61 // Therefore, these items are created eagerly, and the name and signature
62 // of a shared field are themselves shared symbols. This somewhat
63 // pollutes the set of shared CI objects: It grows from 50 to 93 items,
64 // with all of the additional 43 being uninteresting shared ciSymbols.
65 // This adds at most one step to the binary search, an amount which
66 // decreases for complex compilation tasks.
67
68 // ------------------------------------------------------------------
69 // ciField::ciField
70 ciField::ciField(ciInstanceKlass* klass, int index) :
71 _known_to_link_with_put(NULL), _known_to_link_with_get(NULL) {
72 ASSERT_IN_VM;
73 CompilerThread *THREAD = CompilerThread::current();
74
75 assert(ciObjectFactory::is_initialized(), "not a shared field");
76
77 assert(klass->get_instanceKlass()->is_linked(), "must be linked before using its constant-pool");
78
79 constantPoolHandle cpool(THREAD, klass->get_instanceKlass()->constants());
80
81 // Get the field's name, signature, and type.
82 Symbol* name = cpool->name_ref_at(index);
83 _name = ciEnv::current(THREAD)->get_symbol(name);
84
85 int nt_index = cpool->name_and_type_ref_index_at(index);
86 int sig_index = cpool->signature_ref_index_at(nt_index);
87 Symbol* signature = cpool->symbol_at(sig_index);
88 _signature = ciEnv::current(THREAD)->get_symbol(signature);
89
90 BasicType field_type = FieldType::basic_type(signature);
91
|
51 // This allows non-static field lists to be cached on shared types.
52 // Because the _type field is lazily initialized, however, there is a
53 // special restriction that a shared field cannot cache an unshared type.
54 // This puts a small performance penalty on shared fields with unshared
55 // types, such as StackTraceElement[] Throwable.stackTrace.
56 // (Throwable is shared because ClassCastException is shared, but
57 // StackTraceElement is not presently shared.)
58
59 // It is not a vicious circularity for a ciField to recursively create
60 // the ciSymbols necessary to represent its name and signature.
61 // Therefore, these items are created eagerly, and the name and signature
62 // of a shared field are themselves shared symbols. This somewhat
63 // pollutes the set of shared CI objects: It grows from 50 to 93 items,
64 // with all of the additional 43 being uninteresting shared ciSymbols.
65 // This adds at most one step to the binary search, an amount which
66 // decreases for complex compilation tasks.
67
68 // ------------------------------------------------------------------
69 // ciField::ciField
70 ciField::ciField(ciInstanceKlass* klass, int index) :
71 _is_flattened(false), _known_to_link_with_put(NULL), _known_to_link_with_get(NULL) {
72 ASSERT_IN_VM;
73 CompilerThread *THREAD = CompilerThread::current();
74
75 assert(ciObjectFactory::is_initialized(), "not a shared field");
76
77 assert(klass->get_instanceKlass()->is_linked(), "must be linked before using its constant-pool");
78
79 constantPoolHandle cpool(THREAD, klass->get_instanceKlass()->constants());
80
81 // Get the field's name, signature, and type.
82 Symbol* name = cpool->name_ref_at(index);
83 _name = ciEnv::current(THREAD)->get_symbol(name);
84
85 int nt_index = cpool->name_and_type_ref_index_at(index);
86 int sig_index = cpool->signature_ref_index_at(nt_index);
87 Symbol* signature = cpool->symbol_at(sig_index);
88 _signature = ciEnv::current(THREAD)->get_symbol(signature);
89
90 BasicType field_type = FieldType::basic_type(signature);
91
|