98 |
98 |
99 |
99 |
100 BasicType MethodHandleChain::compute_bound_arg_type(oop target, methodOop m, int arg_slot, TRAPS) { |
100 BasicType MethodHandleChain::compute_bound_arg_type(oop target, methodOop m, int arg_slot, TRAPS) { |
101 // There is no direct indication of whether the argument is primitive or not. |
101 // There is no direct indication of whether the argument is primitive or not. |
102 // It is implied by the _vmentry code, and by the MethodType of the target. |
102 // It is implied by the _vmentry code, and by the MethodType of the target. |
103 // FIXME: Make it explicit MethodHandleImpl refactors out from MethodHandle |
|
104 BasicType arg_type = T_VOID; |
103 BasicType arg_type = T_VOID; |
105 if (target != NULL) { |
104 if (target != NULL) { |
106 oop mtype = java_dyn_MethodHandle::type(target); |
105 oop mtype = java_dyn_MethodHandle::type(target); |
107 int arg_num = MethodHandles::argument_slot_to_argnum(mtype, arg_slot); |
106 int arg_num = MethodHandles::argument_slot_to_argnum(mtype, arg_slot); |
108 if (arg_num >= 0) { |
107 if (arg_num >= 0) { |
958 int argc, MethodHandleWalker::ArgToken* argv, |
957 int argc, MethodHandleWalker::ArgToken* argv, |
959 TRAPS) { |
958 TRAPS) { |
960 if (m == NULL) { |
959 if (m == NULL) { |
961 // Get the intrinsic methodOop. |
960 // Get the intrinsic methodOop. |
962 m = vmIntrinsics::method_for(iid); |
961 m = vmIntrinsics::method_for(iid); |
|
962 if (m == NULL && iid == vmIntrinsics::_checkSpreadArgument && AllowTransitionalJSR292) { |
|
963 m = vmIntrinsics::method_for(vmIntrinsics::_checkSpreadArgument_TRANS); |
|
964 } |
|
965 if (m == NULL) { |
|
966 ArgToken zero; |
|
967 lose(vmIntrinsics::name_at(iid), CHECK_(zero)); |
|
968 } |
963 } |
969 } |
964 |
970 |
965 klassOop klass = m->method_holder(); |
971 klassOop klass = m->method_holder(); |
966 Symbol* name = m->name(); |
972 Symbol* name = m->name(); |
967 Symbol* signature = m->signature(); |
973 Symbol* signature = m->signature(); |