annotate src/share/vm/oops/fieldStreams.hpp @ 6862:8a5ea0a9ccc4

7127708: G1: change task num types from int to uint in concurrent mark Summary: Change the type of various task num fields, parameters etc to unsigned and rename them to be more consistent with the other collectors. Code changes were also reviewed by Vitaly Davidovich. Reviewed-by: johnc Contributed-by: Kaushik Srenevasan <kaushik@twitter.com>
author johnc
date Sat, 06 Oct 2012 01:17:44 -0700
parents da91efe96a93
children 4a916f2ce331
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
1 /*
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
2 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
4 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
7 * published by the Free Software Foundation.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
8 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
13 * accompanied this code).
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
14 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
18 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
21 * questions.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
22 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
23 */
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
24
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
25 #ifndef SHARE_VM_OOPS_FIELDSTREAMS_HPP
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
26 #define SHARE_VM_OOPS_FIELDSTREAMS_HPP
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
27
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
28 #include "oops/instanceKlass.hpp"
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
29 #include "oops/fieldInfo.hpp"
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
30
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
31 // The is the base class for iteration over the fields array
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
32 // describing the declared fields in the class. Several subclasses
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
33 // are provided depending on the kind of iteration required. The
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
34 // JavaFieldStream is for iterating over regular Java fields and it
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
35 // generally the preferred iterator. InternalFieldStream only
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
36 // iterates over fields that have been injected by the JVM.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
37 // AllFieldStream exposes all fields and should only be used in rare
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
38 // cases.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
39 class FieldStreamBase : public StackObj {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
40 protected:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
41 Array<u2>* _fields;
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
42 constantPoolHandle _constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
43 int _index;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
44 int _limit;
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
45 int _generic_signature_slot;
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
46
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
47 FieldInfo* field() const { return FieldInfo::from_field_array(_fields, _index); }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
48
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
49 int init_generic_signature_start_slot() {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
50 int length = _fields->length();
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
51 int num_fields = 0;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
52 int skipped_generic_signature_slots = 0;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
53 FieldInfo* fi;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
54 AccessFlags flags;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
55 /* Scan from 0 to the current _index. Count the number of generic
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
56 signature slots for field[0] to field[_index - 1]. */
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
57 for (int i = 0; i < _index; i++) {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
58 fi = FieldInfo::from_field_array(_fields, i);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
59 flags.set_flags(fi->access_flags());
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
60 if (flags.field_has_generic_signature()) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
61 length --;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
62 skipped_generic_signature_slots ++;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
63 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
64 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
65 /* Scan from the current _index. */
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
66 for (int i = _index; i*FieldInfo::field_slots < length; i++) {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
67 fi = FieldInfo::from_field_array(_fields, i);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
68 flags.set_flags(fi->access_flags());
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
69 if (flags.field_has_generic_signature()) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
70 length --;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
71 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
72 num_fields ++;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
73 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
74 _generic_signature_slot = length + skipped_generic_signature_slots;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
75 assert(_generic_signature_slot <= _fields->length(), "");
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
76 return num_fields;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
77 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
78
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
79 FieldStreamBase(Array<u2>* fields, constantPoolHandle constants, int start, int limit) {
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
80 _fields = fields;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
81 _constants = constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
82 _index = start;
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
83 int num_fields = init_generic_signature_start_slot();
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
84 if (limit < start) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
85 _limit = num_fields;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
86 } else {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
87 _limit = limit;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
88 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
89 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
90
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
91 FieldStreamBase(Array<u2>* fields, constantPoolHandle constants) {
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
92 _fields = fields;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
93 _constants = constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
94 _index = 0;
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
95 _limit = init_generic_signature_start_slot();
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
96 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
97
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
98 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
99 FieldStreamBase(InstanceKlass* klass) {
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
100 _fields = klass->fields();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
101 _constants = klass->constants();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
102 _index = 0;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
103 _limit = klass->java_fields_count();
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
104 init_generic_signature_start_slot();
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
105 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
106 FieldStreamBase(instanceKlassHandle klass) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
107 _fields = klass->fields();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
108 _constants = klass->constants();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
109 _index = 0;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
110 _limit = klass->java_fields_count();
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
111 init_generic_signature_start_slot();
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
112 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
113
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
114 // accessors
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
115 int index() const { return _index; }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
116
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
117 void next() {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
118 if (access_flags().field_has_generic_signature()) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
119 _generic_signature_slot ++;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
120 assert(_generic_signature_slot <= _fields->length(), "");
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
121 }
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
122 _index += 1;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
123 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
124 bool done() const { return _index >= _limit; }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
125
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
126 // Accessors for current field
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
127 AccessFlags access_flags() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
128 AccessFlags flags;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
129 flags.set_flags(field()->access_flags());
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
130 return flags;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
131 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
132
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
133 void set_access_flags(u2 flags) const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
134 field()->set_access_flags(flags);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
135 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
136
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
137 void set_access_flags(AccessFlags flags) const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
138 set_access_flags(flags.as_short());
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
139 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
140
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
141 Symbol* name() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
142 return field()->name(_constants);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
143 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
144
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
145 Symbol* signature() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
146 return field()->signature(_constants);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
147 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
148
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
149 Symbol* generic_signature() const {
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
150 if (access_flags().field_has_generic_signature()) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
151 assert(_generic_signature_slot < _fields->length(), "out of bounds");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
152 int index = _fields->at(_generic_signature_slot);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
153 return _constants->symbol_at(index);
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
154 } else {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
155 return NULL;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
156 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
157 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
158
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
159 int offset() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
160 return field()->offset();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
161 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
162
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
163 void set_offset(int offset) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
164 field()->set_offset(offset);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
165 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
166 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
167
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
168 // Iterate over only the internal fields
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
169 class JavaFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
170 public:
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
171 JavaFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
172
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
173 int name_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
174 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
175 return field()->name_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
176 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
177 void set_name_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
178 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
179 field()->set_name_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
180 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
181 int signature_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
182 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
183 return field()->signature_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
184 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
185 void set_signature_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
186 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
187 field()->set_signature_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
188 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
189 int generic_signature_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
190 assert(!field()->is_internal(), "regular only");
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
191 if (access_flags().field_has_generic_signature()) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
192 assert(_generic_signature_slot < _fields->length(), "out of bounds");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
193 return _fields->at(_generic_signature_slot);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
194 } else {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
195 return 0;
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
196 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
197 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
198 void set_generic_signature_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
199 assert(!field()->is_internal(), "regular only");
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
200 if (access_flags().field_has_generic_signature()) {
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
201 assert(_generic_signature_slot < _fields->length(), "out of bounds");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
202 _fields->at_put(_generic_signature_slot, index);
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
203 }
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
204 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
205 int initval_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
206 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
207 return field()->initval_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
208 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
209 void set_initval_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
210 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
211 return field()->set_initval_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
212 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
213 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
214
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
215
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
216 // Iterate over only the internal fields
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
217 class InternalFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
218 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
219 InternalFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {}
6100
71afdabfd05b 7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents: 3938
diff changeset
220 InternalFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {}
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
221 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
222
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
223
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
224 class AllFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
225 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
226 AllFieldStream(Array<u2>* fields, constantPoolHandle constants): FieldStreamBase(fields, constants) {}
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6100
diff changeset
227 AllFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {}
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
228 AllFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
229 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
230
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
231 #endif // SHARE_VM_OOPS_FIELDSTREAMS_HPP