< prev index next >

src/hotspot/share/runtime/handles.inline.hpp

Print this page

 36 
 37 inline Handle::Handle(Thread* thread, oop obj) {
 38   assert(thread == Thread::current(), "sanity check");
 39   if (obj == NULL) {
 40     _handle = NULL;
 41   } else {
 42     _handle = thread->handle_area()->allocate_handle(obj);
 43   }
 44 }
 45 
 46 // Inline constructors for Specific Handles for different oop types
 47 #define DEF_HANDLE_CONSTR(type, is_a)                   \
 48 inline type##Handle::type##Handle (Thread* thread, type##Oop obj) : Handle(thread, (oop)obj) { \
 49   assert(is_null() || ((oop)obj)->is_a(), "illegal type");                \
 50 }
 51 
 52 DEF_HANDLE_CONSTR(instance , is_instance_noinline )
 53 DEF_HANDLE_CONSTR(array    , is_array_noinline    )
 54 DEF_HANDLE_CONSTR(objArray , is_objArray_noinline )
 55 DEF_HANDLE_CONSTR(typeArray, is_typeArray_noinline)

 56 
 57 // Constructor for metadata handles
 58 #define DEF_METADATA_HANDLE_FN(name, type) \
 59 inline name##Handle::name##Handle(Thread* thread, type* obj) : _value(obj), _thread(thread) { \
 60   if (obj != NULL) {                                                   \
 61     assert(((Metadata*)obj)->is_valid(), "obj is valid");              \
 62     assert(_thread == Thread::current(), "thread must be current");    \
 63     assert(_thread->is_in_live_stack((address)this), "not on stack?"); \
 64     _thread->metadata_handles()->push((Metadata*)obj);                 \
 65   }                                                                    \
 66 }                                                                      \
 67 
 68 DEF_METADATA_HANDLE_FN(method, Method)
 69 DEF_METADATA_HANDLE_FN(constantPool, ConstantPool)
 70 
 71 inline void HandleMark::push() {
 72   // This is intentionally a NOP. pop_and_restore will reset
 73   // values to the HandleMark further down the stack, typically
 74   // in JavaCalls::call_helper.
 75   debug_only(_area->_handle_mark_nesting++);

 36 
 37 inline Handle::Handle(Thread* thread, oop obj) {
 38   assert(thread == Thread::current(), "sanity check");
 39   if (obj == NULL) {
 40     _handle = NULL;
 41   } else {
 42     _handle = thread->handle_area()->allocate_handle(obj);
 43   }
 44 }
 45 
 46 // Inline constructors for Specific Handles for different oop types
 47 #define DEF_HANDLE_CONSTR(type, is_a)                   \
 48 inline type##Handle::type##Handle (Thread* thread, type##Oop obj) : Handle(thread, (oop)obj) { \
 49   assert(is_null() || ((oop)obj)->is_a(), "illegal type");                \
 50 }
 51 
 52 DEF_HANDLE_CONSTR(instance , is_instance_noinline )
 53 DEF_HANDLE_CONSTR(array    , is_array_noinline    )
 54 DEF_HANDLE_CONSTR(objArray , is_objArray_noinline )
 55 DEF_HANDLE_CONSTR(typeArray, is_typeArray_noinline)
 56 DEF_HANDLE_CONSTR(flatArray, is_flatArray_noinline)
 57 
 58 // Constructor for metadata handles
 59 #define DEF_METADATA_HANDLE_FN(name, type) \
 60 inline name##Handle::name##Handle(Thread* thread, type* obj) : _value(obj), _thread(thread) { \
 61   if (obj != NULL) {                                                   \
 62     assert(((Metadata*)obj)->is_valid(), "obj is valid");              \
 63     assert(_thread == Thread::current(), "thread must be current");    \
 64     assert(_thread->is_in_live_stack((address)this), "not on stack?"); \
 65     _thread->metadata_handles()->push((Metadata*)obj);                 \
 66   }                                                                    \
 67 }                                                                      \
 68 
 69 DEF_METADATA_HANDLE_FN(method, Method)
 70 DEF_METADATA_HANDLE_FN(constantPool, ConstantPool)
 71 
 72 inline void HandleMark::push() {
 73   // This is intentionally a NOP. pop_and_restore will reset
 74   // values to the HandleMark further down the stack, typically
 75   // in JavaCalls::call_helper.
 76   debug_only(_area->_handle_mark_nesting++);
< prev index next >