src/hotspot/share/runtime/javaCalls.cpp
changeset 50152 b5023063346d
parent 49593 4dd58ecc9912
child 52067 2e72562697bf
equal deleted inserted replaced
50151:e2eff4dcebbd 50152:b5023063346d
   197   JavaCalls::call(result, method, args, CHECK);
   197   JavaCalls::call(result, method, args, CHECK);
   198 }
   198 }
   199 
   199 
   200 
   200 
   201 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, TRAPS) {
   201 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, TRAPS) {
   202   JavaCallArguments args(receiver); // One oop argument
   202   JavaCallArguments args(receiver);
   203   call_virtual(result, spec_klass, name, signature, &args, CHECK);
   203   call_virtual(result, spec_klass, name, signature, &args, CHECK);
   204 }
   204 }
   205 
   205 
   206 
   206 
   207 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
   207 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
   208   JavaCallArguments args(receiver); // One oop argument
   208   JavaCallArguments args(receiver);
   209   args.push_oop(arg1);
   209   args.push_oop(arg1);
   210   call_virtual(result, spec_klass, name, signature, &args, CHECK);
   210   call_virtual(result, spec_klass, name, signature, &args, CHECK);
   211 }
   211 }
   212 
   212 
   213 
   213 
   214 
   214 
   215 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
   215 void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
   216   JavaCallArguments args(receiver); // One oop argument
   216   JavaCallArguments args(receiver);
   217   args.push_oop(arg1);
   217   args.push_oop(arg1);
   218   args.push_oop(arg2);
   218   args.push_oop(arg2);
   219   call_virtual(result, spec_klass, name, signature, &args, CHECK);
   219   call_virtual(result, spec_klass, name, signature, &args, CHECK);
   220 }
   220 }
   221 
   221 
   233   JavaCalls::call(result, method, args, CHECK);
   233   JavaCalls::call(result, method, args, CHECK);
   234 }
   234 }
   235 
   235 
   236 
   236 
   237 void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, TRAPS) {
   237 void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, TRAPS) {
   238   JavaCallArguments args(receiver); // One oop argument
   238   JavaCallArguments args(receiver);
   239   call_special(result, klass, name, signature, &args, CHECK);
   239   call_special(result, klass, name, signature, &args, CHECK);
   240 }
   240 }
   241 
   241 
   242 
   242 
   243 void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
   243 void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
   244   JavaCallArguments args(receiver); // One oop argument
   244   JavaCallArguments args(receiver);
   245   args.push_oop(arg1);
   245   args.push_oop(arg1);
   246   call_special(result, klass, name, signature, &args, CHECK);
   246   call_special(result, klass, name, signature, &args, CHECK);
   247 }
   247 }
   248 
   248 
   249 
   249 
   250 void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
   250 void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
   251   JavaCallArguments args(receiver); // One oop argument
   251   JavaCallArguments args(receiver);
   252   args.push_oop(arg1);
   252   args.push_oop(arg1);
   253   args.push_oop(arg2);
   253   args.push_oop(arg2);
   254   call_special(result, klass, name, signature, &args, CHECK);
   254   call_special(result, klass, name, signature, &args, CHECK);
   255 }
   255 }
   256 
   256 
   268   JavaCalls::call(result, method, args, CHECK);
   268   JavaCalls::call(result, method, args, CHECK);
   269 }
   269 }
   270 
   270 
   271 
   271 
   272 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, TRAPS) {
   272 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, TRAPS) {
   273   JavaCallArguments args; // No argument
   273   JavaCallArguments args;
   274   call_static(result, klass, name, signature, &args, CHECK);
   274   call_static(result, klass, name, signature, &args, CHECK);
   275 }
   275 }
   276 
   276 
   277 
   277 
   278 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
   278 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
   279   JavaCallArguments args(arg1); // One oop argument
   279   JavaCallArguments args(arg1);
   280   call_static(result, klass, name, signature, &args, CHECK);
   280   call_static(result, klass, name, signature, &args, CHECK);
   281 }
   281 }
   282 
   282 
   283 
   283 
   284 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
   284 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
   285   JavaCallArguments args; // One oop argument
   285   JavaCallArguments args;
   286   args.push_oop(arg1);
   286   args.push_oop(arg1);
   287   args.push_oop(arg2);
   287   args.push_oop(arg2);
   288   call_static(result, klass, name, signature, &args, CHECK);
   288   call_static(result, klass, name, signature, &args, CHECK);
   289 }
   289 }
   290 
   290 
   291 
   291 
   292 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS) {
   292 void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS) {
   293   JavaCallArguments args; // One oop argument
   293   JavaCallArguments args;
   294   args.push_oop(arg1);
   294   args.push_oop(arg1);
   295   args.push_oop(arg2);
   295   args.push_oop(arg2);
   296   args.push_oop(arg3);
   296   args.push_oop(arg3);
   297   call_static(result, klass, name, signature, &args, CHECK);
   297   call_static(result, klass, name, signature, &args, CHECK);
       
   298 }
       
   299 
       
   300 // ============ allocate and initialize new object instance ============
       
   301 
       
   302 Handle JavaCalls::construct_new_instance(InstanceKlass* klass, Symbol* constructor_signature, JavaCallArguments* args, TRAPS) {
       
   303   klass->initialize(CHECK_NH); // Quick no-op if already initialized.
       
   304   Handle obj = klass->allocate_instance_handle(CHECK_NH);
       
   305   JavaValue void_result(T_VOID);
       
   306   args->set_receiver(obj); // inserts <obj> as the first argument.
       
   307   JavaCalls::call_special(&void_result, klass,
       
   308                           vmSymbols::object_initializer_name(),
       
   309                           constructor_signature, args, CHECK_NH);
       
   310   return obj;
       
   311 }
       
   312 
       
   313 Handle JavaCalls::construct_new_instance(InstanceKlass* klass, Symbol* constructor_signature, TRAPS) {
       
   314   JavaCallArguments args;
       
   315   return JavaCalls::construct_new_instance(klass, constructor_signature, &args, CHECK_NH);
       
   316 }
       
   317 
       
   318 Handle JavaCalls::construct_new_instance(InstanceKlass* klass, Symbol* constructor_signature, Handle arg1, TRAPS) {
       
   319   JavaCallArguments args;
       
   320   args.push_oop(arg1);
       
   321   return JavaCalls::construct_new_instance(klass, constructor_signature, &args, CHECK_NH);
       
   322 }
       
   323 
       
   324 Handle JavaCalls::construct_new_instance(InstanceKlass* klass, Symbol* constructor_signature, Handle arg1, Handle arg2, TRAPS) {
       
   325   JavaCallArguments args;
       
   326   args.push_oop(arg1);
       
   327   args.push_oop(arg2);
       
   328   return JavaCalls::construct_new_instance(klass, constructor_signature, &args, CHECK_NH);
   298 }
   329 }
   299 
   330 
   300 // -------------------------------------------------
   331 // -------------------------------------------------
   301 // Implementation of JavaCalls (low level)
   332 // Implementation of JavaCalls (low level)
   302 
   333