first commit
This commit is contained in:
commit
063194f8be
349 changed files with 36508 additions and 0 deletions
16
jasmin/jasmin-2.4/lib/jas/tests/README
Normal file
16
jasmin/jasmin-2.4/lib/jas/tests/README
Normal file
|
@ -0,0 +1,16 @@
|
|||
This is a start of a basic set of tests intended to exercise the API
|
||||
functions available in the jas and scm packages. It is not complete by
|
||||
any means.
|
||||
|
||||
all.java tries to touch as much of the jas API as it can, generating a
|
||||
non functional class called regress.class. all.jas does
|
||||
something similar, but for the scm package.
|
||||
|
||||
Once the jas and scm packages are compiled, do this:
|
||||
|
||||
% (cd ..; javac -d . tests/all.java; java all; cmp regress.class tests/regress.class)
|
||||
% (cd ..; java scm.driver tests/all.jas; cmp scmregress.class tests/scmregress.class)
|
||||
|
||||
|
||||
If both these complete silently, you are in good shape. Otherwise,
|
||||
mail me a bug report and enough details for me to replicate it :)
|
72
jasmin/jasmin-2.4/lib/jas/tests/all.jas
Normal file
72
jasmin/jasmin-2.4/lib/jas/tests/all.jas
Normal file
|
@ -0,0 +1,72 @@
|
|||
(define my-env (make-class-env))
|
||||
|
||||
(jas-class-addcpe my-env (make-ascii-cpe "fubar"))
|
||||
(jas-class-addcpe my-env (make-class-cpe "java/lang/Number"))
|
||||
(jas-class-addcpe my-env (make-double-cpe 2.0))
|
||||
(jas-class-addcpe my-env
|
||||
(make-field-cpe "java/lang/System" "out" "Ljava/io/PrintStream;"))
|
||||
(jas-class-addcpe my-env (make-float-cpe 2.0))
|
||||
(jas-class-addcpe my-env (make-integer-cpe 2))
|
||||
(jas-class-addcpe my-env
|
||||
(make-interface-cpe "java/lang/Runnable" "run" "()V"))
|
||||
(jas-class-addcpe my-env (make-long-cpe 2))
|
||||
(jas-class-addcpe my-env
|
||||
(make-method-cpe "java/lang/Thread" "run" "()V"))
|
||||
(jas-class-addcpe my-env
|
||||
(make-name-type-cpe "sdfsdf" "Ljava/lang/Object;"))
|
||||
(jas-class-addcpe my-env (make-string-cpe "sdf"))
|
||||
(jas-class-addfield my-env
|
||||
(make-field
|
||||
acc-public (make-ascii-cpe "someIntVar") (make-ascii-cpe "I") ()))
|
||||
(jas-class-addfield my-env
|
||||
(make-field
|
||||
(| acc-public acc-static) (make-ascii-cpe "finalInt")
|
||||
(make-ascii-cpe "I") (make-const (make-integer-cpe 10.2))))
|
||||
(jas-class-addinterface my-env (make-class-cpe "java/lang/Runnable"))
|
||||
(jas-class-setclass my-env (make-class-cpe "scmregress"))
|
||||
(jas-class-setsuperclass my-env (make-class-cpe "java/lang/Object"))
|
||||
(jas-class-setaccess my-env acc-public)
|
||||
|
||||
|
||||
(define my-code (make-code))
|
||||
(jas-code-addinsn my-code (return))
|
||||
(jas-code-addinsn my-code (astore 5))
|
||||
(jas-code-addinsn my-code (make-label "First label"))
|
||||
(jas-code-addinsn my-code (jsr (make-label "First label")))
|
||||
(define saved-label (make-label "second_label"))
|
||||
(jas-code-addinsn my-code saved-label)
|
||||
(jas-code-addinsn my-code (ldc_w (make-string-cpe "sdfsdf")))
|
||||
(jas-code-addinsn my-code (iinc 2 -2))
|
||||
(jas-code-addinsn my-code
|
||||
(invokeinterface
|
||||
(make-class-cpe "java/lang/Number") 1))
|
||||
|
||||
(jas-code-addinsn my-code (multianewarray (make-class-cpe "java/lang/Double")
|
||||
3))
|
||||
(define ctb (make-catchtable))
|
||||
(jas-add-catch-entry ctb (make-catch-entry
|
||||
(make-label "First label")
|
||||
saved-label
|
||||
saved-label
|
||||
(make-class-cpe "java/lang/Exception")))
|
||||
(jas-add-catch-entry ctb (make-catch-entry
|
||||
(make-label "First label")
|
||||
saved-label
|
||||
saved-label
|
||||
(make-class-cpe "java/lang/Error")))
|
||||
(jas-set-catchtable my-code ctb)
|
||||
(jas-code-stack-size my-code 100)
|
||||
(jas-code-var-size my-code 100)
|
||||
(define my-except (make-exception))
|
||||
(jas-exception-add my-except (make-class-cpe "java/io/IOException"))
|
||||
(jas-exception-add my-except (make-class-cpe "java/lang/Error"))
|
||||
|
||||
(jas-class-addmethod my-env
|
||||
acc-public
|
||||
"somemethod"
|
||||
"(I)V"
|
||||
my-code
|
||||
my-except)
|
||||
(jas-class-write my-env (make-outputstream "scmregress.class"))
|
||||
|
||||
|
155
jasmin/jasmin-2.4/lib/jas/tests/all.java
Normal file
155
jasmin/jasmin-2.4/lib/jas/tests/all.java
Normal file
|
@ -0,0 +1,155 @@
|
|||
// Simply try
|
||||
// to access as much of
|
||||
// the API as possible.
|
||||
|
||||
import jas.*;
|
||||
|
||||
import java.io.*;
|
||||
import sun.tools.java.RuntimeConstants;
|
||||
|
||||
public class all implements RuntimeConstants
|
||||
{
|
||||
public static void main(String argv[])
|
||||
throws Exception
|
||||
{
|
||||
ClassEnv c = new ClassEnv();
|
||||
|
||||
// Adding CP Items directly
|
||||
|
||||
c.addCPItem(new AsciiCP("fubar"));
|
||||
c.addCPItem(new ClassCP("java/lang/Number"));
|
||||
c.addCPItem(new DoubleCP(2.0));
|
||||
c.addCPItem(new FieldCP("java/lang/System",
|
||||
"out",
|
||||
"Ljava/io/PrintStream;"));
|
||||
c.addCPItem(new FloatCP((float)(2.0)));
|
||||
c.addCPItem(new IntegerCP(2));
|
||||
c.addCPItem(new InterfaceCP("java/lang/Runnable",
|
||||
"run",
|
||||
"()V"));
|
||||
c.addCPItem(new LongCP(2));
|
||||
c.addCPItem(new MethodCP("java/lang/Thread",
|
||||
"run",
|
||||
"()V"));
|
||||
|
||||
c.addCPItem(new NameTypeCP("sdfsdf", "Ljava/lang/Object;"));
|
||||
c.addCPItem(new StringCP("sdf"));
|
||||
|
||||
|
||||
// Add fields, creating variables
|
||||
c.addField(new Var((short) ACC_PUBLIC,
|
||||
new AsciiCP("someIntvar"),
|
||||
new AsciiCP("I"),
|
||||
null));
|
||||
c.addField(new Var((short)(ACC_PUBLIC|ACC_STATIC|ACC_FINAL),
|
||||
new AsciiCP("finalInt"),
|
||||
new AsciiCP("I"),
|
||||
new ConstAttr(new IntegerCP(10))));
|
||||
|
||||
// Check if I can add interfaces
|
||||
c.addInterface(new ClassCP("java/lang/Runnable"));
|
||||
|
||||
c.setClass(new ClassCP("regress"));
|
||||
c.setSuperClass(new ClassCP("java/lang/Object"));
|
||||
c.setClassAccess((short) ACC_PUBLIC);
|
||||
|
||||
// Creating code.
|
||||
|
||||
CodeAttr code = new CodeAttr();
|
||||
// add instructions of various
|
||||
// operand types.
|
||||
|
||||
// No operands
|
||||
code.addInsn(new Insn(opc_return));
|
||||
// one arg operands
|
||||
code.addInsn(new Insn(opc_astore, 5));
|
||||
// one arg arguments with wide operand
|
||||
code.addInsn(new Insn(opc_dstore, 256));
|
||||
code.addInsn(new Insn(opc_istore, 2576));
|
||||
|
||||
// Add a label
|
||||
code.addInsn(new Label("First label"));
|
||||
// refer back to it
|
||||
code.addInsn(new Insn(opc_jsr,
|
||||
new Label("First label")));
|
||||
// add another label
|
||||
code.addInsn(new Label("second_label"));
|
||||
// insn with CP argument
|
||||
code.addInsn(new Insn(opc_ldc_w, new StringCP("sdfsdf")));
|
||||
|
||||
// the "special" instructions
|
||||
code.addInsn(new IincInsn(2, -2));
|
||||
// wider version check
|
||||
code.addInsn(new IincInsn(1234, 2));
|
||||
code.addInsn(new IincInsn(3, -200));
|
||||
code.addInsn(new InvokeinterfaceInsn(new ClassCP("java/lang/Number"), 1));
|
||||
code.addInsn(new MultiarrayInsn(new ClassCP("java/lang/Double"), 3));
|
||||
Label woo[] = new Label[3];
|
||||
woo[0] = new Label("First label");
|
||||
woo[1] = new Label("second_label");
|
||||
woo[2] = new Label("second_label");
|
||||
code.addInsn(new TableswitchInsn(0, 2, woo[0], woo));
|
||||
|
||||
int m[] = new int[3];
|
||||
m[0] = 11;
|
||||
m[1] = 15;
|
||||
m[2] = -1;
|
||||
code.addInsn(new LookupswitchInsn(woo[0], m, woo));
|
||||
|
||||
|
||||
// make a catchtable
|
||||
Catchtable ctb = new Catchtable();
|
||||
// add a couple of entries
|
||||
ctb.addEntry(new Label("First label"),
|
||||
new Label("second_label"),
|
||||
new Label("second_label"),
|
||||
new ClassCP("java/lang/Exception"));
|
||||
ctb.addEntry(new Label("First label"),
|
||||
new Label("second_label"),
|
||||
new Label("second_label"),
|
||||
new ClassCP("java/lang/Error"));
|
||||
code.setCatchtable(ctb);
|
||||
code.setStackSize((short)100);
|
||||
code.setVarSize((short)500);
|
||||
// Add some line table info
|
||||
LineTableAttr ln = new LineTableAttr();
|
||||
ln.addEntry(woo[0], 234);
|
||||
ln.addEntry(woo[1], 245);
|
||||
ln.addEntry(woo[2], 22);
|
||||
code.setLineTable(ln);
|
||||
// Add a generic attr to a method
|
||||
String foo = "sldkfj sdlfkj";
|
||||
byte dat[] = new byte[foo.length()];
|
||||
foo.getBytes(0, dat.length, dat, 0);
|
||||
code.addGenericAttr(new GenericAttr("strangeAttr", dat));
|
||||
|
||||
// Also adding local varinfo
|
||||
LocalVarTableAttr lv = new LocalVarTableAttr();
|
||||
lv.addEntry(new LocalVarEntry(woo[0], woo[2], "fakevar", "I", 22));
|
||||
lv.addEntry(new LocalVarEntry(woo[1], woo[1], "morefa", "()V", 10));
|
||||
code.setLocalVarTable(lv);
|
||||
|
||||
// check out add method, also
|
||||
// adding a throws exception for
|
||||
// good measure
|
||||
ExceptAttr ex = new ExceptAttr();
|
||||
ex.addException(new ClassCP("java/io/IOException"));
|
||||
ex.addException(new ClassCP("java/lang/Error"));
|
||||
c.addMethod((short) ACC_PUBLIC,
|
||||
"fubarmethod",
|
||||
"()V",
|
||||
code,
|
||||
ex);
|
||||
|
||||
|
||||
|
||||
|
||||
// Add a source file attribute
|
||||
c.setSource(new SourceAttr("all.java"));
|
||||
// Add some more generic attribute
|
||||
c.addGenericAttr(new GenericAttr("blahAttr", dat));
|
||||
c.write(new DataOutputStream(new FileOutputStream("regress.class")));
|
||||
}
|
||||
}
|
||||
|
||||
|
BIN
jasmin/jasmin-2.4/lib/jas/tests/regress.class
Normal file
BIN
jasmin/jasmin-2.4/lib/jas/tests/regress.class
Normal file
Binary file not shown.
BIN
jasmin/jasmin-2.4/lib/jas/tests/scmregress.class
Normal file
BIN
jasmin/jasmin-2.4/lib/jas/tests/scmregress.class
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue