diff a/src/hotspot/share/prims/jvmtiImpl.hpp b/src/hotspot/share/prims/jvmtiImpl.hpp --- a/src/hotspot/share/prims/jvmtiImpl.hpp +++ b/src/hotspot/share/prims/jvmtiImpl.hpp @@ -1,7 +1,7 @@ /* - * Copyright (c) 1999, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. @@ -178,10 +178,11 @@ BasicType _type; jvalue _value; javaVFrame* _jvf; bool _set; bool _self; + bool _need_clone; // THIS object is in a value object constructor static const jvalue _DEFAULT_VALUE; // It is possible to get the receiver out of a non-static native wrapper // frame. Use VM_GetReceiver to do this. @@ -190,19 +191,21 @@ jvmtiError _result; virtual javaVFrame* get_java_vframe() = 0; bool check_slot_type_lvt(javaVFrame* vf); bool check_slot_type_no_lvt(javaVFrame* vf); + void check_and_clone_this_value_object(); public: VM_BaseGetOrSetLocal(JavaThread* calling_thread, jint depth, jint index, BasicType type, jvalue value, bool set, bool self); jvalue value() { return _value; } jvmtiError result() { return _result; } void doit(); + void doit_epilogue(); bool allow_nested_vm_operations() const; virtual const char* name() const = 0; // Check that the klass is assignable to a type with the given signature. static bool is_assignable(const char* ty_sign, Klass* klass, Thread* thread);