35 SymbolHashMap* _classmap;
36 constantPoolHandle _cpool;
37 InstanceKlass* _ik;
38 jvmtiError _err;
39
40 protected:
41 InstanceKlass* ik() { return _ik; };
42 constantPoolHandle cpool() { return _cpool; };
43
44 u2 symbol_to_cpool_index(Symbol* sym) {
45 return _symmap->symbol_to_value(sym);
46 }
47
48 u2 class_symbol_to_cpool_index(Symbol* sym) {
49 return _classmap->symbol_to_value(sym);
50 }
51
52 public:
53 // Calls to this constructor must be proceeded by a ResourceMark
54 // and a HandleMark
55 JvmtiConstantPoolReconstituter(InstanceKlass* ik){
56 set_error(JVMTI_ERROR_NONE);
57 _ik = ik;
58 _cpool = constantPoolHandle(Thread::current(), ik->constants());
59 _symmap = new SymbolHashMap();
60 _classmap = new SymbolHashMap();
61 _cpool_size = _cpool->hash_entries_to(_symmap, _classmap);
62 if (_cpool_size == 0) {
63 set_error(JVMTI_ERROR_OUT_OF_MEMORY);
64 } else if (_cpool_size < 0) {
65 set_error(JVMTI_ERROR_INTERNAL);
66 }
67 }
68
69 ~JvmtiConstantPoolReconstituter() {
70 if (_symmap != NULL) {
71 delete _symmap;
72 _symmap = NULL;
73 }
74 if (_classmap != NULL) {
75 delete _classmap;
76 _classmap = NULL;
77 }
78 }
79
80
81 void set_error(jvmtiError err) { _err = err; }
82 jvmtiError get_error() { return _err; }
83
84 int cpool_size() { return _cpool_size; }
85
86 void copy_cpool_bytes(unsigned char *cpool_bytes) {
87 if (cpool_bytes == NULL) {
|
35 SymbolHashMap* _classmap;
36 constantPoolHandle _cpool;
37 InstanceKlass* _ik;
38 jvmtiError _err;
39
40 protected:
41 InstanceKlass* ik() { return _ik; };
42 constantPoolHandle cpool() { return _cpool; };
43
44 u2 symbol_to_cpool_index(Symbol* sym) {
45 return _symmap->symbol_to_value(sym);
46 }
47
48 u2 class_symbol_to_cpool_index(Symbol* sym) {
49 return _classmap->symbol_to_value(sym);
50 }
51
52 public:
53 // Calls to this constructor must be proceeded by a ResourceMark
54 // and a HandleMark
55 JvmtiConstantPoolReconstituter(InstanceKlass* ik);
56
57 ~JvmtiConstantPoolReconstituter() {
58 if (_symmap != NULL) {
59 delete _symmap;
60 _symmap = NULL;
61 }
62 if (_classmap != NULL) {
63 delete _classmap;
64 _classmap = NULL;
65 }
66 }
67
68
69 void set_error(jvmtiError err) { _err = err; }
70 jvmtiError get_error() { return _err; }
71
72 int cpool_size() { return _cpool_size; }
73
74 void copy_cpool_bytes(unsigned char *cpool_bytes) {
75 if (cpool_bytes == NULL) {
|