home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- import java.util.Enumeration;
- import java.util.Hashtable;
-
- class Simplify implements Constants {
- private static final Name booleanValueS = Name.fromString("booleanValue");
- private static final Name doubleValueS = Name.fromString("doubleValue");
- private static final Name floatValueS = Name.fromString("floatValue");
- private static final Name longValueS = Name.fromString("longValue");
- private static final Name intValueS = Name.fromString("intValue");
- private static final Name BooleanS = Name.fromString("Boolean");
- private static final Name DoubleS = Name.fromString("Double");
- private static final Name FloatS = Name.fromString("Float");
- private static final Name LongS = Name.fromString("Long");
- private static final Name IntegerS = Name.fromString("Integer");
- private static final Name boxS = Name.fromString("espresso.lang.Closure.box");
- static final Name dollarS = Name.fromString("$");
- static final Name argsS = Name.fromString("$args");
- static final Name tagS = Name.fromString("$tag");
- static final Name receiverS = Name.fromString("$receiver");
- static final Name fvarsS = Name.fromString("$fvars");
- static final Name allargsS = Name.fromString("$allargs");
- static final Name closureS = Name.fromString("$closure");
- static final Name applyS = Name.fromString("$apply");
- static final Name nullS = Name.fromString("null");
- static final Name combineS = Name.fromString("combine");
- static final Name ThrowableS = Name.fromString("Throwable");
- static final Name MessageNotUnderstoodS = Name.fromString("espresso.lang.MessageNotUnderstood");
- static final Name ClosureS = Name.fromString("espresso.lang.Closure");
- static final Name ReceiverS = Name.fromString("espresso.lang.Receiver");
-
- static int totalClosures(ClassObj var0) {
- return var0 == null ? 0 : var0.nclosures + totalClosures(var0.superclass);
- }
-
- static void swapTypes() {
- Enumeration var0 = ClassFile.loaded.elements();
-
- while(var0.hasMoreElements()) {
- Object var1 = var0.nextElement();
- if (var1 instanceof ClassObj) {
- ClassObj var2 = (ClassObj)var1;
- if (var2.scope != null) {
- for(ScopeEntry var3 = var2.scope.elements(); var3 != null; var3 = var3.sibling) {
- if (var3.obj.alttyp != null) {
- Typ var4 = var3.obj.typ;
- var3.obj.typ = var3.obj.alttyp;
- var3.obj.alttyp = var4;
- }
- }
- }
- }
- }
-
- }
-
- static void markFree(Env var0, Obj var1) {
- if (var1 instanceof VarObj && var1.owner != null && var1.owner instanceof FunObj && var0.enclFun != null) {
- for(Obj var2 = var0.enclFun.obj; var2 != var1.owner && var2.name == null; var2 = var2.owner) {
- Hashtable var3 = ((FunObj)var2).freevars;
- if (var3 != null && var3.get(var1) == null) {
- var3.put(var1, var1);
- }
- }
- }
-
- }
-
- static AST unbox(AST var0, Typ var1) {
- int var2 = var0.pos;
- switch (var1.tag) {
- case 2:
- case 4:
- case 5:
- return new Typeop(var2, 62, unbox(var0, Typ.intTyp), toAST(var2, var1));
- case 3:
- default:
- throw new CompilerError("unbox");
- case 6:
- return new Apply(var2, new Select(var2, new Typeop(var2, 62, var0, toAST(var2, IntegerS)), intValueS), new ASTS());
- case 7:
- return new Apply(var2, new Select(var2, new Typeop(var2, 62, var0, toAST(var2, LongS)), longValueS), new ASTS());
- case 8:
- return new Apply(var2, new Select(var2, new Typeop(var2, 62, var0, toAST(var2, FloatS)), floatValueS), new ASTS());
- case 9:
- return new Apply(var2, new Select(var2, new Typeop(var2, 62, var0, toAST(var2, DoubleS)), doubleValueS), new ASTS());
- case 10:
- return new Apply(var2, new Select(var2, new Typeop(var2, 62, var0, toAST(var2, BooleanS)), booleanValueS), new ASTS());
- case 11:
- case 13:
- return new Typeop(var2, 62, var0, toAST(var2, var1));
- case 12:
- return var0;
- case 14:
- return new Typeop(var2, 62, var0, toAST(var2, ClosureS));
- }
- }
-
- static AST box(AST var0) {
- return new Apply(var0.pos, toAST(var0.pos, boxS), new ASTS(var0));
- }
-
- static Typ trueType(AST var0) {
- Typ var1 = alternateType(var0);
- return var1 == null ? var0.typ : var1;
- }
-
- static Typ alternateType(AST var0) {
- return var0.tag == 97 ? ((AnnotType)var0).alttyp : null;
- }
-
- static AST strip(AST var0) {
- return var0.tag == 97 ? ((AnnotType)var0).javatyp : var0;
- }
-
- static AST annot(AST var0, Typ var1) {
- return (AST)(isExtended(var1) ? new AnnotType(var0.pos, var0, var1) : var0);
- }
-
- static boolean isExtended(Typ var0) {
- switch (var0.tag) {
- case 14:
- return true;
- case 13:
- return isExtended(((ArrayTyp)var0).elemtyp);
- default:
- return false;
- }
- }
-
- static AST selectThis(int var0, Name var1) {
- return new Select(var0, new Self(var0, 80), var1);
- }
-
- static AST objectArray(int var0) {
- return new Subscript(var0, objectTyp(var0), (AST)null);
- }
-
- static AST objectTyp(int var0) {
- return toAST(var0, Predef.objectTyp);
- }
-
- static AST toAST(int var0, Typ var1) {
- switch (var1.tag) {
- case 0:
- case 16:
- case 17:
- throw new CompilerError("toAST");
- case 13:
- return new Subscript(var0, toAST(var0, ((ArrayTyp)var1).elemtyp), (AST)null);
- case 14:
- return toAST(var0, ClosureS);
- default:
- return toAST(var0, var1.obj.fullname);
- }
- }
-
- static AST toAST(int var0, Name var1) {
- int var2 = var1.lastPos((byte)46);
- return (AST)(var2 >= 0 ? new Select(var0, toAST(var0, var1.subName(0, var2)), var1.subName(var2 + 1, var1.len)) : new Ident(var0, var1));
- }
-
- public Simplify() {
- }
- }
-