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 / CompoundStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.4 KB  |  164 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.java.Environment;
  7.  
  8. public class CompoundStatement extends Statement {
  9.    Statement[] args;
  10.  
  11.    public CompoundStatement(int var1, Statement[] var2) {
  12.       super(105, var1);
  13.       this.args = var2;
  14.  
  15.       for(int var3 = 0; var3 < var2.length; ++var3) {
  16.          if (var2[var3] == null) {
  17.             var2[var3] = new CompoundStatement(var1, new Statement[0]);
  18.          }
  19.       }
  20.  
  21.    }
  22.  
  23.    public void insertStatement(Statement var1) {
  24.       Statement[] var2 = new Statement[1 + this.args.length];
  25.       var2[0] = var1;
  26.  
  27.       for(int var3 = 0; var3 < this.args.length; ++var3) {
  28.          var2[var3 + 1] = this.args[var3];
  29.       }
  30.  
  31.       this.args = var2;
  32.    }
  33.  
  34.    Vset check(Environment var1, Context var2, Vset var3, Hashtable var4) {
  35.       if (this.args.length > 0) {
  36.          var3 = ((Statement)this).reach(var1, var3);
  37.          CheckContext var5 = new CheckContext(var2, this);
  38.  
  39.          for(int var6 = 0; var6 < this.args.length; ++var6) {
  40.             var3 = this.args[var6].checkBlockStatement(var1, var5, var3, var4);
  41.          }
  42.  
  43.          var3 = var3.join(var5.vsBreak);
  44.       }
  45.  
  46.       return var2.removeAdditionalVars(var3);
  47.    }
  48.  
  49.    public Statement inline(Environment var1, Context var2) {
  50.       var2 = new Context(var2, this);
  51.       boolean var3 = false;
  52.       int var4 = 0;
  53.  
  54.       for(int var5 = 0; var5 < this.args.length; ++var5) {
  55.          Statement var6 = this.args[var5];
  56.          if (var6 != null) {
  57.             if ((var6 = var6.inline(var1, var2)) != null) {
  58.                if (var6.op == 105 && var6.labels == null) {
  59.                   var4 += ((CompoundStatement)var6).args.length;
  60.                } else {
  61.                   ++var4;
  62.                }
  63.  
  64.                var3 = true;
  65.             }
  66.  
  67.             this.args[var5] = var6;
  68.          }
  69.       }
  70.  
  71.       switch (var4) {
  72.          case 0:
  73.             return null;
  74.          case 1:
  75.             int var13 = this.args.length;
  76.  
  77.             while(var13-- > 0) {
  78.                if (this.args[var13] != null) {
  79.                   return ((Statement)this).eliminate(var1, this.args[var13]);
  80.                }
  81.             }
  82.          default:
  83.             if (var3 || var4 != this.args.length) {
  84.                Statement[] var14 = new Statement[var4];
  85.                int var7 = this.args.length;
  86.  
  87.                while(var7-- > 0) {
  88.                   Statement var8 = this.args[var7];
  89.                   if (var8 != null) {
  90.                      if (var8.op == 105 && var8.labels == null) {
  91.                         Statement[] var9 = ((CompoundStatement)var8).args;
  92.  
  93.                         for(int var10 = var9.length; var10-- > 0; var14[var4] = var9[var10]) {
  94.                            --var4;
  95.                         }
  96.                      } else {
  97.                         --var4;
  98.                         var14[var4] = var8;
  99.                      }
  100.                   }
  101.                }
  102.  
  103.                this.args = var14;
  104.             }
  105.  
  106.             return this;
  107.       }
  108.    }
  109.  
  110.    public Statement copyInline(Context var1, boolean var2) {
  111.       CompoundStatement var3 = (CompoundStatement)((Node)this).clone();
  112.       var3.args = new Statement[this.args.length];
  113.  
  114.       for(int var4 = 0; var4 < this.args.length; ++var4) {
  115.          var3.args[var4] = this.args[var4].copyInline(var1, var2);
  116.       }
  117.  
  118.       return var3;
  119.    }
  120.  
  121.    public int costInline(int var1, Environment var2, Context var3) {
  122.       int var4 = 0;
  123.  
  124.       for(int var5 = 0; var5 < this.args.length && var4 < var1; ++var5) {
  125.          var4 += this.args[var5].costInline(var1, var2, var3);
  126.       }
  127.  
  128.       return var4;
  129.    }
  130.  
  131.    public void code(Environment var1, Context var2, Assembler var3) {
  132.       CodeContext var4 = new CodeContext(var2, this);
  133.  
  134.       for(int var5 = 0; var5 < this.args.length; ++var5) {
  135.          this.args[var5].code(var1, var4, var3);
  136.       }
  137.  
  138.       var3.add(var4.breakLabel);
  139.    }
  140.  
  141.    public Expression firstConstructor() {
  142.       return this.args.length > 0 ? this.args[0].firstConstructor() : null;
  143.    }
  144.  
  145.    public void print(PrintStream var1, int var2) {
  146.       super.print(var1, var2);
  147.       var1.print("{\n");
  148.  
  149.       for(int var3 = 0; var3 < this.args.length; ++var3) {
  150.          ((Statement)this).printIndent(var1, var2 + 1);
  151.          if (this.args[var3] != null) {
  152.             this.args[var3].print(var1, var2 + 1);
  153.          } else {
  154.             var1.print("<empty>");
  155.          }
  156.  
  157.          var1.print("\n");
  158.       }
  159.  
  160.       ((Statement)this).printIndent(var1, var2);
  161.       var1.print("}");
  162.    }
  163. }
  164.