home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class Apply extends AST {
- Obj constructor;
- AST[] args;
- // $FF: renamed from: fn espresso.AST
- AST field_0;
-
- void print(int var1) {
- this.field_0.print(11);
- System.out.print("(");
- AST.printSeq(this.args);
- System.out.print(")");
- }
-
- Item gen() {
- FunTyp var1;
- BasedItem var2;
- if (this.constructor != null) {
- var1 = (FunTyp)this.constructor.typ;
- Gen.emitop2(187, Gen.mkref(super.typ));
- Gen.emitop(89);
- var2 = new BasedItem(super.pos, Item.stackItem, this.constructor);
- } else {
- var1 = (FunTyp)this.field_0.typ;
- var2 = (BasedItem)this.field_0.gen();
- }
-
- this.loadArgs(var1);
- var2.invoke();
- return var1.restyp.tag == 12 ? Item.voidItem : Item.stackItem;
- }
-
- private void loadArgs(FunTyp var1) {
- for(int var2 = 0; var2 < this.args.length; ++var2) {
- this.args[var2].gen().coerce(this.args[var2].typ, var1.argtyps[var2]).load(var1.argtyps[var2]);
- }
-
- }
-
- AST simplify() {
- boolean var1 = this.field_0 instanceof Self || this.field_0 instanceof IdRef && !(((IdRef)this.field_0).obj instanceof VarObj);
- this.field_0 = this.field_0.simplify();
-
- for(int var2 = 0; var2 < this.args.length; ++var2) {
- this.args[var2] = this.args[var2].simplify();
- }
-
- if (var1) {
- return this;
- } else {
- ASTS var3 = new ASTS();
-
- for(int var4 = 0; var4 < this.args.length; ++var4) {
- var3.append(Simplify.box(this.args[var4]));
- }
-
- return Simplify.unbox(new Apply(super.pos, new Select(super.pos, this.field_0, Simplify.applyS), new ASTS(new Aggregate(super.pos, var3))), super.typ);
- }
- }
-
- void markCaptured(Bits var1) {
- this.field_0.markCaptured(var1);
-
- for(int var2 = 0; var2 < this.args.length; ++var2) {
- this.args[var2].markCaptured(var1);
- }
-
- }
-
- Typ attr(Env var1, int var2, Typ var3) {
- this.constructor = null;
- Typ[] var4 = new Typ[this.args.length];
- Env var5 = var1;
- if (var2 == 32) {
- var5 = new Env(var1, this);
- var5.isSelfCall = true;
- }
-
- for(int var6 = 0; var6 < this.args.length; ++var6) {
- var4[var6] = this.args[var6].attr(var5, 12, Typ.anyTyp);
- }
-
- if (var2 == 32) {
- super.typ = this.field_0.attr(var1, 32, new FunTyp(var4, Typ.anyTyp, Predef.anyTypSet));
- } else if (var2 == 2) {
- super.typ = this.field_0.attr(var1, 2, Typ.anyTyp);
- if (super.typ.tag == 11) {
- ClassObj var7 = super.typ.obj;
- if ((var7.modifiers & 1536) != 0) {
- Report.error(super.pos, String.valueOf(var7).concat(String.valueOf(" is abstract; cannot be instantiated")));
- } else {
- this.constructor = Attr.resolveConstructor(this.field_0.pos, var1, var7, new FunTyp(var4, Typ.anyTyp, Predef.anyTypSet), 1);
- Attr.checkHandled(super.pos, this.constructor.typ, var1.reported);
- }
- } else if (super.typ.tag != 0) {
- Report.error(super.pos, String.valueOf(String.valueOf("class required, but ").concat(String.valueOf(super.typ))).concat(String.valueOf(" found")));
- }
- } else if (Attr.checkKind(super.pos, 12, var2)) {
- super.typ = this.field_0.attr(var1, 16, new FunTyp(var4, Typ.anyTyp, Predef.anyTypSet));
- Attr.checkHandled(super.pos, super.typ, var1.reported);
- if (super.typ.tag == 14) {
- super.typ = Attr.checkTyp(super.pos, ((FunTyp)super.typ).restyp, var3);
- }
- } else {
- super.typ = Typ.errTyp;
- }
-
- return super.typ;
- }
-
- boolean isExpr() {
- return true;
- }
-
- Apply(int var1, AST var2, ASTS var3) {
- super(var1, 5);
- this.field_0 = var2;
- this.args = var3.shrink();
- }
- }
-