153
154 static inline Klass* asKlass(jlong metaspaceKlass) {
155 return (Klass*) (address) metaspaceKlass;
156 }
157
158 static inline MethodData* asMethodData(jlong metaspaceMethodData) {
159 return (MethodData*) (address) metaspaceMethodData;
160 }
161
162 static oop get_jvmci_method(const methodHandle& method, TRAPS);
163
164 static oop get_jvmci_type(Klass* klass, TRAPS);
165 };
166
167 class JavaArgumentUnboxer : public SignatureIterator {
168 protected:
169 JavaCallArguments* _jca;
170 arrayOop _args;
171 int _index;
172
173 Handle next_arg(BasicType expectedType) {
174 assert(_index < _args->length(), "out of bounds");
175 oop arg=((objArrayOop) (_args))->obj_at(_index++);
176 assert(expectedType == T_OBJECT || java_lang_boxing_object::is_instance(arg, expectedType), "arg type mismatch");
177 return Handle(Thread::current(), arg);
178 }
179
180 public:
181 JavaArgumentUnboxer(Symbol* signature, JavaCallArguments* jca, arrayOop args, bool is_static) : SignatureIterator(signature) {
182 this->_return_type = T_ILLEGAL;
183 _jca = jca;
184 _index = 0;
185 _args = args;
186 if (!is_static) {
187 _jca->push_oop(next_arg(T_OBJECT));
188 }
189 iterate();
190 assert(_index == args->length(), "arg count mismatch with signature");
191 }
192
193 inline void do_bool() { if (!is_return_type()) _jca->push_int(next_arg(T_BOOLEAN)->bool_field(java_lang_boxing_object::value_offset_in_bytes(T_BOOLEAN))); }
194 inline void do_char() { if (!is_return_type()) _jca->push_int(next_arg(T_CHAR)->char_field(java_lang_boxing_object::value_offset_in_bytes(T_CHAR))); }
195 inline void do_short() { if (!is_return_type()) _jca->push_int(next_arg(T_SHORT)->short_field(java_lang_boxing_object::value_offset_in_bytes(T_SHORT))); }
196 inline void do_byte() { if (!is_return_type()) _jca->push_int(next_arg(T_BYTE)->byte_field(java_lang_boxing_object::value_offset_in_bytes(T_BYTE))); }
197 inline void do_int() { if (!is_return_type()) _jca->push_int(next_arg(T_INT)->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT))); }
198
|
153
154 static inline Klass* asKlass(jlong metaspaceKlass) {
155 return (Klass*) (address) metaspaceKlass;
156 }
157
158 static inline MethodData* asMethodData(jlong metaspaceMethodData) {
159 return (MethodData*) (address) metaspaceMethodData;
160 }
161
162 static oop get_jvmci_method(const methodHandle& method, TRAPS);
163
164 static oop get_jvmci_type(Klass* klass, TRAPS);
165 };
166
167 class JavaArgumentUnboxer : public SignatureIterator {
168 protected:
169 JavaCallArguments* _jca;
170 arrayOop _args;
171 int _index;
172
173 Handle next_arg(BasicType expectedType);
174
175 public:
176 JavaArgumentUnboxer(Symbol* signature, JavaCallArguments* jca, arrayOop args, bool is_static) : SignatureIterator(signature) {
177 this->_return_type = T_ILLEGAL;
178 _jca = jca;
179 _index = 0;
180 _args = args;
181 if (!is_static) {
182 _jca->push_oop(next_arg(T_OBJECT));
183 }
184 iterate();
185 assert(_index == args->length(), "arg count mismatch with signature");
186 }
187
188 inline void do_bool() { if (!is_return_type()) _jca->push_int(next_arg(T_BOOLEAN)->bool_field(java_lang_boxing_object::value_offset_in_bytes(T_BOOLEAN))); }
189 inline void do_char() { if (!is_return_type()) _jca->push_int(next_arg(T_CHAR)->char_field(java_lang_boxing_object::value_offset_in_bytes(T_CHAR))); }
190 inline void do_short() { if (!is_return_type()) _jca->push_int(next_arg(T_SHORT)->short_field(java_lang_boxing_object::value_offset_in_bytes(T_SHORT))); }
191 inline void do_byte() { if (!is_return_type()) _jca->push_int(next_arg(T_BYTE)->byte_field(java_lang_boxing_object::value_offset_in_bytes(T_BYTE))); }
192 inline void do_int() { if (!is_return_type()) _jca->push_int(next_arg(T_INT)->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT))); }
193
|