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

  1. package espresso;
  2.  
  3. class Apply extends AST {
  4.    Obj constructor;
  5.    AST[] args;
  6.    // $FF: renamed from: fn espresso.AST
  7.    AST field_0;
  8.  
  9.    void print(int var1) {
  10.       this.field_0.print(11);
  11.       System.out.print("(");
  12.       AST.printSeq(this.args);
  13.       System.out.print(")");
  14.    }
  15.  
  16.    Item gen() {
  17.       FunTyp var1;
  18.       BasedItem var2;
  19.       if (this.constructor != null) {
  20.          var1 = (FunTyp)this.constructor.typ;
  21.          Gen.emitop2(187, Gen.mkref(super.typ));
  22.          Gen.emitop(89);
  23.          var2 = new BasedItem(super.pos, Item.stackItem, this.constructor);
  24.       } else {
  25.          var1 = (FunTyp)this.field_0.typ;
  26.          var2 = (BasedItem)this.field_0.gen();
  27.       }
  28.  
  29.       this.loadArgs(var1);
  30.       var2.invoke();
  31.       return var1.restyp.tag == 12 ? Item.voidItem : Item.stackItem;
  32.    }
  33.  
  34.    private void loadArgs(FunTyp var1) {
  35.       for(int var2 = 0; var2 < this.args.length; ++var2) {
  36.          this.args[var2].gen().coerce(this.args[var2].typ, var1.argtyps[var2]).load(var1.argtyps[var2]);
  37.       }
  38.  
  39.    }
  40.  
  41.    AST simplify() {
  42.       boolean var1 = this.field_0 instanceof Self || this.field_0 instanceof IdRef && !(((IdRef)this.field_0).obj instanceof VarObj);
  43.       this.field_0 = this.field_0.simplify();
  44.  
  45.       for(int var2 = 0; var2 < this.args.length; ++var2) {
  46.          this.args[var2] = this.args[var2].simplify();
  47.       }
  48.  
  49.       if (var1) {
  50.          return this;
  51.       } else {
  52.          ASTS var3 = new ASTS();
  53.  
  54.          for(int var4 = 0; var4 < this.args.length; ++var4) {
  55.             var3.append(Simplify.box(this.args[var4]));
  56.          }
  57.  
  58.          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);
  59.       }
  60.    }
  61.  
  62.    void markCaptured(Bits var1) {
  63.       this.field_0.markCaptured(var1);
  64.  
  65.       for(int var2 = 0; var2 < this.args.length; ++var2) {
  66.          this.args[var2].markCaptured(var1);
  67.       }
  68.  
  69.    }
  70.  
  71.    Typ attr(Env var1, int var2, Typ var3) {
  72.       this.constructor = null;
  73.       Typ[] var4 = new Typ[this.args.length];
  74.       Env var5 = var1;
  75.       if (var2 == 32) {
  76.          var5 = new Env(var1, this);
  77.          var5.isSelfCall = true;
  78.       }
  79.  
  80.       for(int var6 = 0; var6 < this.args.length; ++var6) {
  81.          var4[var6] = this.args[var6].attr(var5, 12, Typ.anyTyp);
  82.       }
  83.  
  84.       if (var2 == 32) {
  85.          super.typ = this.field_0.attr(var1, 32, new FunTyp(var4, Typ.anyTyp, Predef.anyTypSet));
  86.       } else if (var2 == 2) {
  87.          super.typ = this.field_0.attr(var1, 2, Typ.anyTyp);
  88.          if (super.typ.tag == 11) {
  89.             ClassObj var7 = super.typ.obj;
  90.             if ((var7.modifiers & 1536) != 0) {
  91.                Report.error(super.pos, String.valueOf(var7).concat(String.valueOf(" is abstract; cannot be instantiated")));
  92.             } else {
  93.                this.constructor = Attr.resolveConstructor(this.field_0.pos, var1, var7, new FunTyp(var4, Typ.anyTyp, Predef.anyTypSet), 1);
  94.                Attr.checkHandled(super.pos, this.constructor.typ, var1.reported);
  95.             }
  96.          } else if (super.typ.tag != 0) {
  97.             Report.error(super.pos, String.valueOf(String.valueOf("class required, but ").concat(String.valueOf(super.typ))).concat(String.valueOf(" found")));
  98.          }
  99.       } else if (Attr.checkKind(super.pos, 12, var2)) {
  100.          super.typ = this.field_0.attr(var1, 16, new FunTyp(var4, Typ.anyTyp, Predef.anyTypSet));
  101.          Attr.checkHandled(super.pos, super.typ, var1.reported);
  102.          if (super.typ.tag == 14) {
  103.             super.typ = Attr.checkTyp(super.pos, ((FunTyp)super.typ).restyp, var3);
  104.          }
  105.       } else {
  106.          super.typ = Typ.errTyp;
  107.       }
  108.  
  109.       return super.typ;
  110.    }
  111.  
  112.    boolean isExpr() {
  113.       return true;
  114.    }
  115.  
  116.    Apply(int var1, AST var2, ASTS var3) {
  117.       super(var1, 5);
  118.       this.field_0 = var2;
  119.       this.args = var3.shrink();
  120.    }
  121. }
  122.