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

  1. package espresso;
  2.  
  3. class ImmediateItem extends Item {
  4.    Object value;
  5.  
  6.    static void loadIntConst(int var0) {
  7.       (new ImmediateItem(new Integer(var0))).load(Typ.intTyp);
  8.    }
  9.  
  10.    Item coerce(Typ var1, int var2, int var3) {
  11.       if (var2 == var3) {
  12.          return this;
  13.       } else {
  14.          Object var4 = (Number)this.value;
  15.          switch (var3) {
  16.             case 0:
  17.                var4 = new Integer(((Number)var4).intValue());
  18.                break;
  19.             case 1:
  20.                var4 = new Long(((Number)var4).longValue());
  21.                break;
  22.             case 2:
  23.                var4 = new Float(((Number)var4).floatValue());
  24.                break;
  25.             case 3:
  26.                var4 = new Double(((Number)var4).doubleValue());
  27.                break;
  28.             case 4:
  29.                throw new CompilerError("coerce");
  30.             case 5:
  31.                var4 = new Integer((byte)((Number)var4).intValue());
  32.                break;
  33.             case 6:
  34.                var4 = new Integer((char)((Number)var4).intValue());
  35.                break;
  36.             case 7:
  37.                var4 = new Integer((short)((Number)var4).intValue());
  38.          }
  39.  
  40.          return new ImmediateItem(var4);
  41.       }
  42.    }
  43.  
  44.    CondItem mkCond() {
  45.       int var1 = (Integer)this.value;
  46.       return new CondItem(var1 != 0 ? 167 : Gen.dontgoto);
  47.    }
  48.  
  49.    void load(Typ var1) {
  50.       switch (var1.tag) {
  51.          case 2:
  52.          case 4:
  53.          case 5:
  54.          case 6:
  55.          case 10:
  56.             int var2 = ((Number)this.value).intValue();
  57.             if (-1 <= var2 && var2 <= 5) {
  58.                Gen.emitop(3 + var2);
  59.             } else if (-128 <= var2 && var2 <= 127) {
  60.                Gen.emitop1(16, var2 & 255);
  61.             } else if (-32768 <= var2 && var2 <= 32767) {
  62.                Gen.emitop2(17, var2 & '\uffff');
  63.             } else {
  64.                this.ldc(Gen.putConstant(this.value));
  65.             }
  66.             break;
  67.          case 3:
  68.          case 12:
  69.          case 14:
  70.          default:
  71.             throw new CompilerError("load");
  72.          case 7:
  73.             long var3 = ((Number)this.value).longValue();
  74.             if (var3 != (long)0 && var3 != (long)1) {
  75.                Gen.emitop2(20, Gen.putConstant(this.value));
  76.             } else {
  77.                Gen.emitop(9 + (int)var3);
  78.             }
  79.             break;
  80.          case 8:
  81.             float var5 = ((Number)this.value).floatValue();
  82.             if ((double)var5 != (double)0.0F && (double)var5 != (double)1.0F && (double)var5 != (double)2.0F) {
  83.                this.ldc(Gen.putConstant(this.value));
  84.             } else {
  85.                Gen.emitop(11 + (int)var5);
  86.             }
  87.             break;
  88.          case 9:
  89.             double var6 = ((Number)this.value).doubleValue();
  90.             if (var6 != (double)0.0F && var6 != (double)1.0F) {
  91.                Gen.emitop2(20, Gen.putConstant(this.value));
  92.             } else {
  93.                Gen.emitop(14 + (int)var6);
  94.             }
  95.             break;
  96.          case 11:
  97.          case 13:
  98.          case 15:
  99.             if (this.value == Basic.nullValue) {
  100.                Gen.emitop(1);
  101.             } else {
  102.                this.ldc(Gen.putConstant(Gen.stringName((Name)this.value)));
  103.             }
  104.       }
  105.  
  106.    }
  107.  
  108.    private void ldc(int var1) {
  109.       if (var1 <= 255) {
  110.          Gen.emitop1(18, var1);
  111.       } else {
  112.          Gen.emitop2(19, var1);
  113.       }
  114.  
  115.    }
  116.  
  117.    ImmediateItem(Object var1) {
  118.       super(9);
  119.       this.value = var1;
  120.    }
  121. }
  122.