home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class BasedItem extends Item {
- Obj field;
- Item base;
- int pos;
-
- void invoke() {
- FunTyp var1 = (FunTyp)this.field.typ;
- int var2 = Gen.width(var1.argtyps);
- int var3 = Gen.width(var1.restyp) - var2;
- if ((this.field.modifiers & 8) != 0) {
- Gen.emitop(184, var3);
- Gen.emit2(Gen.mkref(this.field));
- } else if ((this.field.owner.modifiers & 512) != 0) {
- Gen.emitop(185, var3 - 1);
- Gen.emit2(Gen.mkref(this.field));
- Gen.emit1(var2 + 1);
- Gen.emit1(0);
- } else if (this.base.mode != 4 && (this.field.modifiers & 18) == 0 && !this.field.name.equals(Predef.initS)) {
- Gen.emitop(182, var3 - 1);
- Gen.emit2(Gen.mkref(this.field));
- } else {
- Gen.emitop(183, var3 - 1);
- Gen.emit2(Gen.mkref(this.field));
- }
-
- }
-
- void stash(Typ var1, int var2) {
- if ((this.field.modifiers & 8) == 0) {
- Item.stackItem.stash(Typ.intTyp, var2);
- } else {
- super.stash(Typ.intTyp, var2);
- }
-
- }
-
- void drop(Typ var1) {
- if ((this.field.modifiers & 8) == 0) {
- Gen.emitop(87);
- }
-
- }
-
- void duplicate(Typ var1) {
- if ((this.field.modifiers & 8) == 0) {
- Gen.emitop(89);
- }
-
- }
-
- void store(Typ var1) {
- if (this.field.owner == Gen.code.owner && (this.field.modifiers & 8) != 0 == Gen.code.isStatic) {
- Gen.letInit(((VarObj)this.field).adr);
- }
-
- if ((this.field.modifiers & 8) == 0) {
- Gen.emitop(181, -Gen.width(var1) - 1);
- } else {
- Gen.emitop(179, -Gen.width(var1));
- }
-
- Gen.emit2(Gen.mkref(this.field));
- }
-
- void load(Typ var1) {
- if (this.field.owner == Gen.code.owner && (this.field.modifiers & 8) != 0 == Gen.code.isStatic) {
- Gen.checkInit(this.pos, ((VarObj)this.field).adr);
- }
-
- if ((this.field.modifiers & 8) == 0) {
- Gen.emitop(180, Gen.width(var1) - 1);
- } else {
- Gen.emitop(178, Gen.width(var1));
- }
-
- Gen.emit2(Gen.mkref(this.field));
- }
-
- BasedItem(int var1, Item var2, Obj var3) {
- super(var3 instanceof VarObj ? 7 : 8);
- this.pos = var1;
- this.base = var2;
- this.field = var3;
- if ((var3.modifiers & 8) == 0) {
- var2.load(var3.owner.typ);
- } else if (var2 != null) {
- var2.drop(var3.owner.typ);
- }
-
- }
- }
-