Fixing a subtle bug: the method isParameterWithType() did not consider arbitrary...
[jpf-core.git] / src / main / gov / nasa / jpf / jvm / JVMByteCodePrinter.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18
19 package gov.nasa.jpf.jvm;
20
21 import java.io.PrintWriter;
22
23 /**
24  * utility class that prints out bytecode in readable form
25  */
26 public class JVMByteCodePrinter implements JVMByteCodeReader {
27
28   PrintWriter pw;
29   ClassFile cf; // need this to get the constpool entries
30
31   String prefix;
32
33   public JVMByteCodePrinter (PrintWriter pw, ClassFile cf, String prefix){
34     this.pw = pw;
35     this.cf = cf;
36     this.prefix = prefix;
37   }
38
39   @Override
40   public void aconst_null() {
41     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aconst_null");
42   }
43
44   @Override
45   public void aload(int localVarIndex) {
46     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "aload", localVarIndex);
47   }
48
49   @Override
50   public void aload_0() {
51     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_0");
52   }
53
54   @Override
55   public void aload_1() {
56     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_1");
57   }
58
59   @Override
60   public void aload_2() {
61     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_2");
62   }
63
64   @Override
65   public void aload_3() {
66     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_3");
67   }
68
69   @Override
70   public void aaload() {
71     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aaload");
72   }
73
74   @Override
75   public void astore(int localVarIndex) {
76     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "astore", localVarIndex);
77   }
78
79   @Override
80   public void astore_0() {
81     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_0");
82   }
83
84   @Override
85   public void astore_1() {
86     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_1");
87   }
88
89   @Override
90   public void astore_2() {
91     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_2");
92   }
93
94   @Override
95   public void astore_3() {
96     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_3");
97   }
98
99   @Override
100   public void aastore() {
101     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aastore");
102   }
103
104   @Override
105   public void areturn() {
106     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "areturn");
107   }
108
109   @Override
110   public void anewarray(int cpClassIndex) {
111     pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "anewarray", cpClassIndex, cf.classNameAt(cpClassIndex));
112   }
113
114   @Override
115   public void arraylength() {
116     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "arraylength");
117   }
118
119   @Override
120   public void athrow() {
121     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "athrow");
122   }
123
124   @Override
125   public void baload() {
126     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "baload");
127   }
128
129   @Override
130   public void bastore() {
131     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "bastore");
132   }
133
134   @Override
135   public void bipush(int b) {
136     pw.printf("%s%3d: %s %d\n", prefix, cf.getPc(), "bipush", b);
137   }
138
139   @Override
140   public void caload() {
141     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "caload");
142   }
143
144   @Override
145   public void castore() {
146     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "castore");
147   }
148
149   @Override
150   public void checkcast(int cpClassIndex) {
151     pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "checkcast", cpClassIndex, cf.classNameAt(cpClassIndex));
152   }
153
154   @Override
155   public void d2f() {
156     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "d2f");
157   }
158
159   @Override
160   public void d2i() {
161     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "d2i");
162   }
163
164   @Override
165   public void d2l() {
166     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "d2l");
167   }
168
169   @Override
170   public void dadd() {
171     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dadd");
172   }
173
174   @Override
175   public void daload() {
176     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "daload");
177   }
178
179   @Override
180   public void dastore() {
181     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dastore");
182   }
183
184   @Override
185   public void dcmpg() {
186     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dcmpg");
187   }
188
189   @Override
190   public void dcmpl() {
191     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dcmpl");
192   }
193
194   @Override
195   public void dconst_0() {
196     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dconst_0");
197   }
198
199   @Override
200   public void dconst_1() {
201     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dcont_1");
202   }
203
204   @Override
205   public void ddiv() {
206     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ddiv");
207   }
208
209   @Override
210   public void dload(int localVarIndex) {
211     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "dload", localVarIndex);
212   }
213
214   @Override
215   public void dload_0() {
216     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_0");
217   }
218
219   @Override
220   public void dload_1() {
221     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_1");
222   }
223
224   @Override
225   public void dload_2() {
226     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_2");
227   }
228
229   @Override
230   public void dload_3() {
231     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_3");
232   }
233
234   @Override
235   public void dmul() {
236     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dmul");
237   }
238
239   @Override
240   public void dneg() {
241     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dneg");
242   }
243
244   @Override
245   public void drem() {
246     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "drem");
247   }
248
249   @Override
250   public void dreturn() {
251     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dreturn");
252   }
253
254   @Override
255   public void dstore(int localVarIndex) {
256     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "dstore", localVarIndex);
257   }
258
259   @Override
260   public void dstore_0() {
261     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_0");
262   }
263
264   @Override
265   public void dstore_1() {
266     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_1");
267   }
268
269   @Override
270   public void dstore_2() {
271     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_2");
272   }
273
274   @Override
275   public void dstore_3() {
276     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_3");
277   }
278
279   @Override
280   public void dsub() {
281     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dsub");
282   }
283
284   @Override
285   public void dup() {
286     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup");
287   }
288
289   @Override
290   public void dup_x1() {
291     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup_x1");
292   }
293
294   @Override
295   public void dup_x2() {
296     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup_x2");
297   }
298
299   @Override
300   public void dup2() {
301     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup2");
302   }
303
304   @Override
305   public void dup2_x1() {
306     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup2_x1");
307   }
308
309   @Override
310   public void dup2_x2() {
311     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup2_x2");
312   }
313
314   @Override
315   public void f2d() {
316     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "f2d");
317   }
318
319   @Override
320   public void f2i() {
321     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "f2i");
322   }
323
324   @Override
325   public void f2l() {
326     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "f2l");
327   }
328
329   @Override
330   public void fadd() {
331     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fadd");
332   }
333
334   @Override
335   public void faload() {
336     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "faload");
337   }
338
339   @Override
340   public void fastore() {
341     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fastore");
342   }
343
344   @Override
345   public void fcmpg() {
346     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fcmpg");
347   }
348
349   @Override
350   public void fcmpl() {
351     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fcmpl");
352   }
353
354   @Override
355   public void fconst_0() {
356     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fconst_0");
357   }
358
359   @Override
360   public void fconst_1() {
361     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fconst_1");
362   }
363
364   @Override
365   public void fconst_2() {
366     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fconst_2");
367   }
368
369   @Override
370   public void fdiv() {
371     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fdiv");
372   }
373
374   @Override
375   public void fload(int localVarIndex) {
376     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "fload", localVarIndex);
377   }
378
379   @Override
380   public void fload_0() {
381     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_0");
382   }
383
384   @Override
385   public void fload_1() {
386     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_1");
387   }
388
389   @Override
390   public void fload_2() {
391     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_2");
392   }
393
394   @Override
395   public void fload_3() {
396     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_3");
397   }
398
399   @Override
400   public void fmul() {
401     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fmul");
402   }
403
404   @Override
405   public void fneg() {
406     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fneg");
407   }
408
409   @Override
410   public void frem() {
411     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "frem");
412   }
413
414   @Override
415   public void freturn() {
416     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "freturn");
417   }
418
419   @Override
420   public void fstore(int localVarIndex) {
421     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "fstore", localVarIndex);
422   }
423
424   @Override
425   public void fstore_0() {
426     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_0");
427   }
428
429   @Override
430   public void fstore_1() {
431     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_1");
432   }
433
434   @Override
435   public void fstore_2() {
436     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_2");
437   }
438
439   @Override
440   public void fstore_3() {
441     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_3");
442   }
443
444   @Override
445   public void fsub() {
446     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fsub");
447   }
448
449   @Override
450   public void getfield(int cpFieldRefIndex) {
451     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "getfield", cpFieldRefIndex,
452             cf.fieldClassNameAt(cpFieldRefIndex),
453             cf.fieldNameAt(cpFieldRefIndex),
454             cf.fieldDescriptorAt(cpFieldRefIndex));
455   }
456
457   @Override
458   public void getstatic(int cpFieldRefIndex) {
459     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "getstatic", cpFieldRefIndex,
460             cf.fieldClassNameAt(cpFieldRefIndex),
461             cf.fieldNameAt(cpFieldRefIndex),
462             cf.fieldDescriptorAt(cpFieldRefIndex));
463   }
464
465   @Override
466   public void goto_(int pcOffset) {
467     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "goto", pcOffset, (cf.getPc() + pcOffset));
468   }
469
470   @Override
471   public void goto_w(int pcOffset) {
472     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "goto_w", pcOffset, (cf.getPc() + pcOffset));
473   }
474
475   @Override
476   public void i2b() {
477     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2b");
478   }
479
480   @Override
481   public void i2c() {
482     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2c");
483   }
484
485   @Override
486   public void i2d() {
487     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2d");
488   }
489
490   @Override
491   public void i2f() {
492     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2f");
493   }
494
495   @Override
496   public void i2l() {
497     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2l");
498   }
499
500   @Override
501   public void i2s() {
502     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2s");
503   }
504
505   @Override
506   public void iadd() {
507     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iadd");
508   }
509
510   @Override
511   public void iaload() {
512     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iaload");
513   }
514
515   @Override
516   public void iand() {
517     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iand");
518   }
519
520   @Override
521   public void iastore() {
522     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iastore");
523   }
524
525   @Override
526   public void iconst_m1() {
527     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_m1");
528   }
529
530   @Override
531   public void iconst_0() {
532     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_0");
533   }
534
535   @Override
536   public void iconst_1() {
537     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_1");
538   }
539
540   @Override
541   public void iconst_2() {
542     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_2");
543   }
544
545   @Override
546   public void iconst_3() {
547     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_3");
548   }
549
550   @Override
551   public void iconst_4() {
552     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_4");
553   }
554
555   @Override
556   public void iconst_5() {
557     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_5");
558   }
559
560   @Override
561   public void idiv() {
562     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "idiv");
563   }
564
565   @Override
566   public void if_acmpeq(int pcOffset) {
567     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_acmpeq", pcOffset, (cf.getPc() + pcOffset));
568   }
569
570   @Override
571   public void if_acmpne(int pcOffset) {
572     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_acmpne", pcOffset, (cf.getPc() + pcOffset));
573   }
574
575   @Override
576   public void if_icmpeq(int pcOffset) {
577     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpeq", pcOffset, (cf.getPc() + pcOffset));
578   }
579
580   @Override
581   public void if_icmpne(int pcOffset) {
582     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpne", pcOffset, (cf.getPc() + pcOffset));
583   }
584
585   @Override
586   public void if_icmplt(int pcOffset) {
587     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmplt", pcOffset, (cf.getPc() + pcOffset));
588   }
589
590   @Override
591   public void if_icmpge(int pcOffset) {
592     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpge", pcOffset, (cf.getPc() + pcOffset));
593   }
594
595   @Override
596   public void if_icmpgt(int pcOffset) {
597     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpgt", pcOffset, (cf.getPc() + pcOffset));
598   }
599
600   @Override
601   public void if_icmple(int pcOffset) {
602     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmple", pcOffset, (cf.getPc() + pcOffset));
603   }
604
605   @Override
606   public void ifeq(int pcOffset) {
607     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifeq", pcOffset, (cf.getPc() + pcOffset));
608   }
609
610   @Override
611   public void ifne(int pcOffset) {
612     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifne", pcOffset, (cf.getPc() + pcOffset));
613   }
614
615   @Override
616   public void iflt(int pcOffset) {
617     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "iflt", pcOffset, (cf.getPc() + pcOffset));
618   }
619
620   @Override
621   public void ifge(int pcOffset) {
622     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifge", pcOffset, (cf.getPc() + pcOffset));
623   }
624
625   @Override
626   public void ifgt(int pcOffset) {
627     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifgt", pcOffset, (cf.getPc() + pcOffset));
628   }
629
630   @Override
631   public void ifle(int pcOffset) {
632     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifle", pcOffset, (cf.getPc() + pcOffset));
633   }
634
635   @Override
636   public void ifnonnull(int pcOffset) {
637     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifnonnull", pcOffset, (cf.getPc() + pcOffset));
638   }
639
640   @Override
641   public void ifnull(int pcOffset) {
642     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifnull", pcOffset, (cf.getPc() + pcOffset));
643   }
644
645   @Override
646   public void iinc(int localVarIndex, int incConstant) {
647     pw.printf("%s%3d: %s [%d] %+d\n", prefix, cf.getPc(), "iinc", localVarIndex, incConstant);
648   }
649
650   @Override
651   public void iload(int localVarIndex) {
652     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "iload", localVarIndex);
653   }
654
655   @Override
656   public void iload_0() {
657     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_0");
658   }
659
660   @Override
661   public void iload_1() {
662     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_1");
663   }
664
665   @Override
666   public void iload_2() {
667     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_2");
668   }
669
670   @Override
671   public void iload_3() {
672     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_3");
673   }
674
675   @Override
676   public void imul() {
677     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "imul");
678   }
679
680   @Override
681   public void ineg() {
682     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ineg");
683   }
684
685   @Override
686   public void instanceof_(int cpClassIndex) {
687     pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "instanceof", cpClassIndex, cf.classNameAt(cpClassIndex));
688   }
689
690   @Override
691   public void invokeinterface(int cpInterfaceMethodRefIndex, int count, int zero) {
692     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\") %d\n", prefix, cf.getPc(), "invokeinterface", cpInterfaceMethodRefIndex,
693             cf.methodClassNameAt(cpInterfaceMethodRefIndex),
694             cf.methodNameAt(cpInterfaceMethodRefIndex),
695             cf.methodDescriptorAt(cpInterfaceMethodRefIndex),
696             count);
697   }
698
699   @Override
700   public void invokespecial(int cpMethodRefIndex) {
701     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "invokespecial", cpMethodRefIndex,
702             cf.methodClassNameAt(cpMethodRefIndex),
703             cf.methodNameAt(cpMethodRefIndex),
704             cf.methodDescriptorAt(cpMethodRefIndex));
705   }
706
707   @Override
708   public void invokestatic(int cpMethodRefIndex) {
709     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "invokestatic", cpMethodRefIndex,
710             cf.methodClassNameAt(cpMethodRefIndex),
711             cf.methodNameAt(cpMethodRefIndex),
712             cf.methodDescriptorAt(cpMethodRefIndex));
713   }
714
715   @Override
716   public void invokevirtual(int cpMethodRefIndex) {
717     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "invokevirtual", cpMethodRefIndex,
718             cf.methodClassNameAt(cpMethodRefIndex),
719             cf.methodNameAt(cpMethodRefIndex),
720             cf.methodDescriptorAt(cpMethodRefIndex));
721   }
722
723   @Override
724   public void invokedynamic (int cpInvokeDynamicIndex){
725     pw.printf("%s%3d: %s @%d\n", prefix, cf.getPc(), "invokedynamic", cpInvokeDynamicIndex);
726   }
727   
728   @Override
729   public void ior() {
730     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ior");
731   }
732
733   @Override
734   public void irem() {
735     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "irem");
736   }
737
738   @Override
739   public void ireturn() {
740     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ireturn");
741   }
742
743   @Override
744   public void ishl() {
745     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ishl");
746   }
747
748   @Override
749   public void ishr() {
750     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ishr");
751   }
752
753   @Override
754   public void istore(int localVarIndex) {
755     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "istore", localVarIndex);
756   }
757
758   @Override
759   public void istore_0() {
760     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_0");
761   }
762
763   @Override
764   public void istore_1() {
765     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_1");
766   }
767
768   @Override
769   public void istore_2() {
770     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_2");
771   }
772
773   @Override
774   public void istore_3() {
775     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_3");
776   }
777
778   @Override
779   public void isub() {
780     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "isub");
781   }
782
783   @Override
784   public void iushr() {
785     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iushr");
786   }
787
788   @Override
789   public void ixor() {
790     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ixor");
791   }
792
793   @Override
794   public void jsr(int pcOffset) {
795     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "jsr", pcOffset, (cf.getPc() + pcOffset));
796   }
797
798   @Override
799   public void jsr_w(int pcOffset) {
800     pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "jsr_w", pcOffset, (cf.getPc() + pcOffset));
801   }
802
803   @Override
804   public void l2d() {
805     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "l2d");
806   }
807
808   @Override
809   public void l2f() {
810     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "l2f");
811   }
812
813   @Override
814   public void l2i() {
815     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "l2i");
816   }
817
818   @Override
819   public void ladd() {
820     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ladd");
821   }
822
823   @Override
824   public void laload() {
825     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "laload");
826   }
827
828   @Override
829   public void land() {
830     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "land");
831   }
832
833   @Override
834   public void lastore() {
835     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lastore");
836   }
837
838   @Override
839   public void lcmp() {
840     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lcmp");
841   }
842
843   @Override
844   public void lconst_0() {
845     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lconst_0");
846   }
847
848   @Override
849   public void lconst_1() {
850     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lconst_1");
851   }
852
853   @Override
854   public void ldc_(int cpIntOrFloatOrStringIndex) {
855     pw.printf("%s%3d: %s @%d(%s)\n", prefix, cf.getPc(), "ldc", cpIntOrFloatOrStringIndex,
856             cf.getCpValue(cpIntOrFloatOrStringIndex));
857   }
858
859   @Override
860   public void ldc_w_(int cpIntOrFloatOrStringIndex) {
861     pw.printf("%s%3d: %s @%d(%s)\n", prefix, cf.getPc(), "ldc_w", cpIntOrFloatOrStringIndex,
862             cf.getCpValue(cpIntOrFloatOrStringIndex));
863   }
864
865   @Override
866   public void ldc2_w(int cpLongOrDoubleIndex) {
867     pw.printf("%s%3d: %s @%d(%s)\n", prefix, cf.getPc(), "ldc2_w", cpLongOrDoubleIndex,
868             cf.getCpValue(cpLongOrDoubleIndex));
869   }
870
871   @Override
872   public void ldiv() {
873     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ldiv");
874   }
875
876   @Override
877   public void lload(int localVarIndex) {
878     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "lload", localVarIndex);
879   }
880
881   @Override
882   public void lload_0() {
883     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_0");
884   }
885
886   @Override
887   public void lload_1() {
888     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_1");
889   }
890
891   @Override
892   public void lload_2() {
893     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_2");
894   }
895
896   @Override
897   public void lload_3() {
898     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_3");
899   }
900
901   @Override
902   public void lmul() {
903     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lmul");
904   }
905
906   @Override
907   public void lneg() {
908     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lneg");
909   }
910
911   @Override
912   public void lookupswitch(int defaultPcOffset, int nEntries) {
913     pw.printf("%s%3d: %s default:%+d\n", prefix, cf.getPc(), "lookupswitch", defaultPcOffset);
914     cf.parseLookupSwitchEntries(this, nEntries);
915   }
916   @Override
917   public void lookupswitchEntry(int index, int match, int pcOffset){
918     pw.printf("%s      %d : %+d (%d)\n", prefix, match, pcOffset, (cf.getPc() + pcOffset));
919   }
920
921
922   @Override
923   public void lor() {
924     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lor");
925   }
926
927   @Override
928   public void lrem() {
929     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lrem");
930   }
931
932   @Override
933   public void lreturn() {
934     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lreturn");
935   }
936
937   @Override
938   public void lshl() {
939     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lshl");
940   }
941
942   @Override
943   public void lshr() {
944     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lshr");
945   }
946
947   @Override
948   public void lstore(int localVarIndex) {
949     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "lstore", localVarIndex);
950   }
951
952   @Override
953   public void lstore_0() {
954     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_0");
955   }
956
957   @Override
958   public void lstore_1() {
959     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_1");
960   }
961
962   @Override
963   public void lstore_2() {
964     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_2");
965   }
966
967   @Override
968   public void lstore_3() {
969     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_3");
970   }
971
972   @Override
973   public void lsub() {
974     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lsub");
975   }
976
977   @Override
978   public void lushr() {
979     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lushr");
980   }
981
982   @Override
983   public void lxor() {
984     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lxor");
985   }
986
987   @Override
988   public void monitorenter() {
989     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "monitorenter");
990   }
991
992   @Override
993   public void monitorexit() {
994     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "monitorexit");
995   }
996
997   @Override
998   public void multianewarray(int cpClassIndex, int dimensions) {
999     pw.printf("%s%3d: %s @%d(\"%s\") dim: %d\n", prefix, cf.getPc(), "multianewarray",
1000             cpClassIndex, cf.classNameAt(cpClassIndex), dimensions);
1001   }
1002
1003   @Override
1004   public void new_(int cpClassIndex) {
1005     pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "new",
1006             cpClassIndex, cf.classNameAt(cpClassIndex));
1007   }
1008
1009   @Override
1010   public void newarray(int typeCode) {
1011     pw.printf("%s%3d: %s %s[]\n", prefix, cf.getPc(), "newarray", cf.getTypeName(typeCode));
1012   }
1013
1014   @Override
1015   public void nop() {
1016     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "nop");
1017   }
1018
1019   @Override
1020   public void pop() {
1021     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "pop");
1022   }
1023
1024   @Override
1025   public void pop2() {
1026     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "pop2");
1027   }
1028
1029   @Override
1030   public void putfield(int cpFieldRefIndex) {
1031     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "putfield", cpFieldRefIndex,
1032             cf.fieldClassNameAt(cpFieldRefIndex),
1033             cf.fieldNameAt(cpFieldRefIndex),
1034             cf.fieldDescriptorAt(cpFieldRefIndex));
1035   }
1036
1037   @Override
1038   public void putstatic(int cpFieldRefIndex) {
1039     pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "putstatic", cpFieldRefIndex,
1040             cf.fieldClassNameAt(cpFieldRefIndex),
1041             cf.fieldNameAt(cpFieldRefIndex),
1042             cf.fieldDescriptorAt(cpFieldRefIndex));
1043   }
1044
1045   @Override
1046   public void ret(int localVarIndex) {
1047     pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "ret", localVarIndex);
1048   }
1049
1050   @Override
1051   public void return_() {
1052     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "return");
1053   }
1054
1055   @Override
1056   public void saload() {
1057     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "saload");
1058   }
1059
1060   @Override
1061   public void sastore() {
1062     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "sastore");
1063   }
1064
1065   @Override
1066   public void sipush(int val) {
1067     pw.printf("%s%3d: %s %d\n", prefix, cf.getPc(), "sipush", val);
1068   }
1069
1070   @Override
1071   public void swap() {
1072     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "swap");
1073   }
1074
1075   @Override
1076   public void tableswitch(int defaultPcOffset, int low, int high) {
1077     pw.printf("%s%3d: %s [%d..%d] default: %+d\n", prefix, cf.getPc(), "tableswitch", low, high, defaultPcOffset);
1078     cf.parseTableSwitchEntries(this, low, high);
1079   }
1080   @Override
1081   public void tableswitchEntry(int val, int pcOffset){
1082     pw.printf("%s      %d: %+d (%d)\n", prefix, val, pcOffset, (cf.getPc() + pcOffset));
1083   }
1084
1085   @Override
1086   public void wide() {
1087     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "wide");
1088   }
1089
1090   @Override
1091   public void unknown(int bytecode) {
1092     pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "");
1093   }
1094
1095
1096 }