way more Arena functionality
[org.ibex.classgen.git] / src / org / ibex / classgen / package.html
1 <body>
2 Example Usage:<br/>
3
4 The following:<br/>
5 <pre>
6 ClassGen cg = new ClassGen("Test1","java.lang.Object",ACC_PUBLIC|ACC_SUPER);
7
8 FieldGen fg = cg.addField("message",Type.STRING,ACC_PRIVATE|ACC_STATIC);
9 fg.setConstantValue("Hello, World");
10
11 MethodGen mg = cg.addMethod("main",Type.VOID,new Type[]{Type.arrayType(Type.STRING)},ACC_STATIC|ACC_PUBLIC);
12 mg.add(LDC,10);
13 mg.add(ISTORE_0);
14
15 int top = mg.size();
16 mg.add(GETSTATIC,new FieldRef("java.lang.System","out",new Type.Object("java.io.PrintStream")));
17 mg.add(NEW,Type.STRINGBUFFER);
18 mg.add(DUP);
19 mg.add(INVOKESPECIAL,new MethodRef(Type.STRINGBUFFER,"&lt;init&gt;",Type.VOID,Type.NO_ARGS));
20 mg.add(GETSTATIC,new FieldRef("Test1","message",Type.STRING));
21 mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING}));
22 mg.add(LDC," - ");
23 mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING}));
24 mg.add(ILOAD_0);
25 mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.INT}));
26
27 mg.add(ILOAD_0);
28 mg.add(ICONST_1);
29 mg.add(IAND);
30 int b1 = mg.add(IFNE);
31 mg.add(LDC,'!');
32 mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.CHAR}));
33 mg.setArg(b1,mg.size());
34
35 mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"toString",Type.STRING,Type.NO_ARGS));
36 mg.add(INVOKEVIRTUAL,new MethodRef("java.io.PrintStream","println",Type.VOID,new Type[]{Type.STRING}));
37
38 mg.add(IINC,new MethodGen.Pair(0,-1));
39
40 mg.add(ILOAD_0);
41 mg.add(IFGT,top);
42
43 mg.add(RETURN);
44
45 cg.dump("Test1.class");
46 </pre>
47
48 Will create this bytecode:
49 <pre>
50 public class Test1 extends java.lang.Object{
51 private static java.lang.String message;
52
53 public static void main(java.lang.String[]);
54    throws 
55   Code:
56    0:   bipush  10
57    2:   istore_0
58    3:   getstatic       #10; //Field java/lang/System.out:Ljava/io/PrintStream;
59    6:   new     #12; //class StringBuffer
60    9:   dup
61    10:  invokespecial   #16; //Method java/lang/StringBuffer."&lt;init&gt;":()V
62    13:  getstatic       #20; //Field message:Ljava/lang/String;
63    16:  invokevirtual   #24; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
64    19:  ldc     #26; //String  - 
65    21:  invokevirtual   #24; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
66    24:  iload_0
67    25:  invokevirtual   #29; //Method java/lang/StringBuffer.append:(I)Ljava/lang/StringBuffer;
68    28:  iload_0
69    29:  iconst_1
70    30:  iand
71    31:  ifne    39
72    34:  bipush  33
73    36:  invokevirtual   #32; //Method java/lang/StringBuffer.append:(C)Ljava/lang/StringBuffer;
74    39:  invokevirtual   #36; //Method java/lang/StringBuffer.toString:()Ljava/lang/String;
75    42:  invokevirtual   #42; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
76    45:  iinc    0, -1
77    48:  iload_0
78    49:  ifgt    3
79    52:  return
80
81 }
82 </pre>
83
84 Running Test1 will produce the following output:<br/>
85 <pre>
86 Hello, World - 10!
87 Hello, World - 9
88 Hello, World - 8!
89 Hello, World - 7
90 Hello, World - 6!
91 Hello, World - 5
92 Hello, World - 4!
93 Hello, World - 3
94 Hello, World - 2!
95 Hello, World - 1
96 </pre>
97
98 </body>