X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2Fpackage.html;fp=src%2Forg%2Fibex%2Fclassgen%2Fpackage.html;h=c921dab5d31a0b92eacb2033cfe0d62402e49b33;hb=94cebd4c12247ae7fd0a4b0cc66609fead0efece;hp=0000000000000000000000000000000000000000;hpb=fb8a2dfe2f45b27710921562df968b86f2faceee;p=org.ibex.classgen.git diff --git a/src/org/ibex/classgen/package.html b/src/org/ibex/classgen/package.html new file mode 100644 index 0000000..c921dab --- /dev/null +++ b/src/org/ibex/classgen/package.html @@ -0,0 +1,83 @@ + +Example Usage:
+ +The following:
+
+        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,"",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");
+
+ +Will create this bytecode: +
+public class Test1 extends java.lang.Object{
+private static java.lang.String message;
+
+public static void main(java.lang.String[]);
+   throws 
+  Code:
+   0:   bipush  10
+   2:   istore_0
+   3:   getstatic       #10; //Field java/lang/System.out:Ljava/io/PrintStream;
+   6:   new     #12; //class StringBuffer
+   9:   dup
+   10:  invokespecial   #16; //Method java/lang/StringBuffer."":()V
+   13:  getstatic       #20; //Field message:Ljava/lang/String;
+   16:  invokevirtual   #24; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
+   19:  ldc     #26; //String  - 
+   21:  invokevirtual   #24; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
+   24:  iload_0
+   25:  invokevirtual   #29; //Method java/lang/StringBuffer.append:(I)Ljava/lang/StringBuffer;
+   28:  iload_0
+   29:  iconst_1
+   30:  iand
+   31:  ifne    39
+   34:  bipush  33
+   36:  invokevirtual   #32; //Method java/lang/StringBuffer.append:(C)Ljava/lang/StringBuffer;
+   39:  invokevirtual   #36; //Method java/lang/StringBuffer.toString:()Ljava/lang/String;
+   42:  invokevirtual   #42; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
+   45:  iinc    0, -1
+   48:  iload_0
+   49:  ifgt    3
+   52:  return
+
+}
+
+