home *** CD-ROM | disk | FTP | other *** search
Wrap
package espresso; import java.io.IOException; class Attr implements Constants { static final int SELFQUALIFIED = 2; static final int QUALIFIED = 1; static final int UNQUALIFIED = 0; static Obj loadClass(int var0, Env var1, int var2, Name var3) { ScopeEntry var4 = var1.importScope.lookup(var3); if (var4.scope != null) { if (var4.next().scope != null) { Report.error(var0, String.valueOf(String.valueOf(String.valueOf("ambiguous class reference: ").concat(String.valueOf(var4.obj))).concat(String.valueOf(", "))).concat(String.valueOf(var4.next().obj))); return Typ.errObj; } var3 = ((ClassObj)var4.obj).fullname; } Object var5 = null; if ((var2 & 2) != 0) { try { ClassObj var6 = ClassFile.load(var1.packageName, var3); var1.globalScope.enter(var6); return var6; } catch (LoadError var10) { var5 = var10; } } if ((var2 & 1) != 0) { try { return ClassFile.loadDir(var3); } catch (IOException var9) { var5 = var9; } } if ((var2 & -4) != 0) { Report.error(var0, String.valueOf(String.valueOf("identifier ").concat(String.valueOf(var3))).concat(String.valueOf(" not found"))); } else { Report.error(var0, String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf("error loading ").concat(String.valueOf(kindNames(var2)))).concat(String.valueOf(" "))).concat(String.valueOf(var3))).concat(String.valueOf("; "))).concat(String.valueOf(((Throwable)var5).getMessage()))); } return Typ.errObj; } static boolean fixupScope(int var0, ClassObj var1) { boolean var2 = true; if (var1.scope.next == null) { var1.scope.next = var1.scope; Scope var3 = null; if (var1.superclass != null) { var2 = fixupScope(var0, var1.superclass); if (var2) { var3 = var1.superclass.scope; } } if (var1.interfaces.length > 0) { var3 = new Scope(var3, var1); for(int var4 = 0; var4 < var1.interfaces.length; ++var4) { var2 = var2 && fixupScope(var0, var1.interfaces[var4]); if (var2) { var3.include(var1.interfaces[var4].scope); } } } var1.scope.baseOn(var3); } else if (var1.scope.next == var1.scope) { Report.error(var0, String.valueOf("cyclic inheritance involving ").concat(String.valueOf(var1))); var1.scope.next = Predef.objectClass.scope; var2 = false; } return var2; } static int completeMods(int var0, int var1, Env var2, int var3, int var4) { if (var2.isInterface()) { checkMods(var0, var1, var4); return var4 & -2 | var2.enclClass.mods & 1; } else { return checkMods(var0, var1, var3); } } static int checkMods(int var0, int var1, int var2) { if ((var1 & '\uffff' & ~var2) != 0) { Report.error(var0, String.valueOf(String.valueOf("modifier ").concat(String.valueOf(Obj.modName(Obj.firstMod(var1 & '\uffff' & ~var2))))).concat(String.valueOf(" not allowed here."))); } else if (checkDisjoint(var0, var1, 1536, 26) && checkDisjoint(var0, var1, 1, 6) && checkDisjoint(var0, var1, 128, 24)) { } return var1 & var2; } static boolean checkDisjoint(int var0, int var1, int var2, int var3) { if ((var1 & var2) != 0 && (var1 & var3) != 0) { Report.error(var0, String.valueOf(String.valueOf(String.valueOf("illegal combination of modifiers: ").concat(String.valueOf(Obj.modName(Obj.firstMod(var1 & var2))))).concat(String.valueOf(" and "))).concat(String.valueOf(Obj.modName(Obj.firstMod(var1 & var3))))); return false; } else { return true; } } static Obj checkKind(int var0, Obj var1, int var2) { if ((objKind(var1) & var2) == 0) { Report.error(var0, String.valueOf(String.valueOf(String.valueOf(kindName(var2)).concat(String.valueOf(" required, but "))).concat(String.valueOf(idName(objKind(var1))))).concat(String.valueOf(" found"))); return Typ.errObj; } else { return var1; } } static boolean checkKind(int var0, int var1, int var2) { if ((var1 & ~var2) != 0) { Report.error(var0, String.valueOf(String.valueOf(String.valueOf(kindName(var2)).concat(String.valueOf(" required, but "))).concat(String.valueOf(kindName(var1)))).concat(String.valueOf(" found"))); return false; } else { return true; } } static void checkHandled(int var0, Typ var1, TypSet var2) { if (var1.tag == 14) { Typ var3 = unHandled(((FunTyp)var1).thrown, var2); if (var3 != null) { Report.error(var0, String.valueOf(String.valueOf("unreported exception: ").concat(String.valueOf(var3))).concat(String.valueOf("; must be caught or declared to be thrown"))); } } } static Typ unHandled(TypSet var0, TypSet var1) { if (var0 == null) { return null; } else { return !var0.typ.subtype(Predef.errorTyp) && !var0.typ.subtype(Predef.runtimeExceptionTyp) && !TypSet.elem(var1, var0.typ) ? var0.typ : unHandled(var0.next, var1); } } static Typ checkObjectTyp(int var0, Typ var1) { if (var1.tag != 11 && var1.tag != 13 && var1.tag != 15 && var1.tag != 0) { Report.error(var0, String.valueOf(String.valueOf("object type required, but ").concat(String.valueOf(var1))).concat(String.valueOf(" found"))); return Typ.errTyp; } else { return var1; } } static Typ checkNonVoid(int var0, Typ var1) { if (var1.tag != 12) { return var1; } else { Report.error(var0, "'void' type not allowed here"); return Typ.errTyp; } } static Typ join(int var0, Typ var1, Typ var2) { if (var1.tag == 16) { return var2; } else if (var2.tag == 16) { return var1; } else if (var1.tag <= 9 && var2.tag <= 9) { int var3; for(var3 = var1.tag < var2.tag ? var2.tag : var1.tag; !var1.subtype(Typ.typOfTag[var3]) || !var2.subtype(Typ.typOfTag[var3]); ++var3) { } return Typ.typOfTag[var3]; } else { return var1.subtype(var2) ? var2 : join(var0, checkTyp(var0, var2, var1), var1); } } static Typ checkTyp(int var0, Typ var1, Typ var2) { if (var2.tag == 0) { return var2; } else if (var1.subtype(var2)) { return var1; } else { String var3 = "incompatible types"; String var4 = var1.toString(); String var5 = var2.toString(); if (var1.tag <= 9 && var2.tag <= 9) { var3 = "possible loss of precision"; } else if (var2.tag == 14) { if (var1.tag == 14) { FunTyp var6 = (FunTyp)var1; FunTyp var7 = (FunTyp)var2; if (Typ.subtypes(var7.argtyps, var6.argtyps)) { if (!var6.restyp.subtype(var7.restyp)) { var3 = "incompatible return type"; var4 = var6.restyp.toString(); var5 = var7.restyp.toString(); } else { var3 = "incompatible throws list"; var4 = Basic.toString(TypSet.elems(var6.thrown)); var5 = Basic.toString(TypSet.elems(var7.thrown)); } } } else { var5 = "function"; } } Report.error(var0, String.valueOf(String.valueOf(String.valueOf(String.valueOf(var3).concat(String.valueOf("; found: "))).concat(String.valueOf(var4))).concat(String.valueOf(", required: "))).concat(String.valueOf(var5))); return Typ.errTyp; } } static Obj checkNonAbstract(int var0, Obj var1) { if ((var1.modifiers & 1024) != 0) { Report.error(var0, String.valueOf(String.valueOf("abstract ").concat(String.valueOf(var1))).concat(String.valueOf(" cannot be accessed directly"))); return Typ.errObj; } else { return var1; } } static Obj checkStaticOrFinal(int var0, Obj var1) { if (var1.owner instanceof ClassObj && (var1.modifiers & 24) == 0) { Report.error(var0, String.valueOf(String.valueOf("cannot access ").concat(String.valueOf(var1))).concat(String.valueOf(" before superclass constructor is called"))); return Typ.errObj; } else { return var1; } } static Obj checkStatic(int var0, Obj var1) { if (var1.owner instanceof ClassObj && (var1.modifiers & 8) == 0) { Report.error(var0, String.valueOf(String.valueOf("non-static ").concat(String.valueOf(var1))).concat(String.valueOf(" cannot be referenced from a static context"))); return Typ.errObj; } else { return var1; } } static Obj resolveConstructor(int var0, Env var1, ClassObj var2, Typ var3, int var4) { Obj var5 = resolve(var0, var1, var2.scope, 16, var3, Predef.initS, var4); if (var5.typ.tag == 14 && var5.owner != var2) { Report.error(var0, String.valueOf(String.valueOf(String.valueOf("no constructor matching ").concat(String.valueOf(((FunTyp)var3).argsToString()))).concat(String.valueOf(" found in "))).concat(String.valueOf(var2))); } return var5; } static Obj resolve(int var0, Env var1, Scope var2, int var3, Typ var4, Name var5, int var6) { ScopeEntry var8; for(var8 = var2.lookup(var5); var8.scope != null && !matches(var8.obj, var3, var4); var8 = var8.next()) { } if (var8.scope == null && var6 == 0) { for(var8 = var1.globalScope.lookup(var5); var8.scope != null && !matches(var8.obj, var3, var4); var8 = var8.next()) { } } Obj var7; if (var8.scope == null) { if ((var3 & 3) != 0 && var6 == 0) { var7 = loadClass(var0, var1, var3, var5); } else { var7 = notFound(var0, var2, var3, var4, var5, var6); } } else { var7 = var8.obj; for(ScopeEntry var9 = var8.next(); var9.scope == var8.scope; var9 = var9.next()) { if (matches(var9.obj, var3, var4) && better(var9.obj, var7)) { var7 = var9.obj; } } Obj var10 = null; for(ScopeEntry var12 = var8; var12.scope == var8.scope && var10 == null; var12 = var12.next()) { if (var12.obj != var7 && matches(var12.obj, var3, var4) && !better(var7, var12.obj)) { var10 = var12.obj; } } if (var10 != null) { if (!isError(var4)) { Report.error(var0, String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf("reference to ").concat(String.valueOf(var5))).concat(String.valueOf(" is ambiguous, both "))).concat(String.valueOf(var7))).concat(String.valueOf(location(var7)))).concat(String.valueOf(" and "))).concat(String.valueOf(var10))).concat(String.valueOf(location(var10)))).concat(String.valueOf(" match"))); } var7 = Typ.errObj; } } if (Switches.extended && var3 == 16 && var7 instanceof VarObj) { if (var7.typ.tag != 14 || !Typ.subtypes(((FunTyp)var4).argtyps, ((FunTyp)var7.typ).argtyps)) { Report.error(var0, String.valueOf(String.valueOf(String.valueOf(String.valueOf(var7).concat(String.valueOf(" of type "))).concat(String.valueOf(var7.typ))).concat(String.valueOf(" cannot be applied to "))).concat(String.valueOf(((FunTyp)var4).argsToString()))); var7 = Typ.errObj; } } else if ((objKind(var7) & var3) == 0) { var7 = checkKind(var0, var7, var3); } else if (var3 == 4 && (var7.modifiers & 16) != 0) { Report.error(var0, String.valueOf(var7).concat(String.valueOf(" is declared final; cannot be assigned"))); } else if ((var7.modifiers & 4) != 0) { if (!var1.enclClass.obj.typ.subtype(var7.owner.typ) || var6 == 1 && var2.owner.typ.tag == 11 && !var2.owner.typ.subtype(var1.enclClass.obj.typ)) { if ((var7.modifiers & 2) != 0) { Report.error(var0, String.valueOf(String.valueOf(var7).concat(String.valueOf(" has private protected access"))).concat(String.valueOf(location(var7)))); } else if (var7.owner instanceof ClassObj && var1.packageName.index != ((ClassObj)var7.owner).packagename.index) { Report.error(var0, String.valueOf(String.valueOf(var7).concat(String.valueOf(" has protected access"))).concat(String.valueOf(location(var7)))); } } } else if ((var7.modifiers & 2) != 0 && var1.enclClass.obj != var7.owner) { Report.error(var0, String.valueOf(String.valueOf(var7).concat(String.valueOf(" has private access"))).concat(String.valueOf(location(var7)))); } else if ((var7.modifiers & 1) == 0) { Obj var11 = var7; if (!(var7 instanceof ClassObj)) { var11 = var7.owner; } if (var11 instanceof ClassObj && var11.typ.tag == 11 && var1.packageName.index != ((ClassObj)var11).packagename.index) { Report.error(var0, String.valueOf(String.valueOf(var7).concat(String.valueOf(" is not public; "))).concat(String.valueOf("cannot be accessed from outside package"))); } } return var7; } static int objKind(Obj var0) { if (var0 instanceof ClassObj) { return var0.typ.tag == 17 ? 1 : 2; } else if (var0 instanceof FunObj) { return 16; } else { return var0 instanceof VarObj ? 4 : 31; } } static ClassObj currentClass(Env var0) { return (ClassObj)var0.enclClass.obj; } static boolean isError(Typ var0) { if (var0 == null) { return false; } else { switch (var0.tag) { case 0: return true; case 13: return isError(((ArrayTyp)var0).elemtyp); case 14: FunTyp var1 = (FunTyp)var0; for(int var2 = 0; var2 < var1.argtyps.length; ++var2) { if (isError(var1.argtyps[var2])) { return true; } } return isError(var1.restyp); default: return false; } } } static boolean better(Obj var0, Obj var1) { boolean var2 = false; if (var0 instanceof FunObj && var1 instanceof FunObj) { Typ[] var3 = ((FunTyp)var0.typ).argtyps; Typ[] var4 = ((FunTyp)var1.typ).argtyps; if (var3.length == var4.length) { for(int var5 = 0; var5 < var3.length && var3[var5].subtype(var4[var5]); ++var5) { if (!var4[var5].subtype(var3[var5])) { var2 = true; } } } } return var2; } static boolean matches(Obj var0, int var1, Typ var2) { return var1 != 16 || !(var0 instanceof FunObj) || Typ.subtypes(((FunTyp)var2).argtyps, ((FunTyp)var0.typ).argtyps); } static boolean canCast(Typ var0, Typ var1) { if (var1.tag == 0) { return true; } else { switch (var0.tag) { case 0: return true; case 1: case 3: case 12: default: return false; case 2: case 4: case 5: case 6: case 7: case 8: case 9: return var1.tag <= 9; case 10: return var1.tag == 10; case 11: case 13: case 14: case 15: return (var1.tag == 11 || var1.tag == 13 || var1.tag == 14) && (var0.subtype(var1) || var1.subtype(var0) || (var0.obj.modifiers & 512) != 0 && (var1.obj.modifiers & 16) == 0 || (var1.obj.modifiers & 512) != 0 && (var0.obj.modifiers & 16) == 0); } } } static void printscopes(Scope var0) { while(var0 != null) { if (var0.owner != null) { System.out.print(String.valueOf(var0.owner).concat(String.valueOf(": "))); } for(ScopeEntry var1 = var0.elements(); var1 != null; var1 = var1.sibling) { System.out.print(String.valueOf(var1.obj).concat(String.valueOf(", "))); } System.out.println(); var0 = var0.next; } } static String location(Obj var0) { return var0.owner != null ? String.valueOf(" in ").concat(String.valueOf(var0.owner)) : ""; } static String location(Scope var0) { return var0 != null && var0.owner != null ? String.valueOf(" in ").concat(String.valueOf(var0.owner)) : ""; } static Obj notFound(int var0, Scope var1, int var2, Typ var3, Name var4, int var5) { String var6 = String.valueOf(var4.equals(Predef.initS) ? "constructor " : String.valueOf(idName(var2)).concat(String.valueOf(" "))).concat(String.valueOf(var2 == 16 ? String.valueOf(String.valueOf(String.valueOf(var4.equals(Predef.initS) && var1 != null && var1.owner != null ? var1.owner.name : var4).concat(String.valueOf("("))).concat(String.valueOf(Basic.toString(((FunTyp)var3).argtyps)))).concat(String.valueOf(")")) : var4.toString())); Report.error(var0, String.valueOf(String.valueOf(var6).concat(String.valueOf(" not found"))).concat(String.valueOf(var5 != 0 ? location(var1) : ""))); return Typ.errObj; } static String fullName(Scope var0, Name var1, int var2, Typ var3) { return var2 != 16 ? var1.toString() : String.valueOf(String.valueOf(String.valueOf(String.valueOf(String.valueOf(idName(var2)).concat(String.valueOf(" "))).concat(String.valueOf(var1.equals(Predef.initS) && var0 != null && var0.owner != null ? var0.owner.name : var1))).concat(String.valueOf("("))).concat(String.valueOf(Basic.toString(((FunTyp)var3).argtyps)))).concat(String.valueOf(")")); } static String kindNames(int var0) { String[] var1 = new String[4]; int var2 = 0; if ((var0 & 4) != 0) { var1[var2++] = "variable"; } if ((var0 & 16) != 0) { var1[var2++] = "function"; } if ((var0 & 2) != 0) { var1[var2++] = "class"; } if ((var0 & 1) != 0) { var1[var2++] = "package"; } String var3 = ""; for(int var4 = 0; var4 < var2 - 2; ++var4) { var3 = String.valueOf(String.valueOf(var3).concat(String.valueOf(var1[var2]))).concat(String.valueOf(", ")); } if (var2 >= 2) { var3 = String.valueOf(String.valueOf(var3).concat(String.valueOf(var1[var2 - 2]))).concat(String.valueOf(" or ")); } if (var2 >= 1) { var3 = String.valueOf(var3).concat(String.valueOf(var1[var2 - 1])); } else { var3 = "identifier"; } return var3; } static String idName(int var0) { return kindName(var0 == 12 ? 4 : var0); } static String kindName(int var0) { switch (var0) { case 1: return "package"; case 2: return "class"; case 4: return "variable"; case 12: return "value"; case 16: return "function"; case 32: return "constructor"; default: return "identifier"; } } public Attr() { } }