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();