171 } |
171 } |
172 ShouldNotReachHere(); |
172 ShouldNotReachHere(); |
173 return T_ILLEGAL; |
173 return T_ILLEGAL; |
174 } |
174 } |
175 |
175 |
176 // ===== object constructor calls ===== |
|
177 |
|
178 void JavaCalls::call_default_constructor(JavaThread* thread, methodHandle method, Handle receiver, TRAPS) { |
|
179 assert(method->name() == vmSymbols::object_initializer_name(), "Should only be called for default constructor"); |
|
180 assert(method->signature() == vmSymbols::void_method_signature(), "Should only be called for default constructor"); |
|
181 |
|
182 InstanceKlass* ik = method->method_holder(); |
|
183 if (ik->is_initialized() && ik->has_vanilla_constructor()) { |
|
184 // safe to skip constructor call |
|
185 } else { |
|
186 static JavaValue result(T_VOID); |
|
187 JavaCallArguments args(receiver); |
|
188 call(&result, method, &args, CHECK); |
|
189 } |
|
190 } |
|
191 |
|
192 // ============ Virtual calls ============ |
176 // ============ Virtual calls ============ |
193 |
177 |
194 void JavaCalls::call_virtual(JavaValue* result, KlassHandle spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) { |
178 void JavaCalls::call_virtual(JavaValue* result, KlassHandle spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) { |
195 CallInfo callinfo; |
179 CallInfo callinfo; |
196 Handle receiver = args->receiver(); |
180 Handle receiver = args->receiver(); |