package scm; import jas.*; class InsnProcedure extends Procedure implements Obj, jas.RuntimeConstants { int opc; Obj apply(Cell args, Env f) throws Exception { if (args == null) { return new primnode(new Insn(opc)); } Obj t = (args.car).eval(f); if (t instanceof Selfrep) { // Single integer arg int val = (int) (((Selfrep)t).num); return new primnode(new Insn(opc, val)); } if (t instanceof primnode) { Object tprime = ((primnode)t).val; if (tprime instanceof CP) { // Single CP argument return new primnode(new Insn(opc, (CP)tprime)); } // Labels if (tprime instanceof Label) { return new primnode(new Insn(opc, (Label)tprime)); } } throw new SchemeError("Sorry, not yet implemented " + this.toString()); } InsnProcedure(int opc) { this.opc = opc; } public String toString() { return ("<#insn "+opcNames[opc]+"#>"); } }