Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/javaCalls.cpp @ 2181:d25d4ca69222
Merge.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Wed, 16 Feb 2011 13:47:20 +0100 |
parents | 06f017f7daa7 3582bf76420e |
children | 9569fdf936ff |
comparison
equal
deleted
inserted
replaced
2108:50b45e2d9725 | 2181:d25d4ca69222 |
---|---|
216 } | 216 } |
217 | 217 |
218 | 218 |
219 // ============ Virtual calls ============ | 219 // ============ Virtual calls ============ |
220 | 220 |
221 void JavaCalls::call_virtual(JavaValue* result, KlassHandle spec_klass, symbolHandle name, symbolHandle signature, JavaCallArguments* args, TRAPS) { | 221 void JavaCalls::call_virtual(JavaValue* result, KlassHandle spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) { |
222 CallInfo callinfo; | 222 CallInfo callinfo; |
223 Handle receiver = args->receiver(); | 223 Handle receiver = args->receiver(); |
224 KlassHandle recvrKlass(THREAD, receiver.is_null() ? (klassOop)NULL : receiver->klass()); | 224 KlassHandle recvrKlass(THREAD, receiver.is_null() ? (klassOop)NULL : receiver->klass()); |
225 LinkResolver::resolve_virtual_call( | 225 LinkResolver::resolve_virtual_call( |
226 callinfo, receiver, recvrKlass, spec_klass, name, signature, | 226 callinfo, receiver, recvrKlass, spec_klass, name, signature, |
231 // Invoke the method | 231 // Invoke the method |
232 JavaCalls::call(result, method, args, CHECK); | 232 JavaCalls::call(result, method, args, CHECK); |
233 } | 233 } |
234 | 234 |
235 | 235 |
236 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, symbolHandle name, symbolHandle signature, TRAPS) { | 236 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, TRAPS) { |
237 JavaCallArguments args(receiver); // One oop argument | 237 JavaCallArguments args(receiver); // One oop argument |
238 call_virtual(result, spec_klass, name, signature, &args, CHECK); | 238 call_virtual(result, spec_klass, name, signature, &args, CHECK); |
239 } | 239 } |
240 | 240 |
241 | 241 |
242 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, symbolHandle name, symbolHandle signature, Handle arg1, TRAPS) { | 242 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) { |
243 JavaCallArguments args(receiver); // One oop argument | 243 JavaCallArguments args(receiver); // One oop argument |
244 args.push_oop(arg1); | 244 args.push_oop(arg1); |
245 call_virtual(result, spec_klass, name, signature, &args, CHECK); | 245 call_virtual(result, spec_klass, name, signature, &args, CHECK); |
246 } | 246 } |
247 | 247 |
248 | 248 |
249 | 249 |
250 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, symbolHandle name, symbolHandle signature, Handle arg1, Handle arg2, TRAPS) { | 250 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) { |
251 JavaCallArguments args(receiver); // One oop argument | 251 JavaCallArguments args(receiver); // One oop argument |
252 args.push_oop(arg1); | 252 args.push_oop(arg1); |
253 args.push_oop(arg2); | 253 args.push_oop(arg2); |
254 call_virtual(result, spec_klass, name, signature, &args, CHECK); | 254 call_virtual(result, spec_klass, name, signature, &args, CHECK); |
255 } | 255 } |
256 | 256 |
257 | 257 |
258 // ============ Special calls ============ | 258 // ============ Special calls ============ |
259 | 259 |
260 void JavaCalls::call_special(JavaValue* result, KlassHandle klass, symbolHandle name, symbolHandle signature, JavaCallArguments* args, TRAPS) { | 260 void JavaCalls::call_special(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) { |
261 CallInfo callinfo; | 261 CallInfo callinfo; |
262 LinkResolver::resolve_special_call(callinfo, klass, name, signature, KlassHandle(), false, CHECK); | 262 LinkResolver::resolve_special_call(callinfo, klass, name, signature, KlassHandle(), false, CHECK); |
263 methodHandle method = callinfo.selected_method(); | 263 methodHandle method = callinfo.selected_method(); |
264 assert(method.not_null(), "should have thrown exception"); | 264 assert(method.not_null(), "should have thrown exception"); |
265 | 265 |
266 // Invoke the method | 266 // Invoke the method |
267 JavaCalls::call(result, method, args, CHECK); | 267 JavaCalls::call(result, method, args, CHECK); |
268 } | 268 } |
269 | 269 |
270 | 270 |
271 void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, symbolHandle name, symbolHandle signature, TRAPS) { | 271 void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) { |
272 JavaCallArguments args(receiver); // One oop argument | 272 JavaCallArguments args(receiver); // One oop argument |
273 call_special(result, klass, name, signature, &args, CHECK); | 273 call_special(result, klass, name, signature, &args, CHECK); |
274 } | 274 } |
275 | 275 |
276 | 276 |
277 void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, symbolHandle name, symbolHandle signature, Handle arg1, TRAPS) { | 277 void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) { |
278 JavaCallArguments args(receiver); // One oop argument | 278 JavaCallArguments args(receiver); // One oop argument |
279 args.push_oop(arg1); | 279 args.push_oop(arg1); |
280 call_special(result, klass, name, signature, &args, CHECK); | 280 call_special(result, klass, name, signature, &args, CHECK); |
281 } | 281 } |
282 | 282 |
283 | 283 |
284 void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, symbolHandle name, symbolHandle signature, Handle arg1, Handle arg2, TRAPS) { | 284 void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) { |
285 JavaCallArguments args(receiver); // One oop argument | 285 JavaCallArguments args(receiver); // One oop argument |
286 args.push_oop(arg1); | 286 args.push_oop(arg1); |
287 args.push_oop(arg2); | 287 args.push_oop(arg2); |
288 call_special(result, klass, name, signature, &args, CHECK); | 288 call_special(result, klass, name, signature, &args, CHECK); |
289 } | 289 } |
290 | 290 |
291 | 291 |
292 // ============ Static calls ============ | 292 // ============ Static calls ============ |
293 | 293 |
294 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, symbolHandle name, symbolHandle signature, JavaCallArguments* args, TRAPS) { | 294 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) { |
295 CallInfo callinfo; | 295 CallInfo callinfo; |
296 LinkResolver::resolve_static_call(callinfo, klass, name, signature, KlassHandle(), false, true, CHECK); | 296 LinkResolver::resolve_static_call(callinfo, klass, name, signature, KlassHandle(), false, true, CHECK); |
297 methodHandle method = callinfo.selected_method(); | 297 methodHandle method = callinfo.selected_method(); |
298 assert(method.not_null(), "should have thrown exception"); | 298 assert(method.not_null(), "should have thrown exception"); |
299 | 299 |
300 // Invoke the method | 300 // Invoke the method |
301 JavaCalls::call(result, method, args, CHECK); | 301 JavaCalls::call(result, method, args, CHECK); |
302 } | 302 } |
303 | 303 |
304 | 304 |
305 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, symbolHandle name, symbolHandle signature, TRAPS) { | 305 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) { |
306 JavaCallArguments args; // No argument | 306 JavaCallArguments args; // No argument |
307 call_static(result, klass, name, signature, &args, CHECK); | 307 call_static(result, klass, name, signature, &args, CHECK); |
308 } | 308 } |
309 | 309 |
310 | 310 |
311 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, symbolHandle name, symbolHandle signature, Handle arg1, TRAPS) { | 311 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) { |
312 JavaCallArguments args(arg1); // One oop argument | 312 JavaCallArguments args(arg1); // One oop argument |
313 call_static(result, klass, name, signature, &args, CHECK); | 313 call_static(result, klass, name, signature, &args, CHECK); |
314 } | 314 } |
315 | 315 |
316 | 316 |
317 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, symbolHandle name, symbolHandle signature, Handle arg1, Handle arg2, TRAPS) { | 317 void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) { |
318 JavaCallArguments args; // One oop argument | 318 JavaCallArguments args; // One oop argument |
319 args.push_oop(arg1); | 319 args.push_oop(arg1); |
320 args.push_oop(arg2); | 320 args.push_oop(arg2); |
321 call_static(result, klass, name, signature, &args, CHECK); | 321 call_static(result, klass, name, signature, &args, CHECK); |
322 } | 322 } |
476 Thread* _thread; | 476 Thread* _thread; |
477 | 477 |
478 public: | 478 public: |
479 bool _is_return; | 479 bool _is_return; |
480 | 480 |
481 SignatureChekker(symbolHandle signature, BasicType return_type, bool is_static, bool* is_oop, intptr_t* value, Thread* thread) : SignatureIterator(signature) { | 481 SignatureChekker(Symbol* signature, BasicType return_type, bool is_static, bool* is_oop, intptr_t* value, Thread* thread) : SignatureIterator(signature) { |
482 _is_oop = is_oop; | 482 _is_oop = is_oop; |
483 _is_return = false; | 483 _is_return = false; |
484 _return_type = return_type; | 484 _return_type = return_type; |
485 _pos = 0; | 485 _pos = 0; |
486 _value = value; | 486 _value = value; |
567 | 567 |
568 // Treat T_OBJECT and T_ARRAY as the same | 568 // Treat T_OBJECT and T_ARRAY as the same |
569 if (return_type == T_ARRAY) return_type = T_OBJECT; | 569 if (return_type == T_ARRAY) return_type = T_OBJECT; |
570 | 570 |
571 // Check that oop information is correct | 571 // Check that oop information is correct |
572 symbolHandle signature (thread, method->signature()); | 572 Symbol* signature = method->signature(); |
573 | 573 |
574 SignatureChekker sc(signature, return_type, method->is_static(),_is_oop, _value, thread); | 574 SignatureChekker sc(signature, return_type, method->is_static(),_is_oop, _value, thread); |
575 sc.iterate_parameters(); | 575 sc.iterate_parameters(); |
576 sc.check_doing_return(true); | 576 sc.check_doing_return(true); |
577 sc.iterate_returntype(); | 577 sc.iterate_returntype(); |