home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class WhileLoop extends JumpTarget {
- AST body;
- AST cond;
-
- void print(int var1) {
- System.out.print("while (");
- this.cond.print();
- System.out.print(") ");
- this.body.print();
- }
-
- Item gen() {
- Gen.statBegin(super.pos);
- int var1 = Gen.curPc();
- CondItem var2 = this.cond.gen().mkCond();
- super.exit = var2.jumpFalse();
- if (var2.trueJumps != null || var2.opcode != Gen.dontgoto) {
- Gen.resolve(var2.trueJumps);
- this.body.genDrop();
- Gen.resolve(super.cont);
- Gen.resolve(Gen.branch(167), var1);
- }
-
- Gen.resolve(super.exit);
- return Item.voidItem;
- }
-
- AST simplify() {
- this.cond = this.cond.simplify();
- this.body = this.body.simplify();
- return this;
- }
-
- void markCaptured(Bits var1) {
- var1.orSet(super.contCapt);
- this.cond.markCaptured(var1);
- super.exitCapt.orSet(var1);
- this.body.markCaptured(var1);
- super.contCapt.orSet(var1);
- var1.assign(super.exitCapt);
- }
-
- Typ attr(Env var1, int var2, Typ var3) {
- this.cond.attr(var1, 12, Typ.booleanTyp);
- Env var4 = new Env(var1, this);
- super.typ = this.body.attr(var4, 12, var3);
- return super.typ;
- }
-
- WhileLoop(int var1, AST var2, AST var3) {
- super(var1, 10);
- this.cond = var2;
- this.body = var3;
- super.contCapt = new Bits();
- super.exitCapt = new Bits();
- }
- }
-