< prev index next >

src/hotspot/share/prims/jvmtiImpl.cpp

Print this page
*** 508,11 ***
    assert(ty_sign != NULL, "type signature must not be NULL");
    assert(thread != NULL, "thread must not be NULL");
    assert(klass != NULL, "klass must not be NULL");
  
    int len = (int) strlen(ty_sign);
!   if (ty_sign[0] == JVM_SIGNATURE_CLASS &&
        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);
--- 508,12 ---
    assert(ty_sign != NULL, "type signature must not be NULL");
    assert(thread != NULL, "thread must not be NULL");
    assert(klass != NULL, "klass must not be NULL");
  
    int len = (int) strlen(ty_sign);
!   if ((ty_sign[0] == JVM_SIGNATURE_CLASS ||
+        ty_sign[0] == JVM_SIGNATURE_INLINE_TYPE) &&
        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);

*** 576,10 ***
--- 577,11 ---
    case T_CHAR:
    case T_BOOLEAN:
      slot_type = T_INT;
      break;
    case T_ARRAY:
+   case T_INLINE_TYPE:
      slot_type = T_OBJECT;
      break;
    default:
      break;
    };

*** 701,11 ***
  
        // 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) {
          _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();
--- 703,11 ---
  
        // 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 || _type == T_INLINE_TYPE) {
          _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();

*** 719,11 ***
      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: {
          Handle ob_h(current_thread, JNIHandles::resolve_external_guard(_value.l));
          locals->set_obj_at (_index, ob_h);
          break;
        }
        default: ShouldNotReachHere();
--- 721,12 ---
      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_INLINE_TYPE: {
          Handle ob_h(current_thread, JNIHandles::resolve_external_guard(_value.l));
          locals->set_obj_at (_index, ob_h);
          break;
        }
        default: ShouldNotReachHere();

*** 740,11 ***
        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: {
            // 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;
--- 743,12 ---
        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_INLINE_TYPE: {
            // 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 >