16 #pragma omit pack classdesc::u2 17 #pragma omit pack classdesc::u4 18 #pragma omit pack classdesc::u8 19 #pragma omit pack classdesc::cp_info 20 #pragma omit pack classdesc::attribute_info 21 #pragma omit unpack classdesc::u2 22 #pragma omit unpack classdesc::u4 23 #pragma omit unpack classdesc::u8 24 #pragma omit unpack classdesc::cp_info 25 #pragma omit unpack classdesc::attribute_info 26 #pragma omit dump classdesc::u2 27 #pragma omit dump classdesc::u4 28 #pragma omit dump classdesc::u8 29 #pragma omit dump classdesc::attribute_info 30 #pragma omit dump classdesc::cp_info 31 #pragma omit javaClass classdesc::cp_info 40 typedef unsigned char u1;
48 operator short()
const {
return v;}
51 short operator=(
short x) {
return v=x;}
52 short operator|=(
short x) {
return v|=x;}
53 short operator&=(
short x) {
return v&=x;}
54 bool operator==(
const u2& x)
const {
return v==x.v;}
60 operator unsigned()
const {
return v;}
62 u4(
unsigned v): v(v) {}
63 unsigned operator=(
unsigned x) {
return v=x;}
64 bool operator==(
const u4& x)
const {
return v==x.v;}
70 operator long long()
const {
return v;}
72 u8(
unsigned v): v(v) {}
73 unsigned operator=(
unsigned x) {
return v=x;}
74 bool operator==(
const u8& x)
const {
return v==x.v;}
80 JVM_ACC_PUBLIC = 0x0001,
81 JVM_ACC_PRIVATE = 0x0002,
82 JVM_ACC_PROTECTED = 0x0004,
83 JVM_ACC_STATIC = 0x0008,
84 JVM_ACC_FINAL = 0x0010,
85 JVM_ACC_SYNCHRONIZED = 0x0020,
86 JVM_ACC_SUPER = 0x0020,
87 JVM_ACC_VOLATILE = 0x0040,
88 JVM_ACC_BRIDGE = 0x0040,
89 JVM_ACC_TRANSIENT = 0x0080,
90 JVM_ACC_VARARGS = 0x0080,
91 JVM_ACC_NATIVE = 0x0100,
92 JVM_ACC_INTERFACE = 0x0200,
93 JVM_ACC_ABSTRACT = 0x0400,
94 JVM_ACC_STRICT = 0x0800,
95 JVM_ACC_SYNTHETIC = 0x1000,
96 JVM_ACC_ANNOTATION = 0x2000,
116 JVM_CONSTANT_Utf8 = 1,
117 JVM_CONSTANT_Unicode = 2,
118 JVM_CONSTANT_Integer = 3,
119 JVM_CONSTANT_Float = 4,
120 JVM_CONSTANT_Long = 5,
121 JVM_CONSTANT_Double = 6,
122 JVM_CONSTANT_Class = 7,
123 JVM_CONSTANT_String = 8,
124 JVM_CONSTANT_Fieldref = 9,
125 JVM_CONSTANT_Methodref = 10,
126 JVM_CONSTANT_InterfaceMethodref = 11,
127 JVM_CONSTANT_NameAndType = 12
134 JVM_ITEM_Integer = 1,
139 JVM_ITEM_UninitializedThis = 6,
141 JVM_ITEM_Uninitialized = 8
147 JVM_SIGNATURE_ARRAY =
'[',
148 JVM_SIGNATURE_BYTE =
'B',
149 JVM_SIGNATURE_CHAR =
'C',
150 JVM_SIGNATURE_CLASS =
'L',
151 JVM_SIGNATURE_ENDCLASS =
';',
152 JVM_SIGNATURE_ENUM =
'E',
153 JVM_SIGNATURE_FLOAT =
'F',
154 JVM_SIGNATURE_DOUBLE =
'D',
155 JVM_SIGNATURE_FUNC =
'(',
156 JVM_SIGNATURE_ENDFUNC =
')',
157 JVM_SIGNATURE_INT =
'I',
158 JVM_SIGNATURE_LONG =
'J',
159 JVM_SIGNATURE_SHORT =
'S',
160 JVM_SIGNATURE_VOID =
'V',
161 JVM_SIGNATURE_BOOLEAN =
'Z' 168 JVM_OPC_aconst_null = 1,
169 JVM_OPC_iconst_m1 = 2,
170 JVM_OPC_iconst_0 = 3,
171 JVM_OPC_iconst_1 = 4,
172 JVM_OPC_iconst_2 = 5,
173 JVM_OPC_iconst_3 = 6,
174 JVM_OPC_iconst_4 = 7,
175 JVM_OPC_iconst_5 = 8,
176 JVM_OPC_lconst_0 = 9,
177 JVM_OPC_lconst_1 = 10,
178 JVM_OPC_fconst_0 = 11,
179 JVM_OPC_fconst_1 = 12,
180 JVM_OPC_fconst_2 = 13,
181 JVM_OPC_dconst_0 = 14,
182 JVM_OPC_dconst_1 = 15,
193 JVM_OPC_iload_0 = 26,
194 JVM_OPC_iload_1 = 27,
195 JVM_OPC_iload_2 = 28,
196 JVM_OPC_iload_3 = 29,
197 JVM_OPC_lload_0 = 30,
198 JVM_OPC_lload_1 = 31,
199 JVM_OPC_lload_2 = 32,
200 JVM_OPC_lload_3 = 33,
201 JVM_OPC_fload_0 = 34,
202 JVM_OPC_fload_1 = 35,
203 JVM_OPC_fload_2 = 36,
204 JVM_OPC_fload_3 = 37,
205 JVM_OPC_dload_0 = 38,
206 JVM_OPC_dload_1 = 39,
207 JVM_OPC_dload_2 = 40,
208 JVM_OPC_dload_3 = 41,
209 JVM_OPC_aload_0 = 42,
210 JVM_OPC_aload_1 = 43,
211 JVM_OPC_aload_2 = 44,
212 JVM_OPC_aload_3 = 45,
226 JVM_OPC_istore_0 = 59,
227 JVM_OPC_istore_1 = 60,
228 JVM_OPC_istore_2 = 61,
229 JVM_OPC_istore_3 = 62,
230 JVM_OPC_lstore_0 = 63,
231 JVM_OPC_lstore_1 = 64,
232 JVM_OPC_lstore_2 = 65,
233 JVM_OPC_lstore_3 = 66,
234 JVM_OPC_fstore_0 = 67,
235 JVM_OPC_fstore_1 = 68,
236 JVM_OPC_fstore_2 = 69,
237 JVM_OPC_fstore_3 = 70,
238 JVM_OPC_dstore_0 = 71,
239 JVM_OPC_dstore_1 = 72,
240 JVM_OPC_dstore_2 = 73,
241 JVM_OPC_dstore_3 = 74,
242 JVM_OPC_astore_0 = 75,
243 JVM_OPC_astore_1 = 76,
244 JVM_OPC_astore_2 = 77,
245 JVM_OPC_astore_3 = 78,
246 JVM_OPC_iastore = 79,
247 JVM_OPC_lastore = 80,
248 JVM_OPC_fastore = 81,
249 JVM_OPC_dastore = 82,
250 JVM_OPC_aastore = 83,
251 JVM_OPC_bastore = 84,
252 JVM_OPC_castore = 85,
253 JVM_OPC_sastore = 86,
260 JVM_OPC_dup2_x1 = 93,
261 JVM_OPC_dup2_x2 = 94,
326 JVM_OPC_if_icmpeq = 159,
327 JVM_OPC_if_icmpne = 160,
328 JVM_OPC_if_icmplt = 161,
329 JVM_OPC_if_icmpge = 162,
330 JVM_OPC_if_icmpgt = 163,
331 JVM_OPC_if_icmple = 164,
332 JVM_OPC_if_acmpeq = 165,
333 JVM_OPC_if_acmpne = 166,
337 JVM_OPC_tableswitch = 170,
338 JVM_OPC_lookupswitch = 171,
339 JVM_OPC_ireturn = 172,
340 JVM_OPC_lreturn = 173,
341 JVM_OPC_freturn = 174,
342 JVM_OPC_dreturn = 175,
343 JVM_OPC_areturn = 176,
344 JVM_OPC_return = 177,
345 JVM_OPC_getstatic = 178,
346 JVM_OPC_putstatic = 179,
347 JVM_OPC_getfield = 180,
348 JVM_OPC_putfield = 181,
349 JVM_OPC_invokevirtual = 182,
350 JVM_OPC_invokespecial = 183,
351 JVM_OPC_invokestatic = 184,
352 JVM_OPC_invokeinterface = 185,
353 JVM_OPC_xxxunusedxxx = 186,
355 JVM_OPC_newarray = 188,
356 JVM_OPC_anewarray = 189,
357 JVM_OPC_arraylength = 190,
358 JVM_OPC_athrow = 191,
359 JVM_OPC_checkcast = 192,
360 JVM_OPC_instanceof = 193,
361 JVM_OPC_monitorenter = 194,
362 JVM_OPC_monitorexit = 195,
364 JVM_OPC_multianewarray = 197,
365 JVM_OPC_ifnull = 198,
366 JVM_OPC_ifnonnull = 199,
367 JVM_OPC_goto_w = 200,
375 #define JVM_OPCODE_LENGTH_INITIALIZER { \ 582 u2 name_and_type_index;
584 Ref(
u2 class_index,
u2 name_and_type_index):
585 class_index(class_index), name_and_type_index(name_and_type_index) {}
586 bool operator==(
const Ref& x)
const {
587 return class_index==x.class_index &&
588 name_and_type_index==x.name_and_type_index;}
597 name_index(name_index), descriptor_index(descriptor_index) {}
599 return name_index==x.name_index &&
600 descriptor_index==x.descriptor_index;}
606 shared_ptr<void> info;
611 cp_info(u1 t,
const T& v) {
set(t,v);}
614 void set(u1 t,
const T& v) {
616 info.reset(
new T(v));
622 void unpack_basic(
pack_t& t, u1 tag)
626 case 1: unpack<u1>(t,tag);
break;
627 case 2: unpack<u2>(t,tag);
break;
628 case 4: unpack<u4>(t,tag);
break;
629 case 8: unpack<u8>(t,tag);
break;
637 const T&
get()
const {
return *
static_cast<const T*
>(info.get());}
639 u1 tag()
const {
return _tag;}
640 bool operator==(
const cp_info& x)
const;
645 u2 attribute_name_index;
646 std::vector<u1> info;
648 return attribute_name_index==x.attribute_name_index && info == x.info;
657 std::vector<attribute_info> attributes;
659 return access_flags==x.access_flags && name_index==x.name_index &&
660 descriptor_index == x.descriptor_index && attributes==x.attributes;
669 std::vector<attribute_info> attributes;
671 return access_flags==x.access_flags && name_index==x.name_index &&
672 descriptor_index==x.descriptor_index && attributes==x.attributes;
681 std::vector<cp_info> constant_pool;
685 std::vector<u2> interfaces;
686 std::vector<field_info> fields;
687 std::vector<method_info> methods;
688 std::vector<attribute_info> attributes;
690 bool operator==(
const ClassFile& x)
const {
691 return magic==x.magic && minor_version==x.minor_version &&
692 major_version==x.major_version && constant_pool==x.constant_pool &&
693 access_flags==x.access_flags && this_class == x.this_class &&
694 super_class == x.super_class && interfaces == x.interfaces &&
695 fields == x.fields && methods == x.methods && attributes==x.attributes;
699 void addMethod(
const std::string& method_name,
const std::string& descriptor)
702 mi.name_index=constant_pool.size();
703 constant_pool.push_back(
cp_info(JVM_CONSTANT_Utf8, method_name));
704 mi.descriptor_index=constant_pool.size();
705 constant_pool.push_back(
cp_info(JVM_CONSTANT_Utf8, descriptor));
707 methods.push_back(mi);
712 for (std::vector<method_info>::iterator i=methods.begin(); i!=methods.end(); ++i)
713 i->access_flags = JVM_ACC_NATIVE|JVM_ACC_PUBLIC;
714 access_flags = JVM_ACC_PUBLIC;
719 for (std::vector<method_info>::iterator i=methods.begin(); i!=methods.end(); ++i)
720 i->access_flags = JVM_ACC_ABSTRACT|JVM_ACC_PUBLIC;
721 access_flags = JVM_ACC_INTERFACE|JVM_ACC_ABSTRACT|JVM_ACC_PUBLIC;
Definition: javaClass.h:67
Definition: javaClass.h:652
void makeInterface()
make this an interface with abstract methods
Definition: javaClass.h:717
Definition: javaClass.h:664
Definition: javaClass.h:643
Definition: javaClass.h:579
Definition: javaClass.h:603
Definition: javaClass.h:676
Definition: javaClass.h:45
void addMethod(const std::string &method_name, const std::string &descriptor)
add a method
Definition: javaClass.h:699
Contains definitions related to classdesc functionality.
Definition: arrays.h:2514
Definition: pack_base.h:124
void makeNative()
make this a concrete class with native methods
Definition: javaClass.h:710
Definition: javaClass.h:57
Definition: javaClass.h:591
void unpack(unpack_t &targ, const string &desc, is_treenode dum, T *&arg)
unserialise a tree.
Definition: pack_graph.h:44