home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class Aggregate extends AST {
- AST[] elems;
-
- void print(int var1) {
- System.out.print("{");
- AST.printSeq(this.elems);
- System.out.print("}");
- }
-
- Item gen() {
- Typ var1 = ((ArrayTyp)super.typ).elemtyp;
- ImmediateItem.loadIntConst(this.elems.length);
- (new NewArrayItem(1)).load(super.typ);
-
- for(int var2 = 0; var2 < this.elems.length; ++var2) {
- Gen.emitop(89);
- ImmediateItem.loadIntConst(var2);
- this.elems[var2].gen().coerce(this.elems[var2].typ, var1).load(var1);
- Item.indexedItem.store(var1);
- }
-
- return Item.stackItem;
- }
-
- AST simplify() {
- for(int var1 = 0; var1 < this.elems.length; ++var1) {
- this.elems[var1] = this.elems[var1].simplify();
- }
-
- return this;
- }
-
- void markCaptured(Bits var1) {
- for(int var2 = 0; var2 < this.elems.length; ++var2) {
- this.elems[var2].markCaptured(var1);
- }
-
- }
-
- Typ attr(Env var1, int var2, Typ var3) {
- if (Attr.checkKind(super.pos, 12, var2)) {
- Typ var4;
- if (var3.tag == 13) {
- var4 = ((ArrayTyp)var3).elemtyp;
- } else if (var3.tag == 0) {
- var4 = Typ.errTyp;
- } else {
- var4 = Typ.anyTyp;
- }
-
- Typ var5 = var4;
-
- for(int var6 = 0; var6 < this.elems.length; ++var6) {
- var5 = Attr.join(this.elems[var6].pos, var5, this.elems[var6].attr(var1, 12, var4));
- }
-
- super.typ = Attr.checkTyp(super.pos, new ArrayTyp(var5), var3);
- } else {
- super.typ = Typ.errTyp;
- }
-
- if (this.elems.length == 0 && super.typ.tag == 13 && ((ArrayTyp)super.typ).elemtyp.tag == 16) {
- super.typ = new ArrayTyp(Predef.objectTyp);
- }
-
- return super.typ;
- }
-
- boolean isExpr() {
- return true;
- }
-
- Aggregate(int var1, ASTS var2) {
- super(var1, 9);
- this.elems = var2.shrink();
- }
- }
-