btparser/cparser/tests/exp_lex/CLASSTemplate3.bt

1477 lines
39 KiB
Plaintext
Raw Normal View History

2016-06-05 21:47:15 +08:00
1:
2:
3:
4:
5:
6:
7:
8:
9:
10: BigEndian ( ) ;
11:
12: typedef ubyte u1 ;
13: typedef uint16 u2 ;
14: typedef uint32 u4 ;
15: typedef uint64 u8 ;
16: typedef byte i1 ;
17: typedef int16 i2 ;
18: typedef int32 i4 ;
19:
20: enum Constant_pool
21: {
22: CONSTANT_Class = 7 ,
23: CONSTANT_Fieldref = 9 ,
24: CONSTANT_Methodref = 10 ,
25: CONSTANT_InterfaceMethodref = 11 ,
26: CONSTANT_String = 8 ,
27: CONSTANT_Integer = 3 ,
28: CONSTANT_Float = 4 ,
29: CONSTANT_Long = 5 ,
30: CONSTANT_Double = 6 ,
31: CONSTANT_NameAndType = 12 ,
32: CONSTANT_Utf8 = 1 ,
33: CONSTANT_MethodHandle = 15 ,
34: CONSTANT_MethodType = 16 ,
35: CONSTANT_InvokeDynamic = 18
36: } ;
37:
38: enum < u2 > access_property_flags
39: {
40: ACC_PUBLIC = 0x1 ,
41: ACC_PRIVATE = 0x2 ,
42: ACC_PROTECTED = 0x4 ,
43: ACC_STATIC = 0x8 ,
44: ACC_FINAL = 0x10 ,
45: ACC_SUPER_ACC_SYNCHRONIZED = 0x20 ,
46: ACC_BRIDGE_ACC_VOLATILE = 0x40 ,
47: ACC_VARARGS_ACC_TRANSIENT = 0x80 ,
48: ACC_NATIVE = 0x100 ,
49: ACC_INTERFACE = 0x200 ,
50: ACC_ABSTRACT = 0x400 ,
51: ACC_STRICT = 0x800 ,
52: ACC_SYNTHETIC = 0x1000 ,
53: ACC_ANNOTATION = 0x2000 ,
54: ACC_ENUM = 0x4000
55: } ;
56:
57: enum enum_type
58: {
59: Class ,
60: Method ,
61: Field ,
62: Nested_Class
63: } ;
64:
65:
66: enum < u1 > enum_opcodes
67: {
68: nop = 0x0 ,
69: aconst_null = 0x1 ,
70: iconst_m1 = 0x2 ,
71: iconst_0 = 0x3 ,
72: iconst_1 = 0x4 ,
73: iconst_2 = 0x5 ,
74: iconst_3 = 0x6 ,
75: iconst_4 = 0x7 ,
76: iconst_5 = 0x8 ,
77: lconst_0 = 0x9 ,
78: lconst_1 = 0xA ,
79: fconst_0 = 0xB ,
80: fconst_1 = 0xC ,
81: fconst_2 = 0xD ,
82: dconst_0 = 0xE ,
83: dconst_1 = 0xF ,
84: bipush = 0x10 ,
85: sipush = 0x11 ,
86: ldc = 0x12 ,
87: ldc_w = 0x13 ,
88: ldc2_w = 0x14 ,
89: iload = 0x15 ,
90: lload = 0x16 ,
91: fload = 0x17 ,
92: dload = 0x18 ,
93: aload = 0x19 ,
94: iload_0 = 0x1A ,
95: iload_1 = 0x1B ,
96: iload_2 = 0x1C ,
97: iload_3 = 0x1D ,
98: lload_0 = 0x1E ,
99: lload_1 = 0x1F ,
100: lload_2 = 0x20 ,
101: lload_3 = 0x21 ,
102: fload_0 = 0x22 ,
103: fload_1 = 0x23 ,
104: fload_2 = 0x24 ,
105: fload_3 = 0x25 ,
106: dload_0 = 0x26 ,
107: dload_1 = 0x27 ,
108: dload_2 = 0x28 ,
109: dload_3 = 0x29 ,
110: aload_0 = 0x2A ,
111: aload_1 = 0x2B ,
112: aload_2 = 0x2C ,
113: aload_3 = 0x2D ,
114: iaload = 0x2E ,
115: laload = 0x2F ,
116: faload = 0x30 ,
117: daload = 0x31 ,
118: aaload = 0x32 ,
119: baload = 0x33 ,
120: caload = 0x34 ,
121: saload = 0x35 ,
122: istore = 0x36 ,
123: lstore = 0x37 ,
124: fstore = 0x38 ,
125: dstore = 0x39 ,
126: astore = 0x3A ,
127: istore_0 = 0x3B ,
128: istore_1 = 0x3C ,
129: istore_2 = 0x3D ,
130: istore_3 = 0x3E ,
131: lstore_0 = 0x3F ,
132: lstore_1 = 0x40 ,
133: lstore_2 = 0x41 ,
134: lstore_3 = 0x42 ,
135: fstore_0 = 0x43 ,
136: fstore_1 = 0x44 ,
137: fstore_2 = 0x45 ,
138: fstore_3 = 0x46 ,
139: dstore_0 = 0x47 ,
140: dstore_1 = 0x48 ,
141: dstore_2 = 0x49 ,
142: dstore_3 = 0x4A ,
143: astore_0 = 0x4B ,
144: astore_1 = 0x4C ,
145: astore_2 = 0x4D ,
146: astore_3 = 0x4E ,
147: iastore = 0x4F ,
148: lastore = 0x50 ,
149: fastore = 0x51 ,
150: dastore = 0x52 ,
151: aastore = 0x53 ,
152: bastore = 0x54 ,
153: castore = 0x55 ,
154: sastore = 0x56 ,
155: pop = 0x57 ,
156: pop2 = 0x58 ,
157: dup = 0x59 ,
158: dup_x1 = 0x5A ,
159: dup_x2 = 0x5B ,
160: dup2 = 0x5C ,
161: dup2_x1 = 0x5D ,
162: dup2_x2 = 0x5E ,
163: swap = 0x5F ,
164: iadd = 0x60 ,
165: ladd = 0x61 ,
166: fadd = 0x62 ,
167: dadd = 0x63 ,
168: isub = 0x64 ,
169: lsub = 0x65 ,
170: fsub = 0x66 ,
171: dsub = 0x67 ,
172: imul = 0x68 ,
173: lmul = 0x69 ,
174: fmul = 0x6A ,
175: dmul = 0x6B ,
176: idiv = 0x6C ,
177: ldiv = 0x6D ,
178: fdiv = 0x6E ,
179: ddiv = 0x6F ,
180: irem = 0x70 ,
181: lrem = 0x71 ,
182: frem = 0x72 ,
183: drem = 0x73 ,
184: ineg = 0x74 ,
185: lneg = 0x75 ,
186: fneg = 0x76 ,
187: dneg = 0x77 ,
188: ishl = 0x78 ,
189: lshl = 0x79 ,
190: ishr = 0x7A ,
191: lshr = 0x7B ,
192: iushr = 0x7C ,
193: lushr = 0x7D ,
194: iand = 0x7E ,
195: land = 0x7F ,
196: ior = 0x80 ,
197: lor = 0x81 ,
198: ixor = 0x82 ,
199: lxor = 0x83 ,
200: iinc = 0x84 ,
201: i2l = 0x85 ,
202: i2f = 0x86 ,
203: i2d = 0x87 ,
204: l2i = 0x88 ,
205: l2f = 0x89 ,
206: l2d = 0x8A ,
207: f2i = 0x8B ,
208: f2l = 0x8C ,
209: f2d = 0x8D ,
210: d2i = 0x8E ,
211: d2l = 0x8F ,
212: d2f = 0x90 ,
213: i2b = 0x91 ,
214: i2c = 0x92 ,
215: i2s = 0x93 ,
216: lcmp = 0x94 ,
217: fcmpl = 0x95 ,
218: fcmpg = 0x96 ,
219: dcmpl = 0x97 ,
220: dcmpg = 0x98 ,
221: ifeq = 0x99 ,
222: ifne = 0x9A ,
223: iflt = 0x9B ,
224: ifge = 0x9C ,
225: ifgt = 0x9D ,
226: ifle = 0x9E ,
227: if_icmpeq = 0x9F ,
228: if_icmpne = 0xA0 ,
229: if_icmplt = 0xA1 ,
230: if_icmpge = 0xA2 ,
231: if_icmpgt = 0xA3 ,
232: if_icmple = 0xA4 ,
233: if_acmpeq = 0xA5 ,
234: if_acmpne = 0xA6 ,
235: goto = 0xA7 ,
236: jsr = 0xA8 ,
237: ret = 0xA9 ,
238: tableswitch = 0xAA ,
239: lookupswitch = 0xAB ,
240: ireturn = 0xAC ,
241: lreturn = 0xAD ,
242: freturn = 0xAE ,
243: dreturn = 0xAF ,
244: areturn = 0xB0 ,
245: Return = 0xB1 ,
246: getstatic = 0xB2 ,
247: putstatic = 0xB3 ,
248: getfield = 0xB4 ,
249: putfield = 0xB5 ,
250: invokevirtual = 0xB6 ,
251: invokespecial = 0xB7 ,
252: invokestatic = 0xB8 ,
253: invokeinterface = 0xB9 ,
254: invokedynamic = 0xBA ,
255: new = 0xBB ,
256: newarray = 0xBC ,
257: anewarray = 0xBD ,
258: arraylength = 0xBE ,
259: athrow = 0xBF ,
260: checkcast = 0xC0 ,
261: instanceof = 0xC1 ,
262: monitorenter = 0xC2 ,
263: monitorexit = 0xC3 ,
264: wide = 0xC4 ,
265: multianewarray = 0xC5 ,
266: ifnull = 0xC6 ,
267: ifnonnull = 0xC7 ,
268: goto_w = 0xC8 ,
269: jsr_w = 0xC9 ,
270: breakpoint = 0xCA ,
271: impdep1 = 0xFE ,
272: impdep2 = 0xFF
273: } ;
274:
275: enum < u1 > enum_array_type
276: {
277: no_body = 0 ,
278: index_body = 1 ,
279: index_const_body = 2 ,
280: sipush_body = 3 ,
281: bipush_body = 4 ,
282: newarray_body = 5 ,
283: indexbyte_1_2_body = 6 ,
284: branchbyte1_2_body = 7 ,
285: branchbyte1_4_body = 8 ,
286: invokeinterface_body = 9 ,
287: invokedynamic_body = 10 ,
288: multianewarray_body = 11 ,
289: wide_body = 12 ,
290: tableswitch_body = 13 ,
291: lookupswitch_body = 14 ,
292: index_v2_body = 15
293: } ;
294:
295:
296: enum < u1 > enum_opcodes_body_type
297: {
298: T_BOOLEAN = 4 ,
299: T_CHAR = 5 ,
300: T_FLOAT = 6 ,
301: T_DOUBLE = 7 ,
302: T_BYTE = 8 ,
303: T_SHORT = 9 ,
304: T_INT = 10 ,
305: T_LONG = 11
306: } ;
307:
308:
309: const u4 address_constant_pool = 0xA ;
310: const u4 address_constant_pool_count = 0x8 ;
311: const u2 constant_pool_count = ReadUShort ( address_constant_pool_count ) - 1 ;
312:
313: local u8 map_address_constant_pool [ constant_pool_count ] < format = hex > ;
314: local u1 array_opcodes_body_type [ 256 ] ;
315:
316:
317: array_opcodes_body_type [ tableswitch ] = tableswitch_body ;
318: array_opcodes_body_type [ lookupswitch ] = lookupswitch_body ;
319:
320:
321: array_opcodes_body_type [ bipush ] = bipush_body ;
322:
323: array_opcodes_body_type [ iload ] = index_body ;
324: array_opcodes_body_type [ lload ] = index_body ;
325: array_opcodes_body_type [ fload ] = index_body ;
326: array_opcodes_body_type [ dload ] = index_body ;
327: array_opcodes_body_type [ aload ] = index_body ;
328:
329: array_opcodes_body_type [ istore ] = index_body ;
330: array_opcodes_body_type [ lstore ] = index_body ;
331: array_opcodes_body_type [ fstore ] = index_body ;
332: array_opcodes_body_type [ dstore ] = index_body ;
333: array_opcodes_body_type [ astore ] = index_body ;
334:
335: array_opcodes_body_type [ sipush ] = sipush_body ;
336: array_opcodes_body_type [ ldc ] = index_v2_body ;
337: array_opcodes_body_type [ ldc_w ] = indexbyte_1_2_body ;
338: array_opcodes_body_type [ ldc2_w ] = indexbyte_1_2_body ;
339:
340: array_opcodes_body_type [ iinc ] = index_const_body ;
341:
342: array_opcodes_body_type [ ifeq ] = branchbyte1_2_body ;
343: array_opcodes_body_type [ ifne ] = branchbyte1_2_body ;
344: array_opcodes_body_type [ iflt ] = branchbyte1_2_body ;
345: array_opcodes_body_type [ ifge ] = branchbyte1_2_body ;
346: array_opcodes_body_type [ ifgt ] = branchbyte1_2_body ;
347: array_opcodes_body_type [ ifle ] = branchbyte1_2_body ;
348:
349: array_opcodes_body_type [ if_icmpeq ] = branchbyte1_2_body ;
350: array_opcodes_body_type [ if_icmpne ] = branchbyte1_2_body ;
351: array_opcodes_body_type [ if_icmplt ] = branchbyte1_2_body ;
352: array_opcodes_body_type [ if_icmpge ] = branchbyte1_2_body ;
353: array_opcodes_body_type [ if_icmpgt ] = branchbyte1_2_body ;
354: array_opcodes_body_type [ if_icmple ] = branchbyte1_2_body ;
355:
356: array_opcodes_body_type [ if_acmpeq ] = branchbyte1_2_body ;
357: array_opcodes_body_type [ if_acmpne ] = branchbyte1_2_body ;
358:
359: array_opcodes_body_type [ goto ] = branchbyte1_2_body ;
360: array_opcodes_body_type [ jsr ] = branchbyte1_2_body ;
361:
362: array_opcodes_body_type [ ret ] = index_body ;
363:
364: array_opcodes_body_type [ getstatic ] = indexbyte_1_2_body ;
365: array_opcodes_body_type [ putstatic ] = indexbyte_1_2_body ;
366:
367: array_opcodes_body_type [ getfield ] = indexbyte_1_2_body ;
368: array_opcodes_body_type [ putfield ] = indexbyte_1_2_body ;
369:
370: array_opcodes_body_type [ new ] = indexbyte_1_2_body ;
371: array_opcodes_body_type [ newarray ] = newarray_body ;
372:
373: array_opcodes_body_type [ invokevirtual ] = indexbyte_1_2_body ;
374: array_opcodes_body_type [ invokespecial ] = indexbyte_1_2_body ;
375: array_opcodes_body_type [ invokestatic ] = indexbyte_1_2_body ;
376:
377: array_opcodes_body_type [ anewarray ] = indexbyte_1_2_body ;
378: array_opcodes_body_type [ checkcast ] = indexbyte_1_2_body ;
379: array_opcodes_body_type [ instanceof ] = indexbyte_1_2_body ;
380:
381: array_opcodes_body_type [ wide ] = wide_body ;
382: array_opcodes_body_type [ multianewarray ] = multianewarray_body ;
383:
384: array_opcodes_body_type [ ifnull ] = branchbyte1_2_body ;
385: array_opcodes_body_type [ ifnonnull ] = branchbyte1_2_body ;
386:
387: array_opcodes_body_type [ invokeinterface ] = invokeinterface_body ;
388: array_opcodes_body_type [ invokedynamic ] = invokedynamic_body ;
389: array_opcodes_body_type [ goto_w ] = branchbyte1_4_body ;
390: array_opcodes_body_type [ jsr_w ] = branchbyte1_4_body ;
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414: struct element_value ;
415:
416: typedef struct {
417: u2 type_index ;
418: u2 num_element_value_pairs ;
419: if ( 0 < num_element_value_pairs )
420: {
421:
422:
423: struct {
424: u2 element_name_index < comment = Name_OnComment > ;
425: element_value value ;
426: } element_value_pairs [ num_element_value_pairs ] < optimize = false > ;
427:
428:
429:
430: }
431: } annotation < comment = annotation_OnComment > ;
432:
433: typedef struct {
434: u1 tag ;
435: if ( tag == 'e' )
436: {
437: struct {
438: u2 type_name_index < comment = Name_OnComment > ;
439: u2 const_name_index < comment = Name_OnComment > ;
440: } enum_const_value < comment = "enum" > ;
441: }
442: else if ( tag == 'c' )
443: {
444: u2 class_info_index ;
445: }
446: else if ( tag == '@' )
447: {
448: annotation annotation_value ;
449: }
450: else if ( tag == '[' )
451: {
452: struct {
453: u2 num_values ;
454: element_value values [ num_values ] < optimize = false > ;
455: } array_value < comment = "array" > ;
456: }
457: else
458: {
459:
460: u2 const_value_index < comment = Name_OnComment > ;
461: }
462: } element_value < comment = element_value_OnComment > ;
463:
464: typedef struct {
465: u1 tag ;
466:
467:
468:
469:
470:
471:
472:
473: if ( tag == 7 )
474: {
475:
476: u2 cpool_index < comment = Name_OnComment > ;
477: }
478: else if ( tag == 8 )
479: {
480:
481: u2 offset ;
482: }
483: } verification_type_info ;
484:
485: typedef struct {
486: u1 frame_type ;
487: if ( frame_type >= 64 && frame_type <= 127 )
488: {
489:
490: verification_type_info stack [ 1 ] < optimize = false > ;
491: }
492: else if ( frame_type == 247 )
493: {
494:
495: u2 offset_delta ;
496: verification_type_info stack [ 1 ] ;
497: }
498: else if ( frame_type >= 248 && frame_type <= 251 )
499: {
500:
501: u2 offset_delta ;
502: }
503: else if ( frame_type >= 252 && frame_type <= 254 )
504: {
505:
506: u2 offset_delta ;
507: verification_type_info locals [ frame_type - 251 ] < optimize = false > ;
508: }
509: else if ( frame_type == 255 )
510: {
511:
512: u2 offset_delta ;
513: u2 number_of_locals ;
514: if ( 0 < number_of_locals ) verification_type_info locals [ number_of_locals ] < optimize = false > ;
515: u2 number_of_stack_items ;
516: if ( 0 < number_of_stack_items ) verification_type_info stack [ number_of_stack_items ] < optimize = false > ;
517: }
518: } stack_map_frame < comment = stack_map_frame_OnComment > ;
519:
520: typedef struct ( int hidden , u8 offsets ) {
521:
522: if ( exists ( hidden ) )
523: {
524: u1 operation < format = hex > ;
525: switch ( array_opcodes_body_type [ operation ] )
526: {
527: case index_body :
528: case index_v2_body :
529: u1 index ;
530: break ;
531: case index_const_body :
532: u1 index ;
533: i1 _const < name = "const" > ;
534: break ;
535: case sipush_body :
536: u2 _byte < name = "byte" > ;
537: break ;
538: case bipush_body :
539: u1 _byte < name = "byte" > ;
540: break ;
541: case newarray_body :
542: u1 atype ;
543: break ;
544: case multianewarray_body :
545: u2 indexbyte ;
546: u1 dimensions ;
547: break ;
548: case wide_body :
549: u1 operation2 ;
550: u2 indexbyte ;
551: if ( operation2 == iinc )
552: {
553: u2 constbyte ;
554: }
555: break ;
556: case tableswitch_body :
557: local u4 len = 4 - ( offsets + 1 ) % 4 ;
558: if ( len < 4 ) u1 byte_pad [ len ] ;
559: i4 defaultbyte ;
560: i4 lowbyte ;
561: i4 highbyte ;
562: u4 jump [ highbyte - lowbyte + 1 ] < optimize = false > ;
563: break ;
564: case lookupswitch_body :
565: local u4 len = 4 - ( offsets + 1 ) % 4 ;
566: if ( len < 4 ) u1 byte_pad [ len ] ;
567: i4 defaultbyte ;
568: i4 npairs ;
569: struct
570: {
571: i4 match ;
572: i4 offset ;
573: } match_offset [ npairs ] ;
574: break ;
575: case indexbyte_1_2_body :
576: u2 indexbyte ;
577: break ;
578: case branchbyte1_2_body :
579: i2 branchbyte ;
580: break ;
581: case branchbyte1_4_body :
582: i4 branchbyte ;
583: break ;
584: case invokeinterface_body :
585: u2 indexbyte ;
586: u1 _count < name = "const" > ;
587: u1 zero ;
588: break ;
589: case invokedynamic_body :
590: u2 indexbyte ;
591: u1 zero ;
592: u1 zero ;
593: break ;
594: default :
595: break ;
596: }
597: }
598: } opcodes_operation < comment = opcodes_operation_OnComment > ;
599:
600:
601: struct attribute_info ;
602:
603: typedef struct {
604: u2 attribute_name_index ;
605: u4 attribute_length ;
606:
607: local string attribute_name = get_constant_pool_Utf8 ( attribute_name_index ) ;
608:
609: if ( attribute_name == "ConstantValue" )
610: {
611: u2 constantvalue_index < comment = Name_OnComment > ;
612: }
613: else if ( attribute_name == "Code" )
614: {
615: u2 max_stack ;
616: u2 max_locals ;
617: u4 code_length < format = hex > ;
618:
619: struct
620: {
621: local u8 begin_address = FTell ( ) ;
622: local u8 current_address = FTell ( ) ;
623: local u8 end_address = begin_address + code_length ;
624: local u4 i ;
625: local u8 Len ;
626: while ( FTell ( ) < end_address )
627: {
628: opcodes_operation operation ( 0 , current_address - begin_address ) ;
629: Len = FTell ( ) - current_address - 1 ;
630: FSkip ( - Len ) ;
631: for ( i = 0 ; i < Len ; i ++ )
632: {
633: opcodes_operation operation ( 1 , 0 ) < size = 1 , hidden = true > ;
634: }
635: current_address = FTell ( ) ;
636: }
637: } code ;
638:
639: u2 exception_table_length ;
640: if ( exception_table_length > 0 )
641: {
642: struct
643: {
644: u2 start_pc ;
645: u2 end_pc ;
646: u2 handler_pc ;
647: u2 catch_type < comment = Name_Exception_OnComment > ;
648: } exception_table [ exception_table_length ] ;
649: }
650: u2 attributes_count ;
651: if ( attributes_count > 0 ) attribute_info attributes [ attributes_count ] < optimize = false > ;
652: }
653: else if ( attribute_name == "Exceptions" )
654: {
655: u2 number_of_exceptions ;
656: u2 exception_index_table [ number_of_exceptions ] < comment = Name_Exception_OnComment , optimize = false > ;
657: }
658: else if ( attribute_name == "LineNumberTable" )
659: {
660: u2 line_number_table_length ;
661: struct {
662: u2 start_pc ;
663: u2 line_number ;
664: } line_number_table [ line_number_table_length ] < optimize = false > ;
665: }
666: else if ( attribute_name == "LocalVariableTable" )
667: {
668: u2 local_variable_table_length ;
669: struct LocalVariableTable_struct {
670: u2 start_pc ;
671: u2 length ;
672: u2 name_index < comment = Name_OnComment > ;
673: u2 descriptor_index < comment = Name_OnComment > ;
674: u2 index ;
675: } local_variable_table [ local_variable_table_length ] < comment = attribute_info_LocalVariableTable_OnComment , optimize = false > ;
676: }
677: else if ( attribute_name == "LocalVariableTypeTable" )
678: {
679: u2 local_variable_type_table_length ;
680: struct {
681: u2 start_pc ;
682: u2 length ;
683: u2 name_index ;
684: u2 signature_index ;
685: u2 index ;
686: } local_variable_type_table [ local_variable_type_table_length ] < optimize = false > ;
687: }
688: else if ( attribute_name == "SourceFile" )
689: {
690: u2 sourcefile_index < comment = Name_OnComment > ;
691: }
692: else if ( attribute_name == "InnerClasses" )
693: {
694: u2 number_of_classes ;
695: struct InnerClasses_struct {
696: u2 inner_class_info_index < comment = Name_OnComment > ;
697: u2 outer_class_info_index < comment = Name_OnComment > ;
698: u2 inner_name_index < comment = Name_OnComment > ;
699: u2 inner_class_access_flags < comment = Nested_Class_access_flags_OnComment > ;
700: } classes [ number_of_classes ] < comment = attribute_info_InnerClasses_OnComment , optimize = false > ;
701: }
702: else if ( attribute_name == "EnclosingMethod" )
703: {
704: u2 class_index < comment = Name_OnComment > ;
705: u2 method_index < comment = Name_OnComment > ;
706: }
707: else if ( attribute_name == "Signature" )
708: {
709: u2 signature_index < comment = Name_OnComment > ;
710: }
711: else if ( attribute_name == "SourceDebugExtension" )
712: {
713: u1 debug_extension [ attribute_length ] < optimize = false > ;
714: }
715: else if ( attribute_name == "RuntimeVisibleAnnotations" || attribute_name == "RuntimeInvisibleAnnotations" )
716: {
717: u2 num_annotations ;
718: annotation annotations [ num_annotations ] < optimize = false > ;
719: }
720: else if ( attribute_name == "RuntimeVisibleParameterAnnotations" || attribute_name == "RuntimeInvisibleParameterAnnotations" )
721: {
722: u1 num_parameters ;
723: struct {
724: u2 num_annotations ;
725: annotation annotations [ num_annotations ] < optimize = false > ;
726: } parameter_annotations [ num_parameters ] < optimize = false > ;
727: }
728: else if ( attribute_name == "AnnotationDefault" )
729: {
730: element_value default_value ;
731: }
732: else if ( attribute_name == "BootstrapMethods" )
733: {
734: u2 num_bootstrap_methods ;
735: struct {
736: u2 bootstrap_method_ref ;
737: u2 num_bootstrap_arguments ;
738: u2 bootstrap_arguments [ num_bootstrap_arguments ] < optimize = false > ;
739: } bootstrap_methods [ num_bootstrap_methods ] < optimize = false > ;
740: }
741: else if ( attribute_name == "StackMapTable" )
742: {
743: u2 number_of_entries ;
744: stack_map_frame entries [ number_of_entries ] < optimize = false > ;
745: }
746: else
747: {
748: if ( attribute_length > 0 ) u1 info [ attribute_length ] < optimize = false > ;
749: }
750: } attribute_info < comment = attribute_info_OnComment > ;
751:
752: typedef struct
753: {
754: u2 access_flags < comment = Field_access_flags_OnComment > ;
755: u2 name_index ;
756: u2 descriptor_index ;
757: u2 attributes_count ;
758: if ( 0 < attributes_count )
759: {
760: attribute_info attributes [ attributes_count ] < optimize = false > ;
761: }
762: } field_info < comment = field_info_OnComment > ;
763:
764: typedef struct {
765: u2 access_flags < comment = Method_access_flags_OnComment > ;
766: u2 name_index ;
767: u2 descriptor_index ;
768: u2 attributes_count ;
769: if ( 0 < attributes_count )
770: {
771: attribute_info attributes [ attributes_count ] < optimize = false > ;
772: }
773: } method_info < comment = method_info_OnComment > ;
774:
775:
776:
777:
778: typedef struct {
779: if ( sizeof ( this ) > 1 )
780: {
781: u1 tag ;
782: switch ( tag )
783: {
784: case CONSTANT_Class :
785: u2 name_index ;
786: break ;
787: case CONSTANT_Fieldref :
788: case CONSTANT_Methodref :
789: case CONSTANT_InterfaceMethodref :
790: u2 class_index ;
791: u2 name_and_type_index ;
792: break ;
793: case CONSTANT_String :
794: u2 string_index ;
795: break ;
796: case CONSTANT_Integer :
797: case CONSTANT_Float :
798: u4 bytes ;
799: break ;
800: case CONSTANT_Long :
801: case CONSTANT_Double :
802: u4 high_bytes < format = hex > ;
803: u4 low_bytes < format = hex > ;
804: break ;
805: case CONSTANT_NameAndType :
806: u2 name_index ;
807: u2 descriptor_index ;
808: break ;
809: case CONSTANT_Utf8 :
810: u2 length ;
811: if ( length > 0 )
812: {
813: u1 bytes [ length ] < optimize = false > ;
814: }
815: break ;
816: case CONSTANT_MethodHandle :
817: u1 reference_kind ;
818: u2 reference_index ;
819: break ;
820: case CONSTANT_MethodType :
821: u2 descriptor_index ;
822: break ;
823: case CONSTANT_InvokeDynamic :
824: u2 bootstrap_method_attr_index ;
825: u2 name_and_type_index ;
826: break ;
827: default :
828: Warning ( "fix cp_info" ) ;
829: break ;
830: }
831: }
832: } cp_info < comment = cp_infoOnComment , size = cp_infoOnSize > ;
833:
834:
835: typedef struct
836: {
837: u4 magic < format = hex > ;
838: u2 minor_version ;
839: u2 major_version ;
840: u2 constant_pool_count ;
841: cp_info constant_pool [ constant_pool_count - 1 ] < optimize = false > ;
842: u2 access_flags < comment = Class_access_flags_OnComment > ;
843: u2 this_class < comment = Name_OnComment > ;
844: u2 super_class < comment = Name_OnComment > ;
845:
846: u2 interfaces_count ;
847: if ( 0 < interfaces_count )
848: {
849: u2 interfaces [ interfaces_count ] < comment = ClassFile_interfaces_OnComment , optimize = false > ;
850: }
851:
852: u2 fields_count ;
853: if ( 0 < fields_count )
854: {
855: field_info fields [ fields_count ] < optimize = false > ;
856: }
857:
858: u2 methods_count ;
859: if ( 0 < methods_count )
860: {
861: method_info methods [ methods_count ] < optimize = false > ;
862: }
863:
864: u2 attributes_count ;
865: if ( 0 < attributes_count )
866: {
867: attribute_info attributes [ attributes_count ] < optimize = false > ;
868: }
869:
870: } ClassFile < comment = ClassFileOnComment > ;
871:
872:
873:
874:
875: void generator_map_address_constant_pool ( )
876: {
877: local u8 address = address_constant_pool ;
878: local u1 tag ;
879:
880:
881: local int i ;
882: for ( i = 0 ; i < constant_pool_count ; i ++ )
883: {
884: map_address_constant_pool [ i ] = address ;
885:
886: tag = ReadUByte ( address ) ;
887:
888: switch ( tag )
889: {
890: case CONSTANT_Class :
891: case CONSTANT_String :
892: case CONSTANT_MethodType :
893: address = address + 3 ;
894: break ;
895: case CONSTANT_Fieldref :
896: case CONSTANT_Methodref :
897: case CONSTANT_InterfaceMethodref :
898: case CONSTANT_NameAndType :
899: case CONSTANT_InvokeDynamic :
900: case CONSTANT_Integer :
901: case CONSTANT_Float :
902: address = address + 5 ;
903: break ;
904: case CONSTANT_Long :
905: case CONSTANT_Double :
906: i ++ ;
907: map_address_constant_pool [ i ] = 0 ;
908: address = address + 9 ;
909: break ;
910: case CONSTANT_Utf8 :
911: address = address + 3 + ReadUShort ( address + 1 ) ;
912: break ;
913: case CONSTANT_MethodHandle :
914: address = address + 4 ;
915: break ;
916: default :
917: Warning ( "fix generator_map_address_constant_pool" ) ;
918: break ;
919: }
920: }
921: }
922:
923: u8 find_constant_pool2 ( u2 n )
924: {
925: return map_address_constant_pool [ n - 1 ] ;
926: }
927:
928: string get_constant_pool_Utf8 ( u2 n )
929: {
930: if ( n <= 0 ) return "NO NAME" ;
931:
932: local u8 address = find_constant_pool2 ( n ) ;
933: local u8 address2 = 0 ;
934: local u8 address3 = 0 ;
935: local string str = "" ;
936: switch ( ReadUByte ( address ) )
937: {
938: case CONSTANT_Class :
939: case CONSTANT_String :
940: case CONSTANT_InvokeDynamic :
941: address = find_constant_pool2 ( ReadUShort ( address + 1 ) ) ;
942: break ;
943: case CONSTANT_NameAndType :
944: address2 = address ;
945: address = find_constant_pool2 ( ReadUShort ( address + 1 ) ) ;
946: address2 = find_constant_pool2 ( ReadUShort ( address2 + 3 ) ) ;
947: break ;
948: case CONSTANT_Fieldref :
949: case CONSTANT_Methodref :
950: case CONSTANT_InterfaceMethodref :
951: address2 = address ;
952: address = find_constant_pool2 ( ReadUShort ( address + 1 ) ) ;
953: address = find_constant_pool2 ( ReadUShort ( address + 1 ) ) ;
954: address2 = find_constant_pool2 ( ReadUShort ( address2 + 3 ) ) ;
955: address3 = address2 ;
956: address2 = find_constant_pool2 ( ReadUShort ( address3 + 1 ) ) ;
957: address3 = find_constant_pool2 ( ReadUShort ( address3 + 3 ) ) ;
958: break ;
959: case CONSTANT_Integer :
960: SPrintf ( str , "%d" , ReadUInt ( address + 1 ) ) ;
961: break ;
962: case CONSTANT_Long :
963: SPrintf ( str , "%Ld" , ReadInt64 ( address + 1 ) ) ;
964: break ;
965: case CONSTANT_Float :
966: SPrintf ( str , "%f" , ReadFloat ( address + 1 ) ) ;
967: break ;
968: case CONSTANT_Double :
969: SPrintf ( str , "%Lf" , ReadDouble ( address + 1 ) ) ;
970: break ;
971: case CONSTANT_Utf8 :
972: break ;
973: default :
974: Warning ( "fix get_constant_pool_Utf8" ) ;
975: return "NULL" ;
976: break ;
977: }
978:
979: if ( 0 < Strlen ( str ) ) return str ;
980: if ( address2 == 0 ) return ReadUShort ( address + 1 ) == 0 ? " " : ReadString ( address + 3 , ReadUShort ( address + 1 ) ) ;
981: if ( address3 == 0 ) return ReadString ( address + 3 , ReadUShort ( address + 1 ) ) + ReadString ( address2 + 3 , ReadUShort ( address2 + 1 ) ) ;
982:
983: return ReadString ( address + 3 , ReadUShort ( address + 1 ) ) + "." + ReadString ( address2 + 3 , ReadUShort ( address2 + 1 ) ) + ReadString ( address3 + 3 , ReadUShort ( address3 + 1 ) ) ;
984:
985: }
986:
987: string Access_flags ( u2 access_flags , enum_type type )
988: {
989: string access_flags_text ;
990:
991: if ( ( access_flags & ACC_PUBLIC ) == ACC_PUBLIC )
992: {
993: access_flags_text = access_flags_text + "public" ;
994: }
995:
996: if ( type == Field || type == Method || type == Nested_Class )
997: {
998:
999: if ( ( access_flags & ACC_PRIVATE ) == ACC_PRIVATE )
1000: {
1001: access_flags_text = access_flags_text + "private" ;
1002: }
1003:
1004: if ( ( access_flags & ACC_PROTECTED ) == ACC_PROTECTED )
1005: {
1006: access_flags_text = access_flags_text + "protected" ;
1007: }
1008:
1009: if ( ( access_flags & ACC_STATIC ) == ACC_STATIC )
1010: {
1011: access_flags_text = access_flags_text + " static" ;
1012: }
1013:
1014: }
1015:
1016: if ( ( access_flags & ACC_FINAL ) == ACC_FINAL )
1017: {
1018: access_flags_text = access_flags_text + " final" ;
1019: }
1020:
1021: if ( type == Class )
1022: {
1023: if ( ( access_flags & ACC_SUPER_ACC_SYNCHRONIZED ) == ACC_SUPER_ACC_SYNCHRONIZED )
1024: {
1025: access_flags_text = access_flags_text + " superclass" ;
1026: }
1027: }
1028:
1029: if ( type == Method )
1030: {
1031:
1032: if ( ( access_flags & ACC_SUPER_ACC_SYNCHRONIZED ) == ACC_SUPER_ACC_SYNCHRONIZED )
1033: {
1034: access_flags_text = access_flags_text + " synchronized" ;
1035: }
1036:
1037: if ( ( access_flags & ACC_BRIDGE_ACC_VOLATILE ) == ACC_BRIDGE_ACC_VOLATILE )
1038: {
1039: access_flags_text = access_flags_text + " bridge" ;
1040: }
1041:
1042: if ( ( access_flags & ACC_VARARGS_ACC_TRANSIENT ) == ACC_VARARGS_ACC_TRANSIENT )
1043: {
1044: access_flags_text = access_flags_text + " varargs" ;
1045: }
1046:
1047: if ( ( access_flags & ACC_NATIVE ) == ACC_NATIVE )
1048: {
1049: access_flags_text = access_flags_text + " native" ;
1050: }
1051:
1052: if ( ( access_flags & ACC_STRICT ) == ACC_STRICT )
1053: {
1054: access_flags_text = access_flags_text + " strictfp" ;
1055: }
1056:
1057: }
1058:
1059: if ( type == Field )
1060: {
1061: if ( ( access_flags & ACC_BRIDGE_ACC_VOLATILE ) == ACC_BRIDGE_ACC_VOLATILE )
1062: {
1063: access_flags_text = access_flags_text + " volatile" ;
1064: }
1065:
1066: if ( ( access_flags & ACC_VARARGS_ACC_TRANSIENT ) == ACC_VARARGS_ACC_TRANSIENT )
1067: {
1068: access_flags_text = access_flags_text + " transient" ;
1069: }
1070:
1071: }
1072:
1073: if ( type == Class || type == Nested_Class )
1074: {
1075:
1076: if ( ( access_flags & ACC_INTERFACE ) == ACC_INTERFACE )
1077: {
1078: access_flags_text = access_flags_text + " interface" ;
1079: }
1080:
1081: if ( ( access_flags & ACC_ANNOTATION ) == ACC_ANNOTATION )
1082: {
1083: access_flags_text = access_flags_text + " annotation" ;
1084: }
1085:
1086: }
1087:
1088: if ( type == Class || type == Method || type == Nested_Class )
1089: {
1090: if ( ( access_flags & ACC_ABSTRACT ) == ACC_ABSTRACT )
1091: {
1092: access_flags_text = access_flags_text + " abstract" ;
1093: }
1094: }
1095:
1096:
1097: if ( ( access_flags & ACC_SYNTHETIC ) == ACC_SYNTHETIC )
1098: {
1099: access_flags_text = access_flags_text + " synthetic" ;
1100: }
1101:
1102: if ( type == Class || type == Field || type == Nested_Class )
1103: {
1104: if ( ( access_flags & ACC_ENUM ) == ACC_ENUM )
1105: {
1106: access_flags_text = access_flags_text + " enum" ;
1107: }
1108: }
1109: return access_flags_text ;
1110: }
1111:
1112:
1113:
1114: string ClassFileOnComment ( ClassFile & obj )
1115: {
1116: switch ( obj . major_version )
1117: {
1118: case 45 :
1119: return "JDK 1.0 or JDK 1.1" ;
1120: break ;
1121: case 46 :
1122: return "JDK 1.2" ;
1123: break ;
1124: case 47 :
1125: return "JDK 1.3" ;
1126: break ;
1127: case 48 :
1128: return "JDK 1.4" ;
1129: break ;
1130: case 49 :
1131: return "JDK 1.5" ;
1132: break ;
1133: case 50 :
1134: return "JDK 1.6" ;
1135: break ;
1136: case 51 :
1137: return "JDK 1.7" ;
1138: break ;
1139: default :
1140: return "JDK ?.?" ;
1141: break ;
1142: }
1143: }
1144:
1145: local u1 flag_CONSTANT_Long_CONSTANT_Double = 0 ;
1146:
1147: u4 cp_infoOnSize ( cp_info & obj )
1148: {
1149: switch ( ReadUByte ( FTell ( ) ) )
1150: {
1151: case CONSTANT_Class :
1152: case CONSTANT_String :
1153: case CONSTANT_MethodType :
1154: return 3 ;
1155: break ;
1156: case CONSTANT_Fieldref :
1157: case CONSTANT_Methodref :
1158: case CONSTANT_InterfaceMethodref :
1159: case CONSTANT_NameAndType :
1160: case CONSTANT_InvokeDynamic :
1161: case CONSTANT_Integer :
1162: case CONSTANT_Float :
1163: return 5 ;
1164: break ;
1165: case CONSTANT_Long :
1166: case CONSTANT_Double :
1167: {
1168: if ( flag_CONSTANT_Long_CONSTANT_Double == 0 )
1169: {
1170: FSkip ( - 9 ) ;
1171: flag_CONSTANT_Long_CONSTANT_Double = 1 ;
1172: return 9 ;
1173:
1174: }
1175: else
1176: {
1177: flag_CONSTANT_Long_CONSTANT_Double = 0 ;
1178: FSkip ( 8 ) ;
1179: return 1 ;
1180: }
1181: break ;
1182: }
1183: case CONSTANT_Utf8 :
1184: return 3 + ReadUShort ( FTell ( ) + 1 ) ;
1185: break ;
1186: case CONSTANT_MethodHandle :
1187: return 4 ;
1188: break ;
1189: default :
1190: Warning ( "fix cp_infoOnSize" ) ;
1191: return 0 ;
1192: break ;
1193: }
1194: }
1195:
1196: string cp_infoOnComment ( cp_info & obj )
1197: {
1198:
1199: switch ( ReadUByte ( startof ( obj ) ) )
1200: {
1201: case CONSTANT_Class :
1202: return "CONSTANT_Class_info" ;
1203: break ;
1204: case CONSTANT_Fieldref :
1205: return "CONSTANT_Fieldref" ;
1206: break ;
1207: case CONSTANT_Methodref :
1208: return "CONSTANT_Methodref" ;
1209: break ;
1210: case CONSTANT_InterfaceMethodref :
1211: return "CONSTANT_InterfaceMethodref" ;
1212: break ;
1213: case CONSTANT_String :
1214: return "CONSTANT_String" ;
1215: break ;
1216: case CONSTANT_Integer :
1217: return "CONSTANT_Integer" ;
1218: break ;
1219: case CONSTANT_Float :
1220: return "CONSTANT_Float" ;
1221: break ;
1222: case CONSTANT_Long :
1223: if ( sizeof ( obj ) == 1 ) return "CONSTANT_Long continued" ;
1224: return "CONSTANT_Long" ;
1225: break ;
1226: case CONSTANT_Double :
1227: if ( sizeof ( obj ) == 1 ) return "CONSTANT_Double continued" ;
1228: return "CONSTANT_Double" ;
1229: break ;
1230: case CONSTANT_NameAndType :
1231: return "CONSTANT_NameAndType" ;
1232: break ;
1233: case CONSTANT_Utf8 :
1234: return "CONSTANT_Utf8" ;
1235: break ;
1236: case CONSTANT_MethodHandle :
1237: return "CONSTANT_MethodHandle" ;
1238: break ;
1239: case CONSTANT_MethodType :
1240: return "CONSTANT_MethodType" ;
1241: break ;
1242: case CONSTANT_InvokeDynamic :
1243: return "CONSTANT_InvokeDynamic" ;
1244: break ;
1245: default :
1246: Warning ( "fix cp_infoOnCommen" ) ;
1247: return "fix cp_infoOnCommen" ;
1248: break ;
1249: }
1250: }
1251:
1252: string ClassFile_interfaces_OnComment ( u2 interfaces )
1253: {
1254: return get_constant_pool_Utf8 ( interfaces ) ;
1255: }
1256:
1257: string Class_access_flags_OnComment ( u2 access_flags )
1258: {
1259: return Access_flags ( access_flags , Class ) ;
1260: }
1261:
1262: string Field_access_flags_OnComment ( u2 access_flags )
1263: {
1264: return Access_flags ( access_flags , Field ) ;
1265: }
1266:
1267: string Method_access_flags_OnComment ( u2 access_flags )
1268: {
1269: return Access_flags ( access_flags , Method ) ;
1270: }
1271:
1272: string Nested_Class_access_flags_OnComment ( u2 access_flags )
1273: {
1274: return Access_flags ( access_flags , Nested_Class ) ;
1275: }
1276:
1277: string method_info_OnComment ( method_info & obj )
1278: {
1279: return get_constant_pool_Utf8 ( obj . name_index ) + get_constant_pool_Utf8 ( obj . descriptor_index ) ;
1280: }
1281:
1282: string field_info_OnComment ( field_info & obj )
1283: {
1284: return get_constant_pool_Utf8 ( obj . descriptor_index ) + " " + get_constant_pool_Utf8 ( obj . name_index ) ;
1285: }
1286:
1287: string attribute_info_OnComment ( attribute_info & obj )
1288: {
1289: return get_constant_pool_Utf8 ( obj . attribute_name_index ) ;
1290: }
1291:
1292: string attribute_info_InnerClasses_OnComment ( InnerClasses_struct & obj )
1293: {
1294: return get_constant_pool_Utf8 ( obj . inner_name_index ) ;
1295: }
1296:
1297: string attribute_info_LocalVariableTable_OnComment ( LocalVariableTable_struct & obj )
1298: {
1299: return get_constant_pool_Utf8 ( obj . name_index ) ;
1300: }
1301:
1302:
1303:
1304: string stack_map_frame_OnComment ( stack_map_frame & obj )
1305: {
1306: if ( obj . frame_type >= 0 && obj . frame_type <= 63 )
1307: {
1308: return "same_frame" ;
1309: }
1310: else if ( obj . frame_type >= 64 && obj . frame_type <= 127 )
1311: {
1312: return "same_locals_1_stack_item_frame" ;
1313: }
1314: else if ( obj . frame_type == 247 )
1315: {
1316: return "same_locals_1_stack_item_frame_extended" ;
1317: }
1318: else if ( obj . frame_type >= 248 && obj . frame_type <= 251 )
1319: {
1320: return "chop_frame or same_frame_extended" ;
1321: }
1322: else if ( obj . frame_type >= 252 && obj . frame_type <= 254 )
1323: {
1324: return "append_frame" ;
1325: }
1326: else if ( obj . frame_type == 255 )
1327: {
1328: return "full_frame" ;
1329: }
1330: }
1331:
1332:
1333: string annotation_OnComment ( annotation & obj )
1334: {
1335: return get_constant_pool_Utf8 ( obj . type_index ) ;
1336: }
1337:
1338: string Name_OnComment ( u2 n )
1339: {
1340: return get_constant_pool_Utf8 ( n ) ;
1341: }
1342:
1343: string Name_Exception_OnComment ( u2 n )
1344: {
1345: if ( n == 0 ) return "any" ;
1346: return get_constant_pool_Utf8 ( n ) ;
1347: }
1348:
1349: string element_value_OnComment ( element_value & obj )
1350: {
1351: switch ( obj . tag )
1352: {
1353: case 's' :
1354: return "String" ;
1355: break ;
1356: case 'e' :
1357: return "enum" ;
1358: break ;
1359: case 'c' :
1360: return "class" ;
1361: break ;
1362: case '@' :
1363: return "annotation type" ;
1364: break ;
1365: case '[' :
1366: return "array" ;
1367: break ;
1368: default :
1369: return "" ;
1370: break ;
1371: }
1372: }
1373:
1374:
1375: string opcodes_operation_OnComment ( opcodes_operation & obj )
1376: {
1377: if ( ! exists ( obj . operation ) ) return "" ;
1378:
1379: string str ;
1380: string str2 ;
1381: enum_opcodes obj_operation = obj . operation ;
1382:
1383: switch ( array_opcodes_body_type [ obj . operation ] )
1384: {
1385: case index_body :
1386: SPrintf ( str , " %d" , obj . index ) ;
1387: break ;
1388: case index_v2_body :
1389: str = " " + get_constant_pool_Utf8 ( obj . index ) ;
1390: break ;
1391: case index_const_body :
1392: SPrintf ( str , " %d" , obj . index ) ;
1393: SPrintf ( str2 , " %d" , obj . _const ) ;
1394: str = str + " by" + str2 ;
1395: break ;
1396: case sipush_body :
1397: SPrintf ( str , " %d" , obj . _byte ) ;
1398: break ;
1399: case bipush_body :
1400: SPrintf ( str , " %d" , obj . _byte ) ;
1401: break ;
1402: case newarray_body :
1403: switch ( obj . atype )
1404: {
1405: case T_BOOLEAN :
1406: str = " boolean" ;
1407: break ;
1408: case T_CHAR :
1409: str = " char" ;
1410: break ;
1411: case T_FLOAT :
1412: str = " float" ;
1413: break ;
1414: case T_DOUBLE :
1415: str = " double" ;
1416: break ;
1417: case T_BYTE :
1418: str = " byte" ;
1419: break ;
1420: case T_SHORT :
1421: str = " short" ;
1422: break ;
1423: case T_INT :
1424: str = " int" ;
1425: break ;
1426: case T_LONG :
1427: str = " long" ;
1428: break ;
1429: default :
1430: Warning ( "fix opcodes_operation_OnComment" ) ;
1431: break ;
1432: }
1433: break ;
1434: case multianewarray_body :
1435: SPrintf ( str , "%d" , obj . dimensions ) ;
1436: str = " " + get_constant_pool_Utf8 ( obj . indexbyte ) + " dimensions " + str ;
1437: break ;
1438: case wide_body :
1439: enum_opcodes obj_operation2 = obj . operation2 ;
1440: str = " " + EnumToString ( obj_operation2 ) + get_constant_pool_Utf8 ( obj . indexbyte ) ;
1441: if ( obj_operation2 == iinc )
1442: {
1443: SPrintf ( str2 , "%d" , obj . constbyte ) ;
1444: str = str + " by " + str2 ;
1445: }
1446: break ;
1447: case tableswitch_body :
1448: SPrintf ( str , "%d" , obj . lowbyte ) ;
1449: SPrintf ( str2 , "%d" , obj . highbyte ) ;
1450: str = " " + str + " to " + str2 ;
1451: break ;
1452: case lookupswitch_body :
1453: SPrintf ( str , "%d" , obj . npairs ) ;
1454: str = " " + str ;
1455: break ;
1456: case invokedynamic_body :
1457: case indexbyte_1_2_body :
1458: str = " " + get_constant_pool_Utf8 ( obj . indexbyte ) ;
1459: break ;
1460: case branchbyte1_2_body :
1461: case branchbyte1_4_body :
1462: SPrintf ( str , " %d" , obj . branchbyte ) ;
1463: break ;
1464: case invokeinterface_body :
1465: SPrintf ( str , " %d" , obj . _count ) ;
1466: str = " " + get_constant_pool_Utf8 ( obj . indexbyte ) + " count " + str ;
1467: break ;
1468: default :
1469: break ;
1470: }
1471:
1472: return EnumToString ( obj_operation ) + str ;
1473: }
1474:
1475: generator_map_address_constant_pool ( ) ;
1476:
1477: ClassFile classFile ; tok_eof