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 |