
scm.autogen.autogen Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jasmin Show documentation
Show all versions of jasmin Show documentation
Java Assembler Interface for the Soot framework
package scm.autogen;
// Generate glue code
import java.io.*;
import java.util.*;
class typeinfo
{
String scm_name;
String java_name;
String java_inp_type[];
typeinfo(String sname, String jname, String jit[])
{
scm_name = sname;
java_name = jname;
java_inp_type = jit;
}
void write(PrintStream out)
{
int mode;
out.println("//Autogenerated by typeinfo on " + new Date());
out.println("class scm" + java_name + " extends Procedure implements Obj");
out.println("{");
out.println(" Obj apply(Cell args, Env f)\n throws Exception\n {");
out.println(" Cell t = args;");
out.println(" Obj tmp;");
for (int i=0; i\"); }");
out.println("}");
}
}
class procinfo
// Create simple procedures
// automatically
{
String java_name;
String scm_name;
String java_inp_type[];
procinfo(String sname, String jname, String jit[])
{
java_name = jname;
scm_name = sname;
java_inp_type = jit;
}
void write(PrintStream out)
{
int mode;
out.println("//Autogenerated by procinfo on " + new Date());
out.println
("class scm" + java_name + " extends Procedure implements Obj\n{");
out.println
(" Obj apply(Cell args, Env f)\n throws Exception\n {\n");
out.println
(" Cell t = args;");
out.println
(" Obj tmp;");
for (int i=0; i\"); }");
out.println("}");
}
}
class autogen implements jas.RuntimeConstants
{
static String procs[][] =
{
// Manipulate class env
{"ClassEnv", "CP"}, {"jas-class-addcpe", "addCPItem"},
{"ClassEnv", "Var"}, {"jas-class-addfield", "addField"},
{"ClassEnv", "CP"}, {"jas-class-addinterface", "addInterface"},
{"ClassEnv", "CP"}, {"jas-class-setclass", "setClass"},
{"ClassEnv", "CP"}, {"jas-class-setsuperclass", "setSuperClass"},
{"ClassEnv", "short", "String", "String", "CodeAttr", "ExceptAttr"},
{"jas-class-addmethod", "addMethod"},
{"ClassEnv", "short"}, {"jas-class-setaccess", "setClassAccess"},
{"ClassEnv", "String"}, {"jas-class-setsource", "setSource"},
{"ClassEnv", "scmOutputStream"}, {"jas-class-write", "write"},
// Add things to exceptions
{"ExceptAttr", "CP"}, {"jas-exception-add", "addException"},
// Manipulate code attrs
{"CodeAttr", "Insn"}, {"jas-code-addinsn", "addInsn"},
{"CodeAttr", "short"}, {"jas-code-stack-size", "setStackSize"},
{"CodeAttr", "short"}, {"jas-code-var-size", "setVarSize"},
{"CodeAttr", "Catchtable"}, {"jas-set-catchtable", "setCatchtable"},
// add things to catchtables
{"Catchtable", "CatchEntry"}, {"jas-add-catch-entry", "addEntry"},
};
static String types[][] =
{
{"String"}, {"make-ascii-cpe", "AsciiCP"},
{"String"}, {"make-class-cpe", "ClassCP"},
{"String", "String"}, {"make-name-type-cpe", "NameTypeCP"},
{"String", "String", "String"}, {"make-field-cpe", "FieldCP"},
{"String", "String", "String"}, {"make-interface-cpe", "InterfaceCP"},
{"String", "String", "String"}, {"make-method-cpe", "MethodCP"},
{"int"}, {"make-integer-cpe", "IntegerCP"},
{"float"}, {"make-float-cpe", "FloatCP"},
{"long"}, {"make-long-cpe", "LongCP"},
{"double"}, {"make-double-cpe", "DoubleCP"},
{"String"}, {"make-string-cpe", "StringCP"},
{"short", "CP", "CP", "ConstAttr"}, {"make-field", "Var"},
{"CP"}, {"make-const", "ConstAttr"},
{"String"}, {"make-outputstream", "scmOutputStream"},
{"String"}, {"make-label", "Label"},
{}, {"make-class-env", "ClassEnv"},
{}, {"make-code", "CodeAttr"},
{}, {"make-exception", "ExceptAttr"},
{}, {"make-catchtable", "Catchtable"},
{"Label", "Label", "Label", "CP"}, {"make-catch-entry", "CatchEntry"},
{"int", "int"}, {"iinc", "IincInsn"},
{"CP", "int"}, {"multianewarray", "MultiarrayInsn"},
{"CP", "int"}, {"invokeinterface", "InvokeinterfaceInsn"},
};
public static void main(String argv[])
throws IOException
{
PrintStream initer =
new PrintStream(new FileOutputStream("AutoInit.java"));
initer.println("package scm;\n\nimport jas.*;");
initer.println("class AutoInit\n{\n static void fillit(Env e)\n {");
// Generate types in the system.
PrintStream doit = new PrintStream(new FileOutputStream("AutoTypes.java"));
doit.println("package scm;\n\nimport jas.*;");
for (int x = 0; x
© 2015 - 2025 Weber Informatics LLC | Privacy Policy