118 }
119
120 static inline Klass* asKlass(Handle jvmci_type) {
121 return java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(jvmci_type));
122 }
123
124 static inline Klass* asKlass(oop jvmci_type) {
125 return java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(jvmci_type));
126 }
127
128 static inline Klass* asKlass(jlong metaspaceKlass) {
129 return (Klass*) (address) metaspaceKlass;
130 }
131
132 static inline MethodData* asMethodData(jlong metaspaceMethodData) {
133 return (MethodData*) (address) metaspaceMethodData;
134 }
135
136 static oop get_jvmci_method(const methodHandle& method, TRAPS);
137
138 static oop get_jvmci_type(KlassHandle klass, TRAPS);
139 };
140
141 class JavaArgumentUnboxer : public SignatureIterator {
142 protected:
143 JavaCallArguments* _jca;
144 arrayOop _args;
145 int _index;
146
147 Handle next_arg(BasicType expectedType) {
148 assert(_index < _args->length(), "out of bounds");
149 oop arg=((objArrayOop) (_args))->obj_at(_index++);
150 assert(expectedType == T_OBJECT || java_lang_boxing_object::is_instance(arg, expectedType), "arg type mismatch");
151 return Handle(Thread::current(), arg);
152 }
153
154 public:
155 JavaArgumentUnboxer(Symbol* signature, JavaCallArguments* jca, arrayOop args, bool is_static) : SignatureIterator(signature) {
156 this->_return_type = T_ILLEGAL;
157 _jca = jca;
158 _index = 0;
|
118 }
119
120 static inline Klass* asKlass(Handle jvmci_type) {
121 return java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(jvmci_type));
122 }
123
124 static inline Klass* asKlass(oop jvmci_type) {
125 return java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(jvmci_type));
126 }
127
128 static inline Klass* asKlass(jlong metaspaceKlass) {
129 return (Klass*) (address) metaspaceKlass;
130 }
131
132 static inline MethodData* asMethodData(jlong metaspaceMethodData) {
133 return (MethodData*) (address) metaspaceMethodData;
134 }
135
136 static oop get_jvmci_method(const methodHandle& method, TRAPS);
137
138 static oop get_jvmci_type(Klass* klass, TRAPS);
139 };
140
141 class JavaArgumentUnboxer : public SignatureIterator {
142 protected:
143 JavaCallArguments* _jca;
144 arrayOop _args;
145 int _index;
146
147 Handle next_arg(BasicType expectedType) {
148 assert(_index < _args->length(), "out of bounds");
149 oop arg=((objArrayOop) (_args))->obj_at(_index++);
150 assert(expectedType == T_OBJECT || java_lang_boxing_object::is_instance(arg, expectedType), "arg type mismatch");
151 return Handle(Thread::current(), arg);
152 }
153
154 public:
155 JavaArgumentUnboxer(Symbol* signature, JavaCallArguments* jca, arrayOop args, bool is_static) : SignatureIterator(signature) {
156 this->_return_type = T_ILLEGAL;
157 _jca = jca;
158 _index = 0;
|