home *** CD-ROM | disk | FTP | other *** search
/ Tutto per Internet / Internet.iso / soft95 / Java / espints / espinst.exe / classes / espresso / Item.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-02-28  |  2.3 KB  |  125 lines

  1. package espresso;
  2.  
  3. class Item implements Constants {
  4.    int mode;
  5.    static Item nonvirtualItem;
  6.    static Item indexedItem = new Item(2);
  7.    static Item superItem = new Item(4);
  8.    static Item thisItem = new Item(3);
  9.    static Item stackItem = new Item(1);
  10.    static Item voidItem = new Item(0);
  11.  
  12.    static {
  13.       nonvirtualItem = superItem;
  14.    }
  15.  
  16.    Item coerce(Typ var1, Typ var2) {
  17.       int var3 = Gen.longTypecode(var1);
  18.       int var4 = Gen.longTypecode(var2);
  19.       if (var3 == 4 && var4 == 4) {
  20.          if (var1.subtype(var2)) {
  21.             return this;
  22.          } else {
  23.             this.load(var1);
  24.             Gen.emitop2(192, Gen.mkref(var2));
  25.             return stackItem;
  26.          }
  27.       } else {
  28.          return this.coerce(var1, var3, var4);
  29.       }
  30.    }
  31.  
  32.    Item coerce(Typ var1, int var2, int var3) {
  33.       if (var2 == var3) {
  34.          return this;
  35.       } else {
  36.          this.load(var1);
  37.          int var4 = Gen.truncateCode(var2);
  38.          int var5 = Gen.truncateCode(var3);
  39.          if (var4 != var5) {
  40.             int var6 = var5 > var4 ? var5 - 1 : var5;
  41.             Gen.emitop(133 + var4 * 3 + var6);
  42.          }
  43.  
  44.          if (var3 != var5) {
  45.             Gen.emitop(145 + var3 - 5);
  46.          }
  47.  
  48.          return stackItem;
  49.       }
  50.    }
  51.  
  52.    CondItem mkCond() {
  53.       this.load(Typ.booleanTyp);
  54.       return new CondItem(154);
  55.    }
  56.  
  57.    void stash(Typ var1, int var2) {
  58.       switch (this.mode) {
  59.          case 1:
  60.             Gen.emitop((Gen.width(var1) == 2 ? 91 : 90) + 3 * (var2 - 1));
  61.             break;
  62.          case 2:
  63.             Gen.emitop(91 + 3 * (var2 - 1));
  64.             break;
  65.          default:
  66.             Gen.emitop(89 + 3 * (var2 - 1));
  67.       }
  68.  
  69.    }
  70.  
  71.    void drop(Typ var1) {
  72.       switch (this.mode) {
  73.          case 1:
  74.             Gen.emitop(Gen.width(var1) == 2 ? 88 : 87);
  75.             break;
  76.          case 2:
  77.             Gen.emitop(88);
  78.       }
  79.  
  80.    }
  81.  
  82.    void duplicate(Typ var1) {
  83.       switch (this.mode) {
  84.          case 1:
  85.             Gen.emitop(Gen.width(var1) == 2 ? 92 : 89);
  86.             break;
  87.          case 2:
  88.             Gen.emitop(92);
  89.       }
  90.  
  91.    }
  92.  
  93.    void store(Typ var1) {
  94.       switch (this.mode) {
  95.          case 2:
  96.             Gen.emitop(79 + Gen.longTypecode(var1));
  97.             return;
  98.          default:
  99.             throw new CompilerError("store");
  100.       }
  101.    }
  102.  
  103.    void load(Typ var1) {
  104.       switch (this.mode) {
  105.          case 0:
  106.          case 1:
  107.             break;
  108.          case 2:
  109.             Gen.emitop(46 + Gen.longTypecode(var1));
  110.             break;
  111.          case 3:
  112.          case 4:
  113.             Gen.emitop(42);
  114.             break;
  115.          default:
  116.             throw new CompilerError(String.valueOf("load ").concat(String.valueOf(this.mode)));
  117.       }
  118.  
  119.    }
  120.  
  121.    Item(int var1) {
  122.       this.mode = var1;
  123.    }
  124. }
  125.