home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class Typ implements Constants {
- static Obj errObj;
- static Typ anyTyp = newTyp(16, "<anything>");
- static Typ errTyp = newTyp(0, "<any>");
- static Typ nullTyp = newTyp(15, "null");
- static Typ funTyp = newTyp(14, "()");
- static Typ arrayTyp = newTyp(13, "Array");
- static Typ voidTyp = newTyp(12, "void");
- static Typ booleanTyp = newTyp(10, "boolean");
- static Typ doubleTyp = newTyp(9, "double");
- static Typ floatTyp = newTyp(8, "float");
- static Typ longTyp = newTyp(7, "long");
- static Typ intTyp = newTyp(6, "int");
- static Typ charTyp = newTyp(4, "char");
- static Typ shortTyp = newTyp(5, "short");
- static Typ byteTyp = newTyp(2, "byte");
- static Typ[] typOfTag = new Typ[18];
- ClassObj obj;
- int tag;
-
- static {
- errObj = new Obj(9, Name.fromString("<error>"), errTyp);
- }
-
- private static Typ newTyp(int var0, String var1) {
- Typ var2 = new Typ(var0, Name.fromString(var1));
- typOfTag[var0] = var2;
- return var2;
- }
-
- static boolean sametypes(Typ[] var0, Typ[] var1) {
- if (var0.length != var1.length) {
- return false;
- } else {
- for(int var2 = 0; var2 < var0.length; ++var2) {
- if (!var0[var2].sametype(var1[var2])) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- boolean sametype(Typ var1) {
- return this == var1;
- }
-
- static boolean subtypes(Typ[] var0, Typ[] var1) {
- if (var0.length != var1.length) {
- return false;
- } else {
- for(int var2 = 0; var2 < var0.length; ++var2) {
- if (!var0[var2].subtype(var1[var2])) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- boolean subtype(Typ var1) {
- if (var1.tag != 0 && var1.tag != 16) {
- switch (this.tag) {
- case 0:
- return true;
- case 1:
- case 3:
- case 14:
- default:
- throw new CompilerError(String.valueOf(String.valueOf("subtype ").concat(String.valueOf(this.obj.name))).concat(String.valueOf(this.tag)));
- case 2:
- return var1.tag == 2 || 5 <= var1.tag && var1.tag <= 9;
- case 4:
- return var1.tag == 4 || 6 <= var1.tag && var1.tag <= 9;
- case 5:
- case 6:
- case 7:
- case 8:
- case 9:
- return this.tag <= var1.tag && var1.tag <= 9;
- case 10:
- return var1.tag == 10;
- case 11:
- case 13:
- return var1.tag == 11 && this.obj.subclass(var1.obj);
- case 12:
- return var1.tag == 12;
- case 15:
- return var1.tag == 11 || var1.tag == 13 || var1.tag == 15 || var1.tag == 14;
- case 16:
- return false;
- }
- } else {
- return true;
- }
- }
-
- public String toString() {
- return this.obj.name.toString();
- }
-
- Typ(int var1, ClassObj var2) {
- this.tag = var1;
- this.obj = var2;
- }
-
- Typ(int var1, Name var2) {
- this.tag = var1;
- this.obj = new ClassObj(1, var2, this);
- }
- }
-