annotate src/share/vm/classfile/javaClasses.hpp @ 2607:008adfd6d850

Fixed the stateBefore of invokes and monitorenter instructions to include the arguments of the instruction. This is necessary to ensure correct continuation in the interpreter when the stateBefore is used as a deoptimization point.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Fri, 06 May 2011 17:47:17 +0200
parents 352622fd140a
children 01147d8aac1d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1507
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1507
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1507
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
25 #ifndef SHARE_VM_CLASSFILE_JAVACLASSES_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
26 #define SHARE_VM_CLASSFILE_JAVACLASSES_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
28 #include "classfile/systemDictionary.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
29 #include "jvmtifiles/jvmti.h"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
30 #include "oops/oop.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
31 #include "runtime/os.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
32 #include "utilities/utf8.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
33
0
a61af66fc99e Initial load
duke
parents:
diff changeset
34 // Interface for manipulating the basic Java classes.
a61af66fc99e Initial load
duke
parents:
diff changeset
35 //
a61af66fc99e Initial load
duke
parents:
diff changeset
36 // All dependencies on layout of actual Java classes should be kept here.
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // If the layout of any of the classes above changes the offsets must be adjusted.
a61af66fc99e Initial load
duke
parents:
diff changeset
38 //
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // For most classes we hardwire the offsets for performance reasons. In certain
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // cases (e.g. java.security.AccessControlContext) we compute the offsets at
a61af66fc99e Initial load
duke
parents:
diff changeset
41 // startup since the layout here differs between JDK1.2 and JDK1.3.
a61af66fc99e Initial load
duke
parents:
diff changeset
42 //
a61af66fc99e Initial load
duke
parents:
diff changeset
43 // Note that fields (static and non-static) are arranged with oops before non-oops
a61af66fc99e Initial load
duke
parents:
diff changeset
44 // on a per class basis. The offsets below have to reflect this ordering.
a61af66fc99e Initial load
duke
parents:
diff changeset
45 //
a61af66fc99e Initial load
duke
parents:
diff changeset
46 // When editing the layouts please update the check_offset verification code
a61af66fc99e Initial load
duke
parents:
diff changeset
47 // correspondingly. The names in the enums must be identical to the actual field
a61af66fc99e Initial load
duke
parents:
diff changeset
48 // names in order for the verification code to work.
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50
a61af66fc99e Initial load
duke
parents:
diff changeset
51 // Interface to java.lang.String objects
a61af66fc99e Initial load
duke
parents:
diff changeset
52
a61af66fc99e Initial load
duke
parents:
diff changeset
53 class java_lang_String : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
54 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
55 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
56 hc_value_offset = 0,
132
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
57 hc_offset_offset = 1
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
58 //hc_count_offset = 2 -- not a word-scaled offset
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
59 //hc_hash_offset = 3 -- not a word-scaled offset
0
a61af66fc99e Initial load
duke
parents:
diff changeset
60 };
a61af66fc99e Initial load
duke
parents:
diff changeset
61
a61af66fc99e Initial load
duke
parents:
diff changeset
62 static int value_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
63 static int offset_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
64 static int count_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
65 static int hash_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
66
a61af66fc99e Initial load
duke
parents:
diff changeset
67 static Handle basic_create(int length, bool tenured, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
68 static Handle basic_create_from_unicode(jchar* unicode, int length, bool tenured, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
69
a61af66fc99e Initial load
duke
parents:
diff changeset
70 static void set_value( oop string, typeArrayOop buffer) { string->obj_field_put(value_offset, (oop)buffer); }
a61af66fc99e Initial load
duke
parents:
diff changeset
71 static void set_offset(oop string, int offset) { string->int_field_put(offset_offset, offset); }
a61af66fc99e Initial load
duke
parents:
diff changeset
72 static void set_count( oop string, int count) { string->int_field_put(count_offset, count); }
a61af66fc99e Initial load
duke
parents:
diff changeset
73
a61af66fc99e Initial load
duke
parents:
diff changeset
74 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
75 // Instance creation
a61af66fc99e Initial load
duke
parents:
diff changeset
76 static Handle create_from_unicode(jchar* unicode, int len, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
77 static Handle create_tenured_from_unicode(jchar* unicode, int len, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
78 static oop create_oop_from_unicode(jchar* unicode, int len, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
79 static Handle create_from_str(const char* utf8_str, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
80 static oop create_oop_from_str(const char* utf8_str, TRAPS);
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1989
diff changeset
81 static Handle create_from_symbol(Symbol* symbol, TRAPS);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
82 static Handle create_from_platform_dependent_str(const char* str, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
83 static Handle char_converter(Handle java_string, jchar from_char, jchar to_char, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
84
a61af66fc99e Initial load
duke
parents:
diff changeset
85 static int value_offset_in_bytes() { return value_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
86 static int count_offset_in_bytes() { return count_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
87 static int offset_offset_in_bytes() { return offset_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
88 static int hash_offset_in_bytes() { return hash_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
89
a61af66fc99e Initial load
duke
parents:
diff changeset
90 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
91 static typeArrayOop value(oop java_string) {
a61af66fc99e Initial load
duke
parents:
diff changeset
92 assert(is_instance(java_string), "must be java_string");
a61af66fc99e Initial load
duke
parents:
diff changeset
93 return (typeArrayOop) java_string->obj_field(value_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
94 }
a61af66fc99e Initial load
duke
parents:
diff changeset
95 static int offset(oop java_string) {
a61af66fc99e Initial load
duke
parents:
diff changeset
96 assert(is_instance(java_string), "must be java_string");
a61af66fc99e Initial load
duke
parents:
diff changeset
97 return java_string->int_field(offset_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 }
a61af66fc99e Initial load
duke
parents:
diff changeset
99 static int length(oop java_string) {
a61af66fc99e Initial load
duke
parents:
diff changeset
100 assert(is_instance(java_string), "must be java_string");
a61af66fc99e Initial load
duke
parents:
diff changeset
101 return java_string->int_field(count_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
102 }
a61af66fc99e Initial load
duke
parents:
diff changeset
103 static int utf8_length(oop java_string);
a61af66fc99e Initial load
duke
parents:
diff changeset
104
a61af66fc99e Initial load
duke
parents:
diff changeset
105 // String converters
a61af66fc99e Initial load
duke
parents:
diff changeset
106 static char* as_utf8_string(oop java_string);
1989
017cd8bce8a8 6539281: -Xcheck:jni should validate char* argument to ReleaseStringUTFChars
sla
parents: 1972
diff changeset
107 static char* as_utf8_string(oop java_string, char* buf, int buflen);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
108 static char* as_utf8_string(oop java_string, int start, int len);
22
90f5ddc7297b 6646946: Kernel installation failed on Japanese and Chinese XP SP2 (VM part)
coleenp
parents: 0
diff changeset
109 static char* as_platform_dependent_str(Handle java_string, TRAPS);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
110 static jchar* as_unicode_string(oop java_string, int& length);
a61af66fc99e Initial load
duke
parents:
diff changeset
111
2418
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
112 // Compute the hash value for a java.lang.String object which would
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
113 // contain the characters passed in. This hash value is used for at
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
114 // least two purposes.
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
115 //
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
116 // (a) As the hash value used by the StringTable for bucket selection
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
117 // and comparison (stored in the HashtableEntry structures). This
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
118 // is used in the String.intern() method.
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
119 //
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
120 // (b) As the hash value used by the String object itself, in
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
121 // String.hashCode(). This value is normally calculate in Java code
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
122 // in the String.hashCode method(), but is precomputed for String
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
123 // objects in the shared archive file.
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
124 //
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
125 // For this reason, THIS ALGORITHM MUST MATCH String.hashCode().
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
126 static unsigned int hash_string(jchar* s, int len) {
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
127 unsigned int h = 0;
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
128 while (len-- > 0) {
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
129 h = 31*h + (unsigned int) *s;
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
130 s++;
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
131 }
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
132 return h;
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
133 }
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
134 static unsigned int hash_string(oop java_string);
352622fd140a 7032129: Native memory usage grow unexpectedly for vm/oom/*InternedString tests
never
parents: 2376
diff changeset
135
0
a61af66fc99e Initial load
duke
parents:
diff changeset
136 static bool equals(oop java_string, jchar* chars, int len);
a61af66fc99e Initial load
duke
parents:
diff changeset
137
a61af66fc99e Initial load
duke
parents:
diff changeset
138 // Conversion between '.' and '/' formats
a61af66fc99e Initial load
duke
parents:
diff changeset
139 static Handle externalize_classname(Handle java_string, TRAPS) { return char_converter(java_string, '/', '.', THREAD); }
a61af66fc99e Initial load
duke
parents:
diff changeset
140 static Handle internalize_classname(Handle java_string, TRAPS) { return char_converter(java_string, '.', '/', THREAD); }
a61af66fc99e Initial load
duke
parents:
diff changeset
141
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // Conversion
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1989
diff changeset
143 static Symbol* as_symbol(Handle java_string, TRAPS);
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1989
diff changeset
144 static Symbol* as_symbol_or_null(oop java_string);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
145
a61af66fc99e Initial load
duke
parents:
diff changeset
146 // Testers
a61af66fc99e Initial load
duke
parents:
diff changeset
147 static bool is_instance(oop obj) {
1142
4ce7240d622c 6914300: ciEnv should export all well known classes
never
parents: 1135
diff changeset
148 return obj != NULL && obj->klass() == SystemDictionary::String_klass();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
149 }
a61af66fc99e Initial load
duke
parents:
diff changeset
150
a61af66fc99e Initial load
duke
parents:
diff changeset
151 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
152 static void print(Handle java_string, outputStream* st);
a61af66fc99e Initial load
duke
parents:
diff changeset
153 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
154 };
a61af66fc99e Initial load
duke
parents:
diff changeset
155
a61af66fc99e Initial load
duke
parents:
diff changeset
156
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // Interface to java.lang.Class objects
a61af66fc99e Initial load
duke
parents:
diff changeset
158
a61af66fc99e Initial load
duke
parents:
diff changeset
159 class java_lang_Class : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
160 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
161 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
162 // The fake offsets are added by the class loader when java.lang.Class is loaded
a61af66fc99e Initial load
duke
parents:
diff changeset
163
a61af66fc99e Initial load
duke
parents:
diff changeset
164 enum {
2376
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
165 hc_number_of_fake_oop_fields = 3,
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
166 hc_number_of_fake_int_fields = 2
0
a61af66fc99e Initial load
duke
parents:
diff changeset
167 };
a61af66fc99e Initial load
duke
parents:
diff changeset
168
a61af66fc99e Initial load
duke
parents:
diff changeset
169 static int klass_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
170 static int resolved_constructor_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
171 static int array_klass_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
172 static int number_of_fake_oop_fields;
a61af66fc99e Initial load
duke
parents:
diff changeset
173
2376
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
174 static int oop_size_offset;
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
175 static int static_oop_field_count_offset;
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
176
0
a61af66fc99e Initial load
duke
parents:
diff changeset
177 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
178 static bool offsets_computed;
a61af66fc99e Initial load
duke
parents:
diff changeset
179 static int classRedefinedCount_offset;
514
c81d2ef51ca3 4670071: loadClassInternal is too restrictive.
acorn
parents: 196
diff changeset
180 static int parallelCapable_offset;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
181
a61af66fc99e Initial load
duke
parents:
diff changeset
182 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
183 // Instance creation
a61af66fc99e Initial load
duke
parents:
diff changeset
184 static oop create_mirror(KlassHandle k, TRAPS);
2376
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
185 static void fixup_mirror(KlassHandle k, TRAPS);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
186 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // Conversion
a61af66fc99e Initial load
duke
parents:
diff changeset
188 static klassOop as_klassOop(oop java_class);
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 579
diff changeset
189 static BasicType as_BasicType(oop java_class, klassOop* reference_klass = NULL);
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
190 static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
191 klassOop refk_oop = NULL;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
192 BasicType result = as_BasicType(java_class, &refk_oop);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
193 (*reference_klass) = KlassHandle(refk_oop);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
194 return result;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
195 }
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1989
diff changeset
196 static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 579
diff changeset
197 static void print_signature(oop java_class, outputStream *st);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // Testing
132
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
199 static bool is_instance(oop obj) {
1142
4ce7240d622c 6914300: ciEnv should export all well known classes
never
parents: 1135
diff changeset
200 return obj != NULL && obj->klass() == SystemDictionary::Class_klass();
132
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
201 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
202 static bool is_primitive(oop java_class);
a61af66fc99e Initial load
duke
parents:
diff changeset
203 static BasicType primitive_type(oop java_class);
a61af66fc99e Initial load
duke
parents:
diff changeset
204 static oop primitive_mirror(BasicType t);
a61af66fc99e Initial load
duke
parents:
diff changeset
205 // JVM_NewInstance support
a61af66fc99e Initial load
duke
parents:
diff changeset
206 static methodOop resolved_constructor(oop java_class);
a61af66fc99e Initial load
duke
parents:
diff changeset
207 static void set_resolved_constructor(oop java_class, methodOop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
208 // JVM_NewArray support
a61af66fc99e Initial load
duke
parents:
diff changeset
209 static klassOop array_klass(oop java_class);
a61af66fc99e Initial load
duke
parents:
diff changeset
210 static void set_array_klass(oop java_class, klassOop klass);
a61af66fc99e Initial load
duke
parents:
diff changeset
211 // compiler support for class operations
a61af66fc99e Initial load
duke
parents:
diff changeset
212 static int klass_offset_in_bytes() { return klass_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
213 static int resolved_constructor_offset_in_bytes() { return resolved_constructor_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
214 static int array_klass_offset_in_bytes() { return array_klass_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
215 // Support for classRedefinedCount field
a61af66fc99e Initial load
duke
parents:
diff changeset
216 static int classRedefinedCount(oop the_class_mirror);
a61af66fc99e Initial load
duke
parents:
diff changeset
217 static void set_classRedefinedCount(oop the_class_mirror, int value);
514
c81d2ef51ca3 4670071: loadClassInternal is too restrictive.
acorn
parents: 196
diff changeset
218 // Support for parallelCapable field
c81d2ef51ca3 4670071: loadClassInternal is too restrictive.
acorn
parents: 196
diff changeset
219 static bool parallelCapable(oop the_class_mirror);
2376
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
220
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
221 static int oop_size(oop java_class);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
222 static void set_oop_size(oop java_class, int size);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
223 static int static_oop_field_count(oop java_class);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
224 static void set_static_oop_field_count(oop java_class, int size);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 2357
diff changeset
225
0
a61af66fc99e Initial load
duke
parents:
diff changeset
226 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
227 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
228 friend class instanceKlass; // verification code accesses offsets
a61af66fc99e Initial load
duke
parents:
diff changeset
229 friend class ClassFileParser; // access to number_of_fake_fields
a61af66fc99e Initial load
duke
parents:
diff changeset
230 };
a61af66fc99e Initial load
duke
parents:
diff changeset
231
a61af66fc99e Initial load
duke
parents:
diff changeset
232 // Interface to java.lang.Thread objects
a61af66fc99e Initial load
duke
parents:
diff changeset
233
a61af66fc99e Initial load
duke
parents:
diff changeset
234 class java_lang_Thread : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
235 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
236 // Note that for this class the layout changed between JDK1.2 and JDK1.3,
a61af66fc99e Initial load
duke
parents:
diff changeset
237 // so we compute the offsets at startup rather than hard-wiring them.
a61af66fc99e Initial load
duke
parents:
diff changeset
238 static int _name_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
239 static int _group_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
240 static int _contextClassLoader_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
241 static int _inheritedAccessControlContext_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
242 static int _priority_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
243 static int _eetop_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
244 static int _daemon_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
245 static int _stillborn_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
246 static int _stackSize_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
247 static int _tid_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
248 static int _thread_status_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
249 static int _park_blocker_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
250 static int _park_event_offset ;
a61af66fc99e Initial load
duke
parents:
diff changeset
251
a61af66fc99e Initial load
duke
parents:
diff changeset
252 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
253
a61af66fc99e Initial load
duke
parents:
diff changeset
254 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
255 // Instance creation
a61af66fc99e Initial load
duke
parents:
diff changeset
256 static oop create();
a61af66fc99e Initial load
duke
parents:
diff changeset
257 // Returns the JavaThread associated with the thread obj
a61af66fc99e Initial load
duke
parents:
diff changeset
258 static JavaThread* thread(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
259 // Set JavaThread for instance
a61af66fc99e Initial load
duke
parents:
diff changeset
260 static void set_thread(oop java_thread, JavaThread* thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
261 // Name
a61af66fc99e Initial load
duke
parents:
diff changeset
262 static typeArrayOop name(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
263 static void set_name(oop java_thread, typeArrayOop name);
a61af66fc99e Initial load
duke
parents:
diff changeset
264 // Priority
a61af66fc99e Initial load
duke
parents:
diff changeset
265 static ThreadPriority priority(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
266 static void set_priority(oop java_thread, ThreadPriority priority);
a61af66fc99e Initial load
duke
parents:
diff changeset
267 // Thread group
a61af66fc99e Initial load
duke
parents:
diff changeset
268 static oop threadGroup(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
269 // Stillborn
a61af66fc99e Initial load
duke
parents:
diff changeset
270 static bool is_stillborn(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
271 static void set_stillborn(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
272 // Alive (NOTE: this is not really a field, but provides the correct
a61af66fc99e Initial load
duke
parents:
diff changeset
273 // definition without doing a Java call)
a61af66fc99e Initial load
duke
parents:
diff changeset
274 static bool is_alive(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
275 // Daemon
a61af66fc99e Initial load
duke
parents:
diff changeset
276 static bool is_daemon(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
277 static void set_daemon(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
278 // Context ClassLoader
a61af66fc99e Initial load
duke
parents:
diff changeset
279 static oop context_class_loader(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
280 // Control context
a61af66fc99e Initial load
duke
parents:
diff changeset
281 static oop inherited_access_control_context(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
282 // Stack size hint
a61af66fc99e Initial load
duke
parents:
diff changeset
283 static jlong stackSize(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
284 // Thread ID
a61af66fc99e Initial load
duke
parents:
diff changeset
285 static jlong thread_id(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
286
a61af66fc99e Initial load
duke
parents:
diff changeset
287 // Blocker object responsible for thread parking
a61af66fc99e Initial load
duke
parents:
diff changeset
288 static oop park_blocker(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
289
a61af66fc99e Initial load
duke
parents:
diff changeset
290 // Pointer to type-stable park handler, encoded as jlong.
a61af66fc99e Initial load
duke
parents:
diff changeset
291 // Should be set when apparently null
a61af66fc99e Initial load
duke
parents:
diff changeset
292 // For details, see unsafe.cpp Unsafe_Unpark
a61af66fc99e Initial load
duke
parents:
diff changeset
293 static jlong park_event(oop java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
294 static bool set_park_event(oop java_thread, jlong ptr);
a61af66fc99e Initial load
duke
parents:
diff changeset
295
a61af66fc99e Initial load
duke
parents:
diff changeset
296 // Java Thread Status for JVMTI and M&M use.
a61af66fc99e Initial load
duke
parents:
diff changeset
297 // This thread status info is saved in threadStatus field of
a61af66fc99e Initial load
duke
parents:
diff changeset
298 // java.lang.Thread java class.
a61af66fc99e Initial load
duke
parents:
diff changeset
299 enum ThreadStatus {
a61af66fc99e Initial load
duke
parents:
diff changeset
300 NEW = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
301 RUNNABLE = JVMTI_THREAD_STATE_ALIVE + // runnable / running
a61af66fc99e Initial load
duke
parents:
diff changeset
302 JVMTI_THREAD_STATE_RUNNABLE,
a61af66fc99e Initial load
duke
parents:
diff changeset
303 SLEEPING = JVMTI_THREAD_STATE_ALIVE + // Thread.sleep()
a61af66fc99e Initial load
duke
parents:
diff changeset
304 JVMTI_THREAD_STATE_WAITING +
a61af66fc99e Initial load
duke
parents:
diff changeset
305 JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT +
a61af66fc99e Initial load
duke
parents:
diff changeset
306 JVMTI_THREAD_STATE_SLEEPING,
a61af66fc99e Initial load
duke
parents:
diff changeset
307 IN_OBJECT_WAIT = JVMTI_THREAD_STATE_ALIVE + // Object.wait()
a61af66fc99e Initial load
duke
parents:
diff changeset
308 JVMTI_THREAD_STATE_WAITING +
a61af66fc99e Initial load
duke
parents:
diff changeset
309 JVMTI_THREAD_STATE_WAITING_INDEFINITELY +
a61af66fc99e Initial load
duke
parents:
diff changeset
310 JVMTI_THREAD_STATE_IN_OBJECT_WAIT,
a61af66fc99e Initial load
duke
parents:
diff changeset
311 IN_OBJECT_WAIT_TIMED = JVMTI_THREAD_STATE_ALIVE + // Object.wait(long)
a61af66fc99e Initial load
duke
parents:
diff changeset
312 JVMTI_THREAD_STATE_WAITING +
a61af66fc99e Initial load
duke
parents:
diff changeset
313 JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT +
a61af66fc99e Initial load
duke
parents:
diff changeset
314 JVMTI_THREAD_STATE_IN_OBJECT_WAIT,
a61af66fc99e Initial load
duke
parents:
diff changeset
315 PARKED = JVMTI_THREAD_STATE_ALIVE + // LockSupport.park()
a61af66fc99e Initial load
duke
parents:
diff changeset
316 JVMTI_THREAD_STATE_WAITING +
a61af66fc99e Initial load
duke
parents:
diff changeset
317 JVMTI_THREAD_STATE_WAITING_INDEFINITELY +
a61af66fc99e Initial load
duke
parents:
diff changeset
318 JVMTI_THREAD_STATE_PARKED,
a61af66fc99e Initial load
duke
parents:
diff changeset
319 PARKED_TIMED = JVMTI_THREAD_STATE_ALIVE + // LockSupport.park(long)
a61af66fc99e Initial load
duke
parents:
diff changeset
320 JVMTI_THREAD_STATE_WAITING +
a61af66fc99e Initial load
duke
parents:
diff changeset
321 JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT +
a61af66fc99e Initial load
duke
parents:
diff changeset
322 JVMTI_THREAD_STATE_PARKED,
a61af66fc99e Initial load
duke
parents:
diff changeset
323 BLOCKED_ON_MONITOR_ENTER = JVMTI_THREAD_STATE_ALIVE + // (re-)entering a synchronization block
a61af66fc99e Initial load
duke
parents:
diff changeset
324 JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER,
a61af66fc99e Initial load
duke
parents:
diff changeset
325 TERMINATED = JVMTI_THREAD_STATE_TERMINATED
a61af66fc99e Initial load
duke
parents:
diff changeset
326 };
a61af66fc99e Initial load
duke
parents:
diff changeset
327 // Write thread status info to threadStatus field of java.lang.Thread.
a61af66fc99e Initial load
duke
parents:
diff changeset
328 static void set_thread_status(oop java_thread_oop, ThreadStatus status);
a61af66fc99e Initial load
duke
parents:
diff changeset
329 // Read thread status info from threadStatus field of java.lang.Thread.
a61af66fc99e Initial load
duke
parents:
diff changeset
330 static ThreadStatus get_thread_status(oop java_thread_oop);
a61af66fc99e Initial load
duke
parents:
diff changeset
331
a61af66fc99e Initial load
duke
parents:
diff changeset
332 static const char* thread_status_name(oop java_thread_oop);
a61af66fc99e Initial load
duke
parents:
diff changeset
333
a61af66fc99e Initial load
duke
parents:
diff changeset
334 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
335 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
336 };
a61af66fc99e Initial load
duke
parents:
diff changeset
337
a61af66fc99e Initial load
duke
parents:
diff changeset
338 // Interface to java.lang.ThreadGroup objects
a61af66fc99e Initial load
duke
parents:
diff changeset
339
a61af66fc99e Initial load
duke
parents:
diff changeset
340 class java_lang_ThreadGroup : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
341 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
342 static int _parent_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
343 static int _name_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
344 static int _threads_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
345 static int _groups_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
346 static int _maxPriority_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
347 static int _destroyed_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
348 static int _daemon_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
349 static int _vmAllowSuspension_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
350 static int _nthreads_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
351 static int _ngroups_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
352
a61af66fc99e Initial load
duke
parents:
diff changeset
353 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
354
a61af66fc99e Initial load
duke
parents:
diff changeset
355 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
356 // parent ThreadGroup
a61af66fc99e Initial load
duke
parents:
diff changeset
357 static oop parent(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
358 // name
a61af66fc99e Initial load
duke
parents:
diff changeset
359 static typeArrayOop name(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
360 // ("name as oop" accessor is not necessary)
a61af66fc99e Initial load
duke
parents:
diff changeset
361 // Number of threads in group
a61af66fc99e Initial load
duke
parents:
diff changeset
362 static int nthreads(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
363 // threads
a61af66fc99e Initial load
duke
parents:
diff changeset
364 static objArrayOop threads(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
365 // Number of threads in group
a61af66fc99e Initial load
duke
parents:
diff changeset
366 static int ngroups(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
367 // groups
a61af66fc99e Initial load
duke
parents:
diff changeset
368 static objArrayOop groups(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
369 // maxPriority in group
a61af66fc99e Initial load
duke
parents:
diff changeset
370 static ThreadPriority maxPriority(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
371 // Destroyed
a61af66fc99e Initial load
duke
parents:
diff changeset
372 static bool is_destroyed(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
373 // Daemon
a61af66fc99e Initial load
duke
parents:
diff changeset
374 static bool is_daemon(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
375 // vmAllowSuspension
a61af66fc99e Initial load
duke
parents:
diff changeset
376 static bool is_vmAllowSuspension(oop java_thread_group);
a61af66fc99e Initial load
duke
parents:
diff changeset
377 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
378 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
379 };
a61af66fc99e Initial load
duke
parents:
diff changeset
380
a61af66fc99e Initial load
duke
parents:
diff changeset
381
a61af66fc99e Initial load
duke
parents:
diff changeset
382
a61af66fc99e Initial load
duke
parents:
diff changeset
383 // Interface to java.lang.Throwable objects
a61af66fc99e Initial load
duke
parents:
diff changeset
384
a61af66fc99e Initial load
duke
parents:
diff changeset
385 class java_lang_Throwable: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
386 friend class BacktraceBuilder;
a61af66fc99e Initial load
duke
parents:
diff changeset
387
a61af66fc99e Initial load
duke
parents:
diff changeset
388 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
389 // Offsets
a61af66fc99e Initial load
duke
parents:
diff changeset
390 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
391 hc_backtrace_offset = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
392 hc_detailMessage_offset = 1,
a61af66fc99e Initial load
duke
parents:
diff changeset
393 hc_cause_offset = 2, // New since 1.4
a61af66fc99e Initial load
duke
parents:
diff changeset
394 hc_stackTrace_offset = 3 // New since 1.4
a61af66fc99e Initial load
duke
parents:
diff changeset
395 };
a61af66fc99e Initial load
duke
parents:
diff changeset
396 // Trace constants
a61af66fc99e Initial load
duke
parents:
diff changeset
397 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
398 trace_methods_offset = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
399 trace_bcis_offset = 1,
a61af66fc99e Initial load
duke
parents:
diff changeset
400 trace_next_offset = 2,
a61af66fc99e Initial load
duke
parents:
diff changeset
401 trace_size = 3,
a61af66fc99e Initial load
duke
parents:
diff changeset
402 trace_chunk_size = 32
a61af66fc99e Initial load
duke
parents:
diff changeset
403 };
a61af66fc99e Initial load
duke
parents:
diff changeset
404
a61af66fc99e Initial load
duke
parents:
diff changeset
405 static int backtrace_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
406 static int detailMessage_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
407 static int cause_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
408 static int stackTrace_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
409
a61af66fc99e Initial load
duke
parents:
diff changeset
410 // Printing
a61af66fc99e Initial load
duke
parents:
diff changeset
411 static char* print_stack_element_to_buffer(methodOop method, int bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
412 static void print_to_stream(Handle stream, const char* str);
a61af66fc99e Initial load
duke
parents:
diff changeset
413 // StackTrace (programmatic access, new since 1.4)
a61af66fc99e Initial load
duke
parents:
diff changeset
414 static void clear_stacktrace(oop throwable);
a61af66fc99e Initial load
duke
parents:
diff changeset
415 // No stack trace available
a61af66fc99e Initial load
duke
parents:
diff changeset
416 static const char* no_stack_trace_message();
a61af66fc99e Initial load
duke
parents:
diff changeset
417
a61af66fc99e Initial load
duke
parents:
diff changeset
418 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
419 // Backtrace
a61af66fc99e Initial load
duke
parents:
diff changeset
420 static oop backtrace(oop throwable);
a61af66fc99e Initial load
duke
parents:
diff changeset
421 static void set_backtrace(oop throwable, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
422 // Needed by JVMTI to filter out this internal field.
a61af66fc99e Initial load
duke
parents:
diff changeset
423 static int get_backtrace_offset() { return backtrace_offset;}
a61af66fc99e Initial load
duke
parents:
diff changeset
424 static int get_detailMessage_offset() { return detailMessage_offset;}
a61af66fc99e Initial load
duke
parents:
diff changeset
425 // Message
a61af66fc99e Initial load
duke
parents:
diff changeset
426 static oop message(oop throwable);
a61af66fc99e Initial load
duke
parents:
diff changeset
427 static oop message(Handle throwable);
a61af66fc99e Initial load
duke
parents:
diff changeset
428 static void set_message(oop throwable, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
429 // Print stack trace stored in exception by call-back to Java
a61af66fc99e Initial load
duke
parents:
diff changeset
430 // Note: this is no longer used in Merlin, but we still suppport
a61af66fc99e Initial load
duke
parents:
diff changeset
431 // it for compatibility.
a61af66fc99e Initial load
duke
parents:
diff changeset
432 static void print_stack_trace(oop throwable, oop print_stream);
a61af66fc99e Initial load
duke
parents:
diff changeset
433 static void print_stack_element(Handle stream, methodOop method, int bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
434 static void print_stack_element(outputStream *st, methodOop method, int bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
435 static void print_stack_usage(Handle stream);
a61af66fc99e Initial load
duke
parents:
diff changeset
436
a61af66fc99e Initial load
duke
parents:
diff changeset
437 // Allocate space for backtrace (created but stack trace not filled in)
a61af66fc99e Initial load
duke
parents:
diff changeset
438 static void allocate_backtrace(Handle throwable, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
439 // Fill in current stack trace for throwable with preallocated backtrace (no GC)
a61af66fc99e Initial load
duke
parents:
diff changeset
440 static void fill_in_stack_trace_of_preallocated_backtrace(Handle throwable);
a61af66fc99e Initial load
duke
parents:
diff changeset
441
a61af66fc99e Initial load
duke
parents:
diff changeset
442 // Fill in current stack trace, can cause GC
a61af66fc99e Initial load
duke
parents:
diff changeset
443 static void fill_in_stack_trace(Handle throwable, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
444 static void fill_in_stack_trace(Handle throwable);
a61af66fc99e Initial load
duke
parents:
diff changeset
445 // Programmatic access to stack trace
a61af66fc99e Initial load
duke
parents:
diff changeset
446 static oop get_stack_trace_element(oop throwable, int index, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
447 static int get_stack_trace_depth(oop throwable, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
448 // Printing
a61af66fc99e Initial load
duke
parents:
diff changeset
449 static void print(oop throwable, outputStream* st);
a61af66fc99e Initial load
duke
parents:
diff changeset
450 static void print(Handle throwable, outputStream* st);
a61af66fc99e Initial load
duke
parents:
diff changeset
451 static void print_stack_trace(oop throwable, outputStream* st);
a61af66fc99e Initial load
duke
parents:
diff changeset
452 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
453 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
454 };
a61af66fc99e Initial load
duke
parents:
diff changeset
455
a61af66fc99e Initial load
duke
parents:
diff changeset
456
a61af66fc99e Initial load
duke
parents:
diff changeset
457 // Interface to java.lang.reflect.AccessibleObject objects
a61af66fc99e Initial load
duke
parents:
diff changeset
458
a61af66fc99e Initial load
duke
parents:
diff changeset
459 class java_lang_reflect_AccessibleObject: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
460 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
461 // Note that to reduce dependencies on the JDK we compute these
a61af66fc99e Initial load
duke
parents:
diff changeset
462 // offsets at run-time.
a61af66fc99e Initial load
duke
parents:
diff changeset
463 static int override_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
464
a61af66fc99e Initial load
duke
parents:
diff changeset
465 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
466
a61af66fc99e Initial load
duke
parents:
diff changeset
467 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
468 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
469 static jboolean override(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
470 static void set_override(oop reflect, jboolean value);
a61af66fc99e Initial load
duke
parents:
diff changeset
471
a61af66fc99e Initial load
duke
parents:
diff changeset
472 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
473 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
474 };
a61af66fc99e Initial load
duke
parents:
diff changeset
475
a61af66fc99e Initial load
duke
parents:
diff changeset
476
a61af66fc99e Initial load
duke
parents:
diff changeset
477 // Interface to java.lang.reflect.Method objects
a61af66fc99e Initial load
duke
parents:
diff changeset
478
a61af66fc99e Initial load
duke
parents:
diff changeset
479 class java_lang_reflect_Method : public java_lang_reflect_AccessibleObject {
a61af66fc99e Initial load
duke
parents:
diff changeset
480 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
481 // Note that to reduce dependencies on the JDK we compute these
a61af66fc99e Initial load
duke
parents:
diff changeset
482 // offsets at run-time.
a61af66fc99e Initial load
duke
parents:
diff changeset
483 static int clazz_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
484 static int name_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
485 static int returnType_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
486 static int parameterTypes_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
487 static int exceptionTypes_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
488 static int slot_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
489 static int modifiers_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
490 static int signature_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
491 static int annotations_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
492 static int parameter_annotations_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
493 static int annotation_default_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
494
a61af66fc99e Initial load
duke
parents:
diff changeset
495 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
496
a61af66fc99e Initial load
duke
parents:
diff changeset
497 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
498 // Allocation
a61af66fc99e Initial load
duke
parents:
diff changeset
499 static Handle create(TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
500
a61af66fc99e Initial load
duke
parents:
diff changeset
501 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
502 static oop clazz(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
503 static void set_clazz(oop reflect, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
504
a61af66fc99e Initial load
duke
parents:
diff changeset
505 static oop name(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
506 static void set_name(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
507
a61af66fc99e Initial load
duke
parents:
diff changeset
508 static oop return_type(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
509 static void set_return_type(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
510
a61af66fc99e Initial load
duke
parents:
diff changeset
511 static oop parameter_types(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
512 static void set_parameter_types(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
513
a61af66fc99e Initial load
duke
parents:
diff changeset
514 static oop exception_types(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
515 static void set_exception_types(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
516
a61af66fc99e Initial load
duke
parents:
diff changeset
517 static int slot(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
518 static void set_slot(oop reflect, int value);
a61af66fc99e Initial load
duke
parents:
diff changeset
519
a61af66fc99e Initial load
duke
parents:
diff changeset
520 static int modifiers(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
521 static void set_modifiers(oop method, int value);
a61af66fc99e Initial load
duke
parents:
diff changeset
522
a61af66fc99e Initial load
duke
parents:
diff changeset
523 static bool has_signature_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
524 static oop signature(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
525 static void set_signature(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
526
a61af66fc99e Initial load
duke
parents:
diff changeset
527 static bool has_annotations_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
528 static oop annotations(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
529 static void set_annotations(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
530
a61af66fc99e Initial load
duke
parents:
diff changeset
531 static bool has_parameter_annotations_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
532 static oop parameter_annotations(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
533 static void set_parameter_annotations(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
534
a61af66fc99e Initial load
duke
parents:
diff changeset
535 static bool has_annotation_default_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
536 static oop annotation_default(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
537 static void set_annotation_default(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
538
a61af66fc99e Initial load
duke
parents:
diff changeset
539 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
540 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
541 };
a61af66fc99e Initial load
duke
parents:
diff changeset
542
a61af66fc99e Initial load
duke
parents:
diff changeset
543
a61af66fc99e Initial load
duke
parents:
diff changeset
544 // Interface to java.lang.reflect.Constructor objects
a61af66fc99e Initial load
duke
parents:
diff changeset
545
a61af66fc99e Initial load
duke
parents:
diff changeset
546 class java_lang_reflect_Constructor : public java_lang_reflect_AccessibleObject {
a61af66fc99e Initial load
duke
parents:
diff changeset
547 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
548 // Note that to reduce dependencies on the JDK we compute these
a61af66fc99e Initial load
duke
parents:
diff changeset
549 // offsets at run-time.
a61af66fc99e Initial load
duke
parents:
diff changeset
550 static int clazz_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
551 static int parameterTypes_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
552 static int exceptionTypes_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
553 static int slot_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
554 static int modifiers_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
555 static int signature_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
556 static int annotations_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
557 static int parameter_annotations_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
558
a61af66fc99e Initial load
duke
parents:
diff changeset
559 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
560
a61af66fc99e Initial load
duke
parents:
diff changeset
561 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
562 // Allocation
a61af66fc99e Initial load
duke
parents:
diff changeset
563 static Handle create(TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
564
a61af66fc99e Initial load
duke
parents:
diff changeset
565 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
566 static oop clazz(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
567 static void set_clazz(oop reflect, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
568
a61af66fc99e Initial load
duke
parents:
diff changeset
569 static oop parameter_types(oop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
570 static void set_parameter_types(oop constructor, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
571
a61af66fc99e Initial load
duke
parents:
diff changeset
572 static oop exception_types(oop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
573 static void set_exception_types(oop constructor, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
574
a61af66fc99e Initial load
duke
parents:
diff changeset
575 static int slot(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
576 static void set_slot(oop reflect, int value);
a61af66fc99e Initial load
duke
parents:
diff changeset
577
a61af66fc99e Initial load
duke
parents:
diff changeset
578 static int modifiers(oop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
579 static void set_modifiers(oop constructor, int value);
a61af66fc99e Initial load
duke
parents:
diff changeset
580
a61af66fc99e Initial load
duke
parents:
diff changeset
581 static bool has_signature_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
582 static oop signature(oop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
583 static void set_signature(oop constructor, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
584
a61af66fc99e Initial load
duke
parents:
diff changeset
585 static bool has_annotations_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
586 static oop annotations(oop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
587 static void set_annotations(oop constructor, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
588
a61af66fc99e Initial load
duke
parents:
diff changeset
589 static bool has_parameter_annotations_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
590 static oop parameter_annotations(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
591 static void set_parameter_annotations(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
592
a61af66fc99e Initial load
duke
parents:
diff changeset
593 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
594 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
595 };
a61af66fc99e Initial load
duke
parents:
diff changeset
596
a61af66fc99e Initial load
duke
parents:
diff changeset
597
a61af66fc99e Initial load
duke
parents:
diff changeset
598 // Interface to java.lang.reflect.Field objects
a61af66fc99e Initial load
duke
parents:
diff changeset
599
a61af66fc99e Initial load
duke
parents:
diff changeset
600 class java_lang_reflect_Field : public java_lang_reflect_AccessibleObject {
a61af66fc99e Initial load
duke
parents:
diff changeset
601 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
602 // Note that to reduce dependencies on the JDK we compute these
a61af66fc99e Initial load
duke
parents:
diff changeset
603 // offsets at run-time.
a61af66fc99e Initial load
duke
parents:
diff changeset
604 static int clazz_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
605 static int name_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
606 static int type_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
607 static int slot_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
608 static int modifiers_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
609 static int signature_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
610 static int annotations_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
611
a61af66fc99e Initial load
duke
parents:
diff changeset
612 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
613
a61af66fc99e Initial load
duke
parents:
diff changeset
614 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
615 // Allocation
a61af66fc99e Initial load
duke
parents:
diff changeset
616 static Handle create(TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
617
a61af66fc99e Initial load
duke
parents:
diff changeset
618 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
619 static oop clazz(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
620 static void set_clazz(oop reflect, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
621
a61af66fc99e Initial load
duke
parents:
diff changeset
622 static oop name(oop field);
a61af66fc99e Initial load
duke
parents:
diff changeset
623 static void set_name(oop field, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
624
a61af66fc99e Initial load
duke
parents:
diff changeset
625 static oop type(oop field);
a61af66fc99e Initial load
duke
parents:
diff changeset
626 static void set_type(oop field, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
627
a61af66fc99e Initial load
duke
parents:
diff changeset
628 static int slot(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
629 static void set_slot(oop reflect, int value);
a61af66fc99e Initial load
duke
parents:
diff changeset
630
a61af66fc99e Initial load
duke
parents:
diff changeset
631 static int modifiers(oop field);
a61af66fc99e Initial load
duke
parents:
diff changeset
632 static void set_modifiers(oop field, int value);
a61af66fc99e Initial load
duke
parents:
diff changeset
633
a61af66fc99e Initial load
duke
parents:
diff changeset
634 static bool has_signature_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
635 static oop signature(oop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
636 static void set_signature(oop constructor, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
637
a61af66fc99e Initial load
duke
parents:
diff changeset
638 static bool has_annotations_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
639 static oop annotations(oop constructor);
a61af66fc99e Initial load
duke
parents:
diff changeset
640 static void set_annotations(oop constructor, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
641
a61af66fc99e Initial load
duke
parents:
diff changeset
642 static bool has_parameter_annotations_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
643 static oop parameter_annotations(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
644 static void set_parameter_annotations(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
645
a61af66fc99e Initial load
duke
parents:
diff changeset
646 static bool has_annotation_default_field();
a61af66fc99e Initial load
duke
parents:
diff changeset
647 static oop annotation_default(oop method);
a61af66fc99e Initial load
duke
parents:
diff changeset
648 static void set_annotation_default(oop method, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
649
a61af66fc99e Initial load
duke
parents:
diff changeset
650 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
651 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
652 };
a61af66fc99e Initial load
duke
parents:
diff changeset
653
a61af66fc99e Initial load
duke
parents:
diff changeset
654 // Interface to sun.reflect.ConstantPool objects
a61af66fc99e Initial load
duke
parents:
diff changeset
655 class sun_reflect_ConstantPool {
a61af66fc99e Initial load
duke
parents:
diff changeset
656 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
657 // Note that to reduce dependencies on the JDK we compute these
a61af66fc99e Initial load
duke
parents:
diff changeset
658 // offsets at run-time.
a61af66fc99e Initial load
duke
parents:
diff changeset
659 static int _cp_oop_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
660
a61af66fc99e Initial load
duke
parents:
diff changeset
661 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
662
a61af66fc99e Initial load
duke
parents:
diff changeset
663 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
664 // Allocation
a61af66fc99e Initial load
duke
parents:
diff changeset
665 static Handle create(TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
666
a61af66fc99e Initial load
duke
parents:
diff changeset
667 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
668 static oop cp_oop(oop reflect);
a61af66fc99e Initial load
duke
parents:
diff changeset
669 static void set_cp_oop(oop reflect, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
670 static int cp_oop_offset() {
a61af66fc99e Initial load
duke
parents:
diff changeset
671 return _cp_oop_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
672 }
a61af66fc99e Initial load
duke
parents:
diff changeset
673
a61af66fc99e Initial load
duke
parents:
diff changeset
674 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
675 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
676 };
a61af66fc99e Initial load
duke
parents:
diff changeset
677
a61af66fc99e Initial load
duke
parents:
diff changeset
678 // Interface to sun.reflect.UnsafeStaticFieldAccessorImpl objects
a61af66fc99e Initial load
duke
parents:
diff changeset
679 class sun_reflect_UnsafeStaticFieldAccessorImpl {
a61af66fc99e Initial load
duke
parents:
diff changeset
680 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
681 static int _base_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
682 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
683
a61af66fc99e Initial load
duke
parents:
diff changeset
684 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
685 static int base_offset() {
a61af66fc99e Initial load
duke
parents:
diff changeset
686 return _base_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
687 }
a61af66fc99e Initial load
duke
parents:
diff changeset
688
a61af66fc99e Initial load
duke
parents:
diff changeset
689 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
690 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
691 };
a61af66fc99e Initial load
duke
parents:
diff changeset
692
a61af66fc99e Initial load
duke
parents:
diff changeset
693 // Interface to java.lang primitive type boxing objects:
a61af66fc99e Initial load
duke
parents:
diff changeset
694 // - java.lang.Boolean
a61af66fc99e Initial load
duke
parents:
diff changeset
695 // - java.lang.Character
a61af66fc99e Initial load
duke
parents:
diff changeset
696 // - java.lang.Float
a61af66fc99e Initial load
duke
parents:
diff changeset
697 // - java.lang.Double
a61af66fc99e Initial load
duke
parents:
diff changeset
698 // - java.lang.Byte
a61af66fc99e Initial load
duke
parents:
diff changeset
699 // - java.lang.Short
a61af66fc99e Initial load
duke
parents:
diff changeset
700 // - java.lang.Integer
a61af66fc99e Initial load
duke
parents:
diff changeset
701 // - java.lang.Long
a61af66fc99e Initial load
duke
parents:
diff changeset
702
a61af66fc99e Initial load
duke
parents:
diff changeset
703 // This could be separated out into 8 individual classes.
a61af66fc99e Initial load
duke
parents:
diff changeset
704
a61af66fc99e Initial load
duke
parents:
diff changeset
705 class java_lang_boxing_object: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
706 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
707 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
708 hc_value_offset = 0
a61af66fc99e Initial load
duke
parents:
diff changeset
709 };
a61af66fc99e Initial load
duke
parents:
diff changeset
710 static int value_offset;
165
437d03ea40b1 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 132
diff changeset
711 static int long_value_offset;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
712
132
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
713 static oop initialize_and_allocate(BasicType type, TRAPS);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
714 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
715 // Allocation. Returns a boxed value, or NULL for invalid type.
a61af66fc99e Initial load
duke
parents:
diff changeset
716 static oop create(BasicType type, jvalue* value, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
717 // Accessors. Returns the basic type being boxed, or T_ILLEGAL for invalid oop.
a61af66fc99e Initial load
duke
parents:
diff changeset
718 static BasicType get_value(oop box, jvalue* value);
a61af66fc99e Initial load
duke
parents:
diff changeset
719 static BasicType set_value(oop box, jvalue* value);
132
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
720 static BasicType basic_type(oop box);
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
721 static bool is_instance(oop box) { return basic_type(box) != T_ILLEGAL; }
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
722 static bool is_instance(oop box, BasicType type) { return basic_type(box) == type; }
665
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 579
diff changeset
723 static void print(oop box, outputStream* st) { jvalue value; print(get_value(box, &value), &value, st); }
c89f86385056 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 579
diff changeset
724 static void print(BasicType type, jvalue* value, outputStream* st);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
725
165
437d03ea40b1 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 132
diff changeset
726 static int value_offset_in_bytes(BasicType type) {
437d03ea40b1 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 132
diff changeset
727 return ( type == T_LONG || type == T_DOUBLE ) ? long_value_offset :
437d03ea40b1 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 132
diff changeset
728 value_offset;
437d03ea40b1 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 132
diff changeset
729 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
730
a61af66fc99e Initial load
duke
parents:
diff changeset
731 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
732 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
733 };
a61af66fc99e Initial load
duke
parents:
diff changeset
734
a61af66fc99e Initial load
duke
parents:
diff changeset
735
a61af66fc99e Initial load
duke
parents:
diff changeset
736
a61af66fc99e Initial load
duke
parents:
diff changeset
737 // Interface to java.lang.ref.Reference objects
a61af66fc99e Initial load
duke
parents:
diff changeset
738
a61af66fc99e Initial load
duke
parents:
diff changeset
739 class java_lang_ref_Reference: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
740 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
741 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
742 hc_referent_offset = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
743 hc_queue_offset = 1,
a61af66fc99e Initial load
duke
parents:
diff changeset
744 hc_next_offset = 2,
a61af66fc99e Initial load
duke
parents:
diff changeset
745 hc_discovered_offset = 3 // Is not last, see SoftRefs.
a61af66fc99e Initial load
duke
parents:
diff changeset
746 };
a61af66fc99e Initial load
duke
parents:
diff changeset
747 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
748 hc_static_lock_offset = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
749 hc_static_pending_offset = 1
a61af66fc99e Initial load
duke
parents:
diff changeset
750 };
a61af66fc99e Initial load
duke
parents:
diff changeset
751
a61af66fc99e Initial load
duke
parents:
diff changeset
752 static int referent_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
753 static int queue_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
754 static int next_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
755 static int discovered_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
756 static int static_lock_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
757 static int static_pending_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
758 static int number_of_fake_oop_fields;
a61af66fc99e Initial load
duke
parents:
diff changeset
759
a61af66fc99e Initial load
duke
parents:
diff changeset
760 // Accessors
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
761 static oop referent(oop ref) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
762 return ref->obj_field(referent_offset);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
763 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
764 static void set_referent(oop ref, oop value) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
765 ref->obj_field_put(referent_offset, value);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
766 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
767 static void set_referent_raw(oop ref, oop value) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
768 ref->obj_field_raw_put(referent_offset, value);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
769 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
770 static HeapWord* referent_addr(oop ref) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
771 return ref->obj_field_addr<HeapWord>(referent_offset);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
772 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
773 static oop next(oop ref) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
774 return ref->obj_field(next_offset);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
775 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
776 static void set_next(oop ref, oop value) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
777 ref->obj_field_put(next_offset, value);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
778 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
779 static void set_next_raw(oop ref, oop value) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
780 ref->obj_field_raw_put(next_offset, value);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
781 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
782 static HeapWord* next_addr(oop ref) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
783 return ref->obj_field_addr<HeapWord>(next_offset);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
784 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
785 static oop discovered(oop ref) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
786 return ref->obj_field(discovered_offset);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
787 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
788 static void set_discovered(oop ref, oop value) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
789 ref->obj_field_put(discovered_offset, value);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
790 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
791 static void set_discovered_raw(oop ref, oop value) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
792 ref->obj_field_raw_put(discovered_offset, value);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
793 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
794 static HeapWord* discovered_addr(oop ref) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
795 return ref->obj_field_addr<HeapWord>(discovered_offset);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
796 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
797 // Accessors for statics
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
798 static oop pending_list_lock();
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
799 static oop pending_list();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
800
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 22
diff changeset
801 static HeapWord* pending_list_addr();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
802 };
a61af66fc99e Initial load
duke
parents:
diff changeset
803
a61af66fc99e Initial load
duke
parents:
diff changeset
804
a61af66fc99e Initial load
duke
parents:
diff changeset
805 // Interface to java.lang.ref.SoftReference objects
a61af66fc99e Initial load
duke
parents:
diff changeset
806
a61af66fc99e Initial load
duke
parents:
diff changeset
807 class java_lang_ref_SoftReference: public java_lang_ref_Reference {
a61af66fc99e Initial load
duke
parents:
diff changeset
808 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
809 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
810 // The timestamp is a long field and may need to be adjusted for alignment.
165
437d03ea40b1 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 132
diff changeset
811 hc_timestamp_offset = hc_discovered_offset + 1
0
a61af66fc99e Initial load
duke
parents:
diff changeset
812 };
a61af66fc99e Initial load
duke
parents:
diff changeset
813 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
814 hc_static_clock_offset = 0
a61af66fc99e Initial load
duke
parents:
diff changeset
815 };
a61af66fc99e Initial load
duke
parents:
diff changeset
816
a61af66fc99e Initial load
duke
parents:
diff changeset
817 static int timestamp_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
818 static int static_clock_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
819
a61af66fc99e Initial load
duke
parents:
diff changeset
820 // Accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
821 static jlong timestamp(oop ref);
a61af66fc99e Initial load
duke
parents:
diff changeset
822
a61af66fc99e Initial load
duke
parents:
diff changeset
823 // Accessors for statics
a61af66fc99e Initial load
duke
parents:
diff changeset
824 static jlong clock();
a61af66fc99e Initial load
duke
parents:
diff changeset
825 static void set_clock(jlong value);
a61af66fc99e Initial load
duke
parents:
diff changeset
826 };
a61af66fc99e Initial load
duke
parents:
diff changeset
827
a61af66fc99e Initial load
duke
parents:
diff changeset
828
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
829 // Interface to java.lang.invoke.MethodHandle objects
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
830
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
831 class MethodHandleEntry;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
832
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
833 class java_lang_invoke_MethodHandle: AllStatic {
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
834 friend class JavaClasses;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
835
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
836 private:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
837 static int _vmentry_offset; // assembly code trampoline for MH
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
838 static int _vmtarget_offset; // class-specific target reference
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
839 static int _type_offset; // the MethodType of this MH
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
840 static int _vmslots_offset; // OPTIONAL hoisted type.form.vmslots
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
841
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
842 static void compute_offsets();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
843
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
844 public:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
845 // Accessors
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
846 static oop type(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
847 static void set_type(oop mh, oop mtype);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
848
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
849 static oop vmtarget(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
850 static void set_vmtarget(oop mh, oop target);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
851
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
852 static MethodHandleEntry* vmentry(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
853 static void set_vmentry(oop mh, MethodHandleEntry* data);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
854
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
855 static int vmslots(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
856 static void init_vmslots(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
857 static int compute_vmslots(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
858
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
859 // Testers
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
860 static bool is_subclass(klassOop klass) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
861 return Klass::cast(klass)->is_subclass_of(SystemDictionary::MethodHandle_klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
862 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
863 static bool is_instance(oop obj) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
864 return obj != NULL && is_subclass(obj->klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
865 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
866
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
867 // Accessors for code generation:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
868 static int type_offset_in_bytes() { return _type_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
869 static int vmtarget_offset_in_bytes() { return _vmtarget_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
870 static int vmentry_offset_in_bytes() { return _vmentry_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
871 static int vmslots_offset_in_bytes() { return _vmslots_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
872 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
873
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
874 class java_lang_invoke_DirectMethodHandle: public java_lang_invoke_MethodHandle {
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
875 friend class JavaClasses;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
876
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
877 private:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
878 // _vmtarget_offset; // method or class or interface
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
879 static int _vmindex_offset; // negative or vtable idx or itable idx
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
880 static void compute_offsets();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
881
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
882 public:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
883 // Accessors
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
884 static int vmindex(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
885 static void set_vmindex(oop mh, int index);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
886
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
887 // Testers
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
888 static bool is_subclass(klassOop klass) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
889 return Klass::cast(klass)->is_subclass_of(SystemDictionary::DirectMethodHandle_klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
890 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
891 static bool is_instance(oop obj) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
892 return obj != NULL && is_subclass(obj->klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
893 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
894
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
895 // Accessors for code generation:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
896 static int vmindex_offset_in_bytes() { return _vmindex_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
897 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
898
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
899 class java_lang_invoke_BoundMethodHandle: public java_lang_invoke_MethodHandle {
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
900 friend class JavaClasses;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
901
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
902 private:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
903 static int _argument_offset; // argument value bound into this MH
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
904 static int _vmargslot_offset; // relevant argument slot (<= vmslots)
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
905 static void compute_offsets();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
906
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
907 public:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
908 static oop argument(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
909 static void set_argument(oop mh, oop ref);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
910
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
911 static jint vmargslot(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
912 static void set_vmargslot(oop mh, jint slot);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
913
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
914 // Testers
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
915 static bool is_subclass(klassOop klass) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
916 return Klass::cast(klass)->is_subclass_of(SystemDictionary::BoundMethodHandle_klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
917 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
918 static bool is_instance(oop obj) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
919 return obj != NULL && is_subclass(obj->klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
920 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
921
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
922 static int argument_offset_in_bytes() { return _argument_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
923 static int vmargslot_offset_in_bytes() { return _vmargslot_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
924 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
925
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
926 class java_lang_invoke_AdapterMethodHandle: public java_lang_invoke_BoundMethodHandle {
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
927 friend class JavaClasses;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
928
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
929 private:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
930 static int _conversion_offset; // type of conversion to apply
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
931 static void compute_offsets();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
932
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
933 public:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
934 static int conversion(oop mh);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
935 static void set_conversion(oop mh, int conv);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
936
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
937 // Testers
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
938 static bool is_subclass(klassOop klass) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
939 return Klass::cast(klass)->is_subclass_of(SystemDictionary::AdapterMethodHandle_klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
940 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
941 static bool is_instance(oop obj) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
942 return obj != NULL && is_subclass(obj->klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
943 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
944
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
945 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
946 enum {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
947 OP_RETYPE_ONLY = 0x0, // no argument changes; straight retype
1039
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
948 OP_RETYPE_RAW = 0x1, // straight retype, trusted (void->int, Object->T)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
949 OP_CHECK_CAST = 0x2, // ref-to-ref conversion; requires a Class argument
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
950 OP_PRIM_TO_PRIM = 0x3, // converts from one primitive to another
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
951 OP_REF_TO_PRIM = 0x4, // unboxes a wrapper to produce a primitive
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
952 OP_PRIM_TO_REF = 0x5, // boxes a primitive into a wrapper (NYI)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
953 OP_SWAP_ARGS = 0x6, // swap arguments (vminfo is 2nd arg)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
954 OP_ROT_ARGS = 0x7, // rotate arguments (vminfo is displaced arg)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
955 OP_DUP_ARGS = 0x8, // duplicates one or more arguments (at TOS)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
956 OP_DROP_ARGS = 0x9, // remove one or more argument slots
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
957 OP_COLLECT_ARGS = 0xA, // combine one or more arguments into a varargs (NYI)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
958 OP_SPREAD_ARGS = 0xB, // expand in place a varargs array (of known size)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
959 OP_FLYBY = 0xC, // operate first on reified argument list (NYI)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
960 OP_RICOCHET = 0xD, // run an adapter chain on the return value (NYI)
987e948ebbc8 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 726
diff changeset
961 CONV_OP_LIMIT = 0xE, // limit of CONV_OP enumeration
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
962
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
963 CONV_OP_MASK = 0xF00, // this nybble contains the conversion op field
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
964 CONV_VMINFO_MASK = 0x0FF, // LSB is reserved for JVM use
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
965 CONV_VMINFO_SHIFT = 0, // position of bits in CONV_VMINFO_MASK
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
966 CONV_OP_SHIFT = 8, // position of bits in CONV_OP_MASK
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
967 CONV_DEST_TYPE_SHIFT = 12, // byte 2 has the adapter BasicType (if needed)
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
968 CONV_SRC_TYPE_SHIFT = 16, // byte 2 has the source BasicType (if needed)
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
969 CONV_STACK_MOVE_SHIFT = 20, // high 12 bits give signed SP change
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
970 CONV_STACK_MOVE_MASK = (1 << (32 - CONV_STACK_MOVE_SHIFT)) - 1
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
971 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
972
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
973 static int conversion_offset_in_bytes() { return _conversion_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
974 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
975
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
976
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
977 // Interface to java.lang.invoke.MemberName objects
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
978 // (These are a private interface for Java code to query the class hierarchy.)
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
979
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
980 class java_lang_invoke_MemberName: AllStatic {
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
981 friend class JavaClasses;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
982
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
983 private:
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
984 // From java.lang.invoke.MemberName:
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
985 // private Class<?> clazz; // class in which the method is defined
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
986 // private String name; // may be null if not yet materialized
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
987 // private Object type; // may be null if not yet materialized
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
988 // private int flags; // modifier bits; see reflect.Modifier
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
989 // private Object vmtarget; // VM-specific target value
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
990 // private int vmindex; // method index within class or interface
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
991 static int _clazz_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
992 static int _name_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
993 static int _type_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
994 static int _flags_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
995 static int _vmtarget_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
996 static int _vmindex_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
997
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
998 static void compute_offsets();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
999
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1000 public:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1001 // Accessors
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1002 static oop clazz(oop mname);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1003 static void set_clazz(oop mname, oop clazz);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1004
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1005 static oop type(oop mname);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1006 static void set_type(oop mname, oop type);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1007
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1008 static oop name(oop mname);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1009 static void set_name(oop mname, oop name);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1010
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1011 static int flags(oop mname);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1012 static void set_flags(oop mname, int flags);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1013
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1014 static int modifiers(oop mname) { return (u2) flags(mname); }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1015 static void set_modifiers(oop mname, int mods)
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1016 { set_flags(mname, (flags(mname) &~ (u2)-1) | (u2)mods); }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1017
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1018 static oop vmtarget(oop mname);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1019 static void set_vmtarget(oop mname, oop target);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1020
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1021 static int vmindex(oop mname);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1022 static void set_vmindex(oop mname, int index);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1023
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1024 // Testers
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1025 static bool is_subclass(klassOop klass) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1026 return Klass::cast(klass)->is_subclass_of(SystemDictionary::MemberName_klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1027 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1028 static bool is_instance(oop obj) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1029 return obj != NULL && is_subclass(obj->klass());
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1030 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1031
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1032 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1033 enum {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1034 MN_IS_METHOD = 0x00010000, // method (not constructor)
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1035 MN_IS_CONSTRUCTOR = 0x00020000, // constructor
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1036 MN_IS_FIELD = 0x00040000, // field
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1037 MN_IS_TYPE = 0x00080000, // nested type
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1038 MN_SEARCH_SUPERCLASSES = 0x00100000, // for MHN.getMembers
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1039 MN_SEARCH_INTERFACES = 0x00200000, // for MHN.getMembers
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1040 VM_INDEX_UNINITIALIZED = -99
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1041 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1042
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1043 // Accessors for code generation:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1044 static int clazz_offset_in_bytes() { return _clazz_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1045 static int type_offset_in_bytes() { return _type_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1046 static int name_offset_in_bytes() { return _name_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1047 static int flags_offset_in_bytes() { return _flags_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1048 static int vmtarget_offset_in_bytes() { return _vmtarget_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1049 static int vmindex_offset_in_bytes() { return _vmindex_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1050 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1051
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1052
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
1053 // Interface to java.lang.invoke.MethodType objects
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1054
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
1055 class java_lang_invoke_MethodType: AllStatic {
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1056 friend class JavaClasses;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1057
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1058 private:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1059 static int _rtype_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1060 static int _ptypes_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1061 static int _form_offset;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1062
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1063 static void compute_offsets();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1064
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1065 public:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1066 // Accessors
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1067 static oop rtype(oop mt);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1068 static objArrayOop ptypes(oop mt);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1069 static oop form(oop mt);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1070
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1071 static oop ptype(oop mt, int index);
1133
aa62b9388fce 6894206: JVM needs a way to traverse method handle structures
twisti
parents: 1059
diff changeset
1072 static int ptype_count(oop mt);
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1073
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1989
diff changeset
1074 static Symbol* as_signature(oop mt, bool intern_if_not_found, TRAPS);
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1075 static void print_signature(oop mt, outputStream* st);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1076
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1077 static bool is_instance(oop obj) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1078 return obj != NULL && obj->klass() == SystemDictionary::MethodType_klass();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1079 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1080
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1081 // Accessors for code generation:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1082 static int rtype_offset_in_bytes() { return _rtype_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1083 static int ptypes_offset_in_bytes() { return _ptypes_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1084 static int form_offset_in_bytes() { return _form_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1085 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1086
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
1087 class java_lang_invoke_MethodTypeForm: AllStatic {
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1088 friend class JavaClasses;
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1089
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1090 private:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1091 static int _vmslots_offset; // number of argument slots needed
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1092 static int _erasedType_offset; // erasedType = canonical MethodType
1793
d257356e35f0 6939224: MethodHandle.invokeGeneric needs to perform the correct set of conversions
jrose
parents: 1552
diff changeset
1093 static int _genericInvoker_offset; // genericInvoker = adapter for invokeGeneric
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1094
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1095 static void compute_offsets();
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1096
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1097 public:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1098 // Accessors
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1099 static int vmslots(oop mtform);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1100 static oop erasedType(oop mtform);
1793
d257356e35f0 6939224: MethodHandle.invokeGeneric needs to perform the correct set of conversions
jrose
parents: 1552
diff changeset
1101 static oop genericInvoker(oop mtform);
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1102
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1103 // Accessors for code generation:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1104 static int vmslots_offset_in_bytes() { return _vmslots_offset; }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1105 static int erasedType_offset_in_bytes() { return _erasedType_offset; }
1793
d257356e35f0 6939224: MethodHandle.invokeGeneric needs to perform the correct set of conversions
jrose
parents: 1552
diff changeset
1106 static int genericInvoker_offset_in_bytes() { return _genericInvoker_offset; }
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1107 };
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1108
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1109
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
1110 // Interface to java.lang.invoke.CallSite objects
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1111
2357
8033953d67ff 7012648: move JSR 292 to package java.lang.invoke and adjust names
jrose
parents: 2177
diff changeset
1112 class java_lang_invoke_CallSite: AllStatic {
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1113 friend class JavaClasses;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1114
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1115 private:
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1116 static int _target_offset;
1507
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1117 static int _caller_method_offset;
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1118 static int _caller_bci_offset;
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1119
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1120 static void compute_offsets();
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1121
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1122 public:
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1123 // Accessors
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1124 static oop target(oop site);
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1125 static void set_target(oop site, oop target);
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1126
1507
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1127 static oop caller_method(oop site);
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1128 static void set_caller_method(oop site, oop ref);
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1129
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1130 static jint caller_bci(oop site);
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1131 static void set_caller_bci(oop site, jint bci);
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1132
1135
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1133 // Testers
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1134 static bool is_subclass(klassOop klass) {
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1135 return Klass::cast(klass)->is_subclass_of(SystemDictionary::CallSite_klass());
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1136 }
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1137 static bool is_instance(oop obj) {
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1138 return obj != NULL && is_subclass(obj->klass());
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1139 }
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 1133
diff changeset
1140
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1141 // Accessors for code generation:
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1142 static int target_offset_in_bytes() { return _target_offset; }
1507
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1143 static int caller_method_offset_in_bytes() { return _caller_method_offset; }
cd5dbf694d45 6939134: JSR 292 adjustments to method handle invocation
jrose
parents: 1142
diff changeset
1144 static int caller_bci_offset_in_bytes() { return _caller_bci_offset; }
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
1145 };
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1146
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 665
diff changeset
1147
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1148 // Interface to java.security.AccessControlContext objects
a61af66fc99e Initial load
duke
parents:
diff changeset
1149
a61af66fc99e Initial load
duke
parents:
diff changeset
1150 class java_security_AccessControlContext: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1151 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1152 // Note that for this class the layout changed between JDK1.2 and JDK1.3,
a61af66fc99e Initial load
duke
parents:
diff changeset
1153 // so we compute the offsets at startup rather than hard-wiring them.
a61af66fc99e Initial load
duke
parents:
diff changeset
1154 static int _context_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1155 static int _privilegedContext_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1156 static int _isPrivileged_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1157
a61af66fc99e Initial load
duke
parents:
diff changeset
1158 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
1159 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1160 static oop create(objArrayHandle context, bool isPrivileged, Handle privileged_context, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
1161
a61af66fc99e Initial load
duke
parents:
diff changeset
1162 // Debugging/initialization
a61af66fc99e Initial load
duke
parents:
diff changeset
1163 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
1164 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1165
a61af66fc99e Initial load
duke
parents:
diff changeset
1166
a61af66fc99e Initial load
duke
parents:
diff changeset
1167 // Interface to java.lang.ClassLoader objects
a61af66fc99e Initial load
duke
parents:
diff changeset
1168
a61af66fc99e Initial load
duke
parents:
diff changeset
1169 class java_lang_ClassLoader : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1170 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1171 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
1172 hc_parent_offset = 0
a61af66fc99e Initial load
duke
parents:
diff changeset
1173 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1174
a61af66fc99e Initial load
duke
parents:
diff changeset
1175 static int parent_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1176
a61af66fc99e Initial load
duke
parents:
diff changeset
1177 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1178 static oop parent(oop loader);
a61af66fc99e Initial load
duke
parents:
diff changeset
1179
a61af66fc99e Initial load
duke
parents:
diff changeset
1180 static bool is_trusted_loader(oop loader);
a61af66fc99e Initial load
duke
parents:
diff changeset
1181
a61af66fc99e Initial load
duke
parents:
diff changeset
1182 // Fix for 4474172
a61af66fc99e Initial load
duke
parents:
diff changeset
1183 static oop non_reflection_class_loader(oop loader);
a61af66fc99e Initial load
duke
parents:
diff changeset
1184
a61af66fc99e Initial load
duke
parents:
diff changeset
1185 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
1186 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
1187 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1188
a61af66fc99e Initial load
duke
parents:
diff changeset
1189
a61af66fc99e Initial load
duke
parents:
diff changeset
1190 // Interface to java.lang.System objects
a61af66fc99e Initial load
duke
parents:
diff changeset
1191
a61af66fc99e Initial load
duke
parents:
diff changeset
1192 class java_lang_System : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1193 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1194 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
1195 hc_static_in_offset = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
1196 hc_static_out_offset = 1,
a61af66fc99e Initial load
duke
parents:
diff changeset
1197 hc_static_err_offset = 2
a61af66fc99e Initial load
duke
parents:
diff changeset
1198 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1199
a61af66fc99e Initial load
duke
parents:
diff changeset
1200 static int static_in_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1201 static int static_out_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1202 static int static_err_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1203
a61af66fc99e Initial load
duke
parents:
diff changeset
1204 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1205 static int in_offset_in_bytes();
a61af66fc99e Initial load
duke
parents:
diff changeset
1206 static int out_offset_in_bytes();
a61af66fc99e Initial load
duke
parents:
diff changeset
1207 static int err_offset_in_bytes();
a61af66fc99e Initial load
duke
parents:
diff changeset
1208
a61af66fc99e Initial load
duke
parents:
diff changeset
1209 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
1210 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
1211 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1212
a61af66fc99e Initial load
duke
parents:
diff changeset
1213
a61af66fc99e Initial load
duke
parents:
diff changeset
1214 // Interface to java.lang.StackTraceElement objects
a61af66fc99e Initial load
duke
parents:
diff changeset
1215
a61af66fc99e Initial load
duke
parents:
diff changeset
1216 class java_lang_StackTraceElement: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1217 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1218 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
1219 hc_declaringClass_offset = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
1220 hc_methodName_offset = 1,
a61af66fc99e Initial load
duke
parents:
diff changeset
1221 hc_fileName_offset = 2,
a61af66fc99e Initial load
duke
parents:
diff changeset
1222 hc_lineNumber_offset = 3
a61af66fc99e Initial load
duke
parents:
diff changeset
1223 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1224
a61af66fc99e Initial load
duke
parents:
diff changeset
1225 static int declaringClass_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1226 static int methodName_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1227 static int fileName_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1228 static int lineNumber_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1229
a61af66fc99e Initial load
duke
parents:
diff changeset
1230 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1231 // Setters
a61af66fc99e Initial load
duke
parents:
diff changeset
1232 static void set_declaringClass(oop element, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
1233 static void set_methodName(oop element, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
1234 static void set_fileName(oop element, oop value);
a61af66fc99e Initial load
duke
parents:
diff changeset
1235 static void set_lineNumber(oop element, int value);
a61af66fc99e Initial load
duke
parents:
diff changeset
1236
a61af66fc99e Initial load
duke
parents:
diff changeset
1237 // Create an instance of StackTraceElement
a61af66fc99e Initial load
duke
parents:
diff changeset
1238 static oop create(methodHandle m, int bci, TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
1239
a61af66fc99e Initial load
duke
parents:
diff changeset
1240 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
1241 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
1242 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1243
a61af66fc99e Initial load
duke
parents:
diff changeset
1244
a61af66fc99e Initial load
duke
parents:
diff changeset
1245 // Interface to java.lang.AssertionStatusDirectives objects
a61af66fc99e Initial load
duke
parents:
diff changeset
1246
a61af66fc99e Initial load
duke
parents:
diff changeset
1247 class java_lang_AssertionStatusDirectives: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1248 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1249 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
1250 hc_classes_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
1251 hc_classEnabled_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
1252 hc_packages_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
1253 hc_packageEnabled_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
1254 hc_deflt_offset
a61af66fc99e Initial load
duke
parents:
diff changeset
1255 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1256
a61af66fc99e Initial load
duke
parents:
diff changeset
1257 static int classes_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1258 static int classEnabled_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1259 static int packages_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1260 static int packageEnabled_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1261 static int deflt_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1262
a61af66fc99e Initial load
duke
parents:
diff changeset
1263 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1264 // Setters
a61af66fc99e Initial load
duke
parents:
diff changeset
1265 static void set_classes(oop obj, oop val);
a61af66fc99e Initial load
duke
parents:
diff changeset
1266 static void set_classEnabled(oop obj, oop val);
a61af66fc99e Initial load
duke
parents:
diff changeset
1267 static void set_packages(oop obj, oop val);
a61af66fc99e Initial load
duke
parents:
diff changeset
1268 static void set_packageEnabled(oop obj, oop val);
a61af66fc99e Initial load
duke
parents:
diff changeset
1269 static void set_deflt(oop obj, bool val);
a61af66fc99e Initial load
duke
parents:
diff changeset
1270 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
1271 friend class JavaClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
1272 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1273
a61af66fc99e Initial load
duke
parents:
diff changeset
1274
a61af66fc99e Initial load
duke
parents:
diff changeset
1275 class java_nio_Buffer: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1276 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1277 static int _limit_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1278
a61af66fc99e Initial load
duke
parents:
diff changeset
1279 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1280 static int limit_offset();
a61af66fc99e Initial load
duke
parents:
diff changeset
1281 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
1282 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1283
a61af66fc99e Initial load
duke
parents:
diff changeset
1284 class sun_misc_AtomicLongCSImpl: AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1285 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1286 static int _value_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1287
a61af66fc99e Initial load
duke
parents:
diff changeset
1288 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1289 static int value_offset();
a61af66fc99e Initial load
duke
parents:
diff changeset
1290 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
1291 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1292
a61af66fc99e Initial load
duke
parents:
diff changeset
1293 class java_util_concurrent_locks_AbstractOwnableSynchronizer : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1294 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1295 static int _owner_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
1296 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1297 static void initialize(TRAPS);
a61af66fc99e Initial load
duke
parents:
diff changeset
1298 static oop get_owner_threadObj(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
1299 };
a61af66fc99e Initial load
duke
parents:
diff changeset
1300
a61af66fc99e Initial load
duke
parents:
diff changeset
1301 // Interface to hard-coded offset checking
a61af66fc99e Initial load
duke
parents:
diff changeset
1302
a61af66fc99e Initial load
duke
parents:
diff changeset
1303 class JavaClasses : AllStatic {
a61af66fc99e Initial load
duke
parents:
diff changeset
1304 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
1305 static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
a61af66fc99e Initial load
duke
parents:
diff changeset
1306 static bool check_static_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
132
60b728ec77c1 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 113
diff changeset
1307 static bool check_constant(const char *klass_name, int constant, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1308 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
1309 static void compute_hard_coded_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
1310 static void compute_offsets();
a61af66fc99e Initial load
duke
parents:
diff changeset
1311 static void check_offsets() PRODUCT_RETURN;
a61af66fc99e Initial load
duke
parents:
diff changeset
1312 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
1313
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1793
diff changeset
1314 #endif // SHARE_VM_CLASSFILE_JAVACLASSES_HPP