The following:<br/>
<pre>
- ClassGen cg = new ClassGen("Test1","java.lang.Object",ACC_PUBLIC|ACC_SUPER);
-
- FieldGen fg = cg.addField("message",Type.STRING,ACC_PRIVATE|ACC_STATIC);
- fg.setConstantValue("Hello, World");
-
- MethodGen mg = cg.addMethod("main",Type.VOID,new Type[]{Type.arrayType(Type.STRING)},ACC_STATIC|ACC_PUBLIC);
- mg.add(LDC,10);
- mg.add(ISTORE_0);
-
- int top = mg.size();
- mg.add(GETSTATIC,new FieldRef("java.lang.System","out",new Type.Object("java.io.PrintStream")));
- mg.add(NEW,Type.STRINGBUFFER);
- mg.add(DUP);
- mg.add(INVOKESPECIAL,new MethodRef(Type.STRINGBUFFER,"<init>",Type.VOID,Type.NO_ARGS));
- mg.add(GETSTATIC,new FieldRef("Test1","message",Type.STRING));
- mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING}));
- mg.add(LDC," - ");
- mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING}));
- mg.add(ILOAD_0);
- mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.INT}));
-
- mg.add(ILOAD_0);
- mg.add(ICONST_1);
- mg.add(IAND);
- int b1 = mg.add(IFNE);
- mg.add(LDC,'!');
- mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.CHAR}));
- mg.setArg(b1,mg.size());
-
- mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"toString",Type.STRING,Type.NO_ARGS));
- mg.add(INVOKEVIRTUAL,new MethodRef("java.io.PrintStream","println",Type.VOID,new Type[]{Type.STRING}));
-
- mg.add(IINC,new MethodGen.Pair(0,-1));
+ClassGen cg = new ClassGen("Test1","java.lang.Object",ACC_PUBLIC|ACC_SUPER);
- mg.add(ILOAD_0);
- mg.add(IFGT,top);
-
- mg.add(RETURN);
-
- cg.dump("Test1.class");
+FieldGen fg = cg.addField("message",Type.STRING,ACC_PRIVATE|ACC_STATIC);
+fg.setConstantValue("Hello, World");
+
+MethodGen mg = cg.addMethod("main",Type.VOID,new Type[]{Type.arrayType(Type.STRING)},ACC_STATIC|ACC_PUBLIC);
+mg.add(LDC,10);
+mg.add(ISTORE_0);
+
+int top = mg.size();
+mg.add(GETSTATIC,new FieldRef("java.lang.System","out",new Type.Object("java.io.PrintStream")));
+mg.add(NEW,Type.STRINGBUFFER);
+mg.add(DUP);
+mg.add(INVOKESPECIAL,new MethodRef(Type.STRINGBUFFER,"<init>",Type.VOID,Type.NO_ARGS));
+mg.add(GETSTATIC,new FieldRef("Test1","message",Type.STRING));
+mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING}));
+mg.add(LDC," - ");
+mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING}));
+mg.add(ILOAD_0);
+mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.INT}));
+
+mg.add(ILOAD_0);
+mg.add(ICONST_1);
+mg.add(IAND);
+int b1 = mg.add(IFNE);
+mg.add(LDC,'!');
+mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.CHAR}));
+mg.setArg(b1,mg.size());
+
+mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"toString",Type.STRING,Type.NO_ARGS));
+mg.add(INVOKEVIRTUAL,new MethodRef("java.io.PrintStream","println",Type.VOID,new Type[]{Type.STRING}));
+
+mg.add(IINC,new MethodGen.Pair(0,-1));
+
+mg.add(ILOAD_0);
+mg.add(IFGT,top);
+
+mg.add(RETURN);
+
+cg.dump("Test1.class");
</pre>
Will create this bytecode: