53 DEF_HANDLE_CONSTR(objArray , is_objArray_noinline ) |
53 DEF_HANDLE_CONSTR(objArray , is_objArray_noinline ) |
54 DEF_HANDLE_CONSTR(typeArray, is_typeArray_noinline) |
54 DEF_HANDLE_CONSTR(typeArray, is_typeArray_noinline) |
55 |
55 |
56 // Constructor for metadata handles |
56 // Constructor for metadata handles |
57 #define DEF_METADATA_HANDLE_FN(name, type) \ |
57 #define DEF_METADATA_HANDLE_FN(name, type) \ |
58 inline name##Handle::name##Handle(type* obj) : _value(obj), _thread(NULL) { \ |
|
59 if (obj != NULL) { \ |
|
60 assert(((Metadata*)obj)->is_valid(), "obj is valid"); \ |
|
61 _thread = Thread::current(); \ |
|
62 assert (_thread->is_in_stack((address)this), "not on stack?"); \ |
|
63 _thread->metadata_handles()->push((Metadata*)obj); \ |
|
64 } \ |
|
65 } \ |
|
66 inline name##Handle::name##Handle(Thread* thread, type* obj) : _value(obj), _thread(thread) { \ |
58 inline name##Handle::name##Handle(Thread* thread, type* obj) : _value(obj), _thread(thread) { \ |
67 if (obj != NULL) { \ |
59 if (obj != NULL) { \ |
68 assert(((Metadata*)obj)->is_valid(), "obj is valid"); \ |
60 assert(((Metadata*)obj)->is_valid(), "obj is valid"); \ |
69 assert(_thread == Thread::current(), "thread must be current"); \ |
61 assert(_thread == Thread::current(), "thread must be current"); \ |
70 assert (_thread->is_in_stack((address)this), "not on stack?"); \ |
62 assert (_thread->is_in_stack((address)this), "not on stack?"); \ |