home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / tree / WhileStatement.class (.txt) < prev   
Encoding:
Java Class File  |  1997-07-08  |  3.6 KB  |  82 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.Label;
  7. import sun.tools.java.Environment;
  8. import sun.tools.java.Type;
  9.  
  10. public class WhileStatement extends Statement {
  11.    Expression cond;
  12.    Statement body;
  13.  
  14.    public WhileStatement(int var1, Expression var2, Statement var3) {
  15.       super(93, var1);
  16.       this.cond = var2;
  17.       this.body = var3;
  18.    }
  19.  
  20.    Vset check(Environment var1, Context var2, Vset var3, Hashtable var4) {
  21.       CheckContext var5 = new CheckContext(var2, this);
  22.       Vset var6 = var3.copy();
  23.       ConditionVars var7 = this.cond.checkCondition(var1, var5, ((Statement)this).reach(var1, var3), var4);
  24.       this.cond = ((Node)this).convert(var1, var5, Type.tBoolean, this.cond);
  25.       var3 = this.body.check(var1, var5, var7.vsTrue, var4);
  26.       var3 = var3.join(var5.vsContinue);
  27.       var2.checkBackBranch(var1, this, var6, var3);
  28.       var3 = var5.vsBreak.join(var7.vsFalse);
  29.       return var2.removeAdditionalVars(var3);
  30.    }
  31.  
  32.    public Statement inline(Environment var1, Context var2) {
  33.       var2 = new Context(var2, this);
  34.       this.cond = this.cond.inlineValue(var1, var2);
  35.       if (this.body != null) {
  36.          this.body = this.body.inline(var1, var2);
  37.       }
  38.  
  39.       return this;
  40.    }
  41.  
  42.    public int costInline(int var1, Environment var2, Context var3) {
  43.       return 1 + this.cond.costInline(var1, var2, var3) + (this.body != null ? this.body.costInline(var1, var2, var3) : 0);
  44.    }
  45.  
  46.    public Statement copyInline(Context var1, boolean var2) {
  47.       WhileStatement var3 = (WhileStatement)((Node)this).clone();
  48.       var3.cond = this.cond.copyInline(var1);
  49.       if (this.body != null) {
  50.          var3.body = this.body.copyInline(var1, var2);
  51.       }
  52.  
  53.       return var3;
  54.    }
  55.  
  56.    public void code(Environment var1, Context var2, Assembler var3) {
  57.       CodeContext var4 = new CodeContext(var2, this);
  58.       var3.add(super.where, 167, var4.contLabel);
  59.       Label var5 = new Label();
  60.       var3.add(var5);
  61.       if (this.body != null) {
  62.          this.body.code(var1, var4, var3);
  63.       }
  64.  
  65.       var3.add(var4.contLabel);
  66.       this.cond.codeBranch(var1, var4, var3, var5, true);
  67.       var3.add(var4.breakLabel);
  68.    }
  69.  
  70.    public void print(PrintStream var1, int var2) {
  71.       super.print(var1, var2);
  72.       var1.print("while ");
  73.       this.cond.print(var1);
  74.       if (this.body != null) {
  75.          var1.print(" ");
  76.          this.body.print(var1, var2);
  77.       } else {
  78.          var1.print(";");
  79.       }
  80.    }
  81. }
  82.