home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class ImmediateItem extends Item {
- Object value;
-
- static void loadIntConst(int var0) {
- (new ImmediateItem(new Integer(var0))).load(Typ.intTyp);
- }
-
- Item coerce(Typ var1, int var2, int var3) {
- if (var2 == var3) {
- return this;
- } else {
- Object var4 = (Number)this.value;
- switch (var3) {
- case 0:
- var4 = new Integer(((Number)var4).intValue());
- break;
- case 1:
- var4 = new Long(((Number)var4).longValue());
- break;
- case 2:
- var4 = new Float(((Number)var4).floatValue());
- break;
- case 3:
- var4 = new Double(((Number)var4).doubleValue());
- break;
- case 4:
- throw new CompilerError("coerce");
- case 5:
- var4 = new Integer((byte)((Number)var4).intValue());
- break;
- case 6:
- var4 = new Integer((char)((Number)var4).intValue());
- break;
- case 7:
- var4 = new Integer((short)((Number)var4).intValue());
- }
-
- return new ImmediateItem(var4);
- }
- }
-
- CondItem mkCond() {
- int var1 = (Integer)this.value;
- return new CondItem(var1 != 0 ? 167 : Gen.dontgoto);
- }
-
- void load(Typ var1) {
- switch (var1.tag) {
- case 2:
- case 4:
- case 5:
- case 6:
- case 10:
- int var2 = ((Number)this.value).intValue();
- if (-1 <= var2 && var2 <= 5) {
- Gen.emitop(3 + var2);
- } else if (-128 <= var2 && var2 <= 127) {
- Gen.emitop1(16, var2 & 255);
- } else if (-32768 <= var2 && var2 <= 32767) {
- Gen.emitop2(17, var2 & '\uffff');
- } else {
- this.ldc(Gen.putConstant(this.value));
- }
- break;
- case 3:
- case 12:
- case 14:
- default:
- throw new CompilerError("load");
- case 7:
- long var3 = ((Number)this.value).longValue();
- if (var3 != (long)0 && var3 != (long)1) {
- Gen.emitop2(20, Gen.putConstant(this.value));
- } else {
- Gen.emitop(9 + (int)var3);
- }
- break;
- case 8:
- float var5 = ((Number)this.value).floatValue();
- if ((double)var5 != (double)0.0F && (double)var5 != (double)1.0F && (double)var5 != (double)2.0F) {
- this.ldc(Gen.putConstant(this.value));
- } else {
- Gen.emitop(11 + (int)var5);
- }
- break;
- case 9:
- double var6 = ((Number)this.value).doubleValue();
- if (var6 != (double)0.0F && var6 != (double)1.0F) {
- Gen.emitop2(20, Gen.putConstant(this.value));
- } else {
- Gen.emitop(14 + (int)var6);
- }
- break;
- case 11:
- case 13:
- case 15:
- if (this.value == Basic.nullValue) {
- Gen.emitop(1);
- } else {
- this.ldc(Gen.putConstant(Gen.stringName((Name)this.value)));
- }
- }
-
- }
-
- private void ldc(int var1) {
- if (var1 <= 255) {
- Gen.emitop1(18, var1);
- } else {
- Gen.emitop2(19, var1);
- }
-
- }
-
- ImmediateItem(Object var1) {
- super(9);
- this.value = var1;
- }
- }
-