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

  1. package espresso;
  2.  
  3. class Aggregate extends AST {
  4.    AST[] elems;
  5.  
  6.    void print(int var1) {
  7.       System.out.print("{");
  8.       AST.printSeq(this.elems);
  9.       System.out.print("}");
  10.    }
  11.  
  12.    Item gen() {
  13.       Typ var1 = ((ArrayTyp)super.typ).elemtyp;
  14.       ImmediateItem.loadIntConst(this.elems.length);
  15.       (new NewArrayItem(1)).load(super.typ);
  16.  
  17.       for(int var2 = 0; var2 < this.elems.length; ++var2) {
  18.          Gen.emitop(89);
  19.          ImmediateItem.loadIntConst(var2);
  20.          this.elems[var2].gen().coerce(this.elems[var2].typ, var1).load(var1);
  21.          Item.indexedItem.store(var1);
  22.       }
  23.  
  24.       return Item.stackItem;
  25.    }
  26.  
  27.    AST simplify() {
  28.       for(int var1 = 0; var1 < this.elems.length; ++var1) {
  29.          this.elems[var1] = this.elems[var1].simplify();
  30.       }
  31.  
  32.       return this;
  33.    }
  34.  
  35.    void markCaptured(Bits var1) {
  36.       for(int var2 = 0; var2 < this.elems.length; ++var2) {
  37.          this.elems[var2].markCaptured(var1);
  38.       }
  39.  
  40.    }
  41.  
  42.    Typ attr(Env var1, int var2, Typ var3) {
  43.       if (Attr.checkKind(super.pos, 12, var2)) {
  44.          Typ var4;
  45.          if (var3.tag == 13) {
  46.             var4 = ((ArrayTyp)var3).elemtyp;
  47.          } else if (var3.tag == 0) {
  48.             var4 = Typ.errTyp;
  49.          } else {
  50.             var4 = Typ.anyTyp;
  51.          }
  52.  
  53.          Typ var5 = var4;
  54.  
  55.          for(int var6 = 0; var6 < this.elems.length; ++var6) {
  56.             var5 = Attr.join(this.elems[var6].pos, var5, this.elems[var6].attr(var1, 12, var4));
  57.          }
  58.  
  59.          super.typ = Attr.checkTyp(super.pos, new ArrayTyp(var5), var3);
  60.       } else {
  61.          super.typ = Typ.errTyp;
  62.       }
  63.  
  64.       if (this.elems.length == 0 && super.typ.tag == 13 && ((ArrayTyp)super.typ).elemtyp.tag == 16) {
  65.          super.typ = new ArrayTyp(Predef.objectTyp);
  66.       }
  67.  
  68.       return super.typ;
  69.    }
  70.  
  71.    boolean isExpr() {
  72.       return true;
  73.    }
  74.  
  75.    Aggregate(int var1, ASTS var2) {
  76.       super(var1, 9);
  77.       this.elems = var2.shrink();
  78.    }
  79. }
  80.