< prev index next > src/hotspot/share/prims/jvmtiImpl.cpp
Print this page
assert(ty_sign != nullptr, "type signature must not be null");
assert(thread != nullptr, "thread must not be null");
assert(klass != nullptr, "klass must not be null");
int len = (int) strlen(ty_sign);
- if (ty_sign[0] == JVM_SIGNATURE_CLASS &&
+ if ((ty_sign[0] == JVM_SIGNATURE_CLASS ||
+ ty_sign[0] == JVM_SIGNATURE_PRIMITIVE_OBJECT) &&
ty_sign[len-1] == JVM_SIGNATURE_ENDCLASS) { // Need pure class/interface name
ty_sign++;
len -= 2;
}
TempNewSymbol ty_sym = SymbolTable::new_symbol(ty_sign, len);
case T_CHAR:
case T_BOOLEAN:
slot_type = T_INT;
break;
case T_ARRAY:
+ case T_PRIMITIVE_OBJECT:
slot_type = T_OBJECT;
break;
default:
break;
};
// If we are updating an oop then get the oop from the handle
// since the handle will be long gone by the time the deopt
// happens. The oop stored in the deferred local will be
// gc'd on its own.
- if (_type == T_OBJECT) {
+ if (_type == T_OBJECT || _type == T_PRIMITIVE_OBJECT) {
_value.l = cast_from_oop<jobject>(JNIHandles::resolve_external_guard(_value.l));
}
// Re-read the vframe so we can see that it is deoptimized
// [ Only need because of assert in update_local() ]
_jvf = get_java_vframe();
switch (_type) {
case T_INT: locals->set_int_at (_index, _value.i); break;
case T_LONG: locals->set_long_at (_index, _value.j); break;
case T_FLOAT: locals->set_float_at (_index, _value.f); break;
case T_DOUBLE: locals->set_double_at(_index, _value.d); break;
- case T_OBJECT: {
+ case T_OBJECT:
+ case T_PRIMITIVE_OBJECT: {
Handle ob_h(current_thread, JNIHandles::resolve_external_guard(_value.l));
locals->set_obj_at (_index, ob_h);
break;
}
default: ShouldNotReachHere();
switch (_type) {
case T_INT: _value.i = locals->int_at (_index); break;
case T_LONG: _value.j = locals->long_at (_index); break;
case T_FLOAT: _value.f = locals->float_at (_index); break;
case T_DOUBLE: _value.d = locals->double_at(_index); break;
- case T_OBJECT: {
+ case T_OBJECT:
+ case T_PRIMITIVE_OBJECT: {
// Wrap the oop to be returned in a local JNI handle since
// oops_do() no longer applies after doit() is finished.
oop obj = locals->obj_at(_index)();
_value.l = JNIHandles::make_local(_calling_thread, obj);
break;
< prev index next >