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 / ForStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.5 KB  |  175 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 ForStatement extends Statement {
  11.    Statement init;
  12.    Expression cond;
  13.    Expression inc;
  14.    Statement body;
  15.  
  16.    public ForStatement(int var1, Statement var2, Expression var3, Expression var4, Statement var5) {
  17.       super(92, var1);
  18.       this.init = var2;
  19.       this.cond = var3;
  20.       this.inc = var4;
  21.       this.body = var5;
  22.    }
  23.  
  24.    Vset check(Environment var1, Context var2, Vset var3, Hashtable var4) {
  25.       var3 = ((Statement)this).reach(var1, var3);
  26.       CheckContext var5 = new CheckContext(var2, this);
  27.       if (this.init != null) {
  28.          var3 = this.init.checkBlockStatement(var1, var5, var3, var4);
  29.       }
  30.  
  31.       Vset var6 = var3.copy();
  32.       ConditionVars var7;
  33.       if (this.cond != null) {
  34.          var7 = this.cond.checkCondition(var1, var5, var3, var4);
  35.          this.cond = ((Node)this).convert(var1, var5, Type.tBoolean, this.cond);
  36.       } else {
  37.          var7 = new ConditionVars();
  38.          var7.vsFalse = Vset.DEAD_END;
  39.          var7.vsTrue = var3;
  40.       }
  41.  
  42.       var3 = this.body.check(var1, var5, var7.vsTrue, var4);
  43.       var3 = var3.join(var5.vsContinue);
  44.       if (this.inc != null) {
  45.          var3 = this.inc.check(var1, var5, var3, var4);
  46.       }
  47.  
  48.       var2.checkBackBranch(var1, this, var6, var3);
  49.       var3 = var5.vsBreak.join(var7.vsFalse);
  50.       return var2.removeAdditionalVars(var3);
  51.    }
  52.  
  53.    public Statement inline(Environment var1, Context var2) {
  54.       var2 = new Context(var2, this);
  55.       if (this.init != null) {
  56.          Statement[] var3 = new Statement[]{this.init, this};
  57.          this.init = null;
  58.          return (new CompoundStatement(super.where, var3)).inline(var1, var2);
  59.       } else {
  60.          if (this.cond != null) {
  61.             this.cond = this.cond.inlineValue(var1, var2);
  62.          }
  63.  
  64.          if (this.body != null) {
  65.             this.body = this.body.inline(var1, var2);
  66.          }
  67.  
  68.          if (this.inc != null) {
  69.             this.inc = this.inc.inline(var1, var2);
  70.          }
  71.  
  72.          return this;
  73.       }
  74.    }
  75.  
  76.    public Statement copyInline(Context var1, boolean var2) {
  77.       ForStatement var3 = (ForStatement)((Node)this).clone();
  78.       if (this.init != null) {
  79.          var3.init = this.init.copyInline(var1, var2);
  80.       }
  81.  
  82.       if (this.cond != null) {
  83.          var3.cond = this.cond.copyInline(var1);
  84.       }
  85.  
  86.       if (this.body != null) {
  87.          var3.body = this.body.copyInline(var1, var2);
  88.       }
  89.  
  90.       if (this.inc != null) {
  91.          var3.inc = this.inc.copyInline(var1);
  92.       }
  93.  
  94.       return var3;
  95.    }
  96.  
  97.    public int costInline(int var1, Environment var2, Context var3) {
  98.       int var4 = 2;
  99.       if (this.init != null) {
  100.          var4 += this.init.costInline(var1, var2, var3);
  101.       }
  102.  
  103.       if (this.cond != null) {
  104.          var4 += this.cond.costInline(var1, var2, var3);
  105.       }
  106.  
  107.       if (this.body != null) {
  108.          var4 += this.body.costInline(var1, var2, var3);
  109.       }
  110.  
  111.       if (this.inc != null) {
  112.          var4 += this.inc.costInline(var1, var2, var3);
  113.       }
  114.  
  115.       return var4;
  116.    }
  117.  
  118.    public void code(Environment var1, Context var2, Assembler var3) {
  119.       CodeContext var4 = new CodeContext(var2, this);
  120.       if (this.init != null) {
  121.          this.init.code(var1, var4, var3);
  122.       }
  123.  
  124.       Label var5 = new Label();
  125.       Label var6 = new Label();
  126.       var3.add(super.where, 167, var6);
  127.       var3.add(var5);
  128.       if (this.body != null) {
  129.          this.body.code(var1, var4, var3);
  130.       }
  131.  
  132.       var3.add(var4.contLabel);
  133.       if (this.inc != null) {
  134.          this.inc.code(var1, var4, var3);
  135.       }
  136.  
  137.       var3.add(var6);
  138.       if (this.cond != null) {
  139.          this.cond.codeBranch(var1, var4, var3, var5, true);
  140.       } else {
  141.          var3.add(super.where, 167, var5);
  142.       }
  143.  
  144.       var3.add(var4.breakLabel);
  145.    }
  146.  
  147.    public void print(PrintStream var1, int var2) {
  148.       super.print(var1, var2);
  149.       var1.print("for (");
  150.       if (this.init != null) {
  151.          this.init.print(var1, var2);
  152.          var1.print(" ");
  153.       } else {
  154.          var1.print("; ");
  155.       }
  156.  
  157.       if (this.cond != null) {
  158.          this.cond.print(var1);
  159.          var1.print(" ");
  160.       }
  161.  
  162.       var1.print("; ");
  163.       if (this.inc != null) {
  164.          this.inc.print(var1);
  165.       }
  166.  
  167.       var1.print(") ");
  168.       if (this.body != null) {
  169.          this.body.print(var1, var2);
  170.       } else {
  171.          var1.print(";");
  172.       }
  173.    }
  174. }
  175.