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 / VarDeclarationStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  6.4 KB  |  184 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.LocalVariable;
  7. import sun.tools.java.ClassDefinition;
  8. import sun.tools.java.ClassNotFound;
  9. import sun.tools.java.Constants;
  10. import sun.tools.java.Environment;
  11. import sun.tools.java.Identifier;
  12. import sun.tools.java.Type;
  13.  
  14. public class VarDeclarationStatement extends Statement {
  15.    LocalField field;
  16.    Expression expr;
  17.  
  18.    public VarDeclarationStatement(int var1, Expression var2) {
  19.       super(108, var1);
  20.       this.expr = var2;
  21.    }
  22.  
  23.    public VarDeclarationStatement(int var1, LocalField var2, Expression var3) {
  24.       super(108, var1);
  25.       this.field = var2;
  26.       this.expr = var3;
  27.    }
  28.  
  29.    Vset checkDeclaration(Environment var1, Context var2, Vset var3, int var4, Type var5, Hashtable var6) {
  30.       if (this.field != null) {
  31.          if (var2.getLocalClass(this.field.getName()) != null && this.field.isInnerClass()) {
  32.             var1.error(super.where, "local.class.redefined", this.field.getName());
  33.          }
  34.  
  35.          var2.declare(var1, this.field);
  36.          if (this.field.isInnerClass()) {
  37.             ClassDefinition var11 = this.field.getInnerClass();
  38.  
  39.             try {
  40.                var3 = var11.checkLocalClass(var1, var2, var3, (ClassDefinition)null, (Expression[])null, (Type[])null);
  41.             } catch (ClassNotFound var10) {
  42.                var1.error(super.where, "class.not.found", var10.name, Constants.opNames[super.op]);
  43.             }
  44.  
  45.             return var3;
  46.          } else {
  47.             var3.addVar(this.field.number);
  48.             return this.expr != null ? this.expr.checkValue(var1, var2, var3, var6) : var3;
  49.          }
  50.       } else {
  51.          Expression var7 = this.expr;
  52.          if (var7.op == 1) {
  53.             this.expr = ((AssignExpression)var7).right;
  54.             var7 = ((AssignExpression)var7).left;
  55.          } else {
  56.             this.expr = null;
  57.          }
  58.  
  59.          boolean var8;
  60.          for(var8 = var5.isType(13); var7.op == 48; var5 = Type.tArray(var5)) {
  61.             ArrayAccessExpression var9 = (ArrayAccessExpression)var7;
  62.             if (var9.index != null) {
  63.                var1.error(var9.index.where, "array.dim.in.type");
  64.                var8 = true;
  65.             }
  66.  
  67.             var7 = var9.right;
  68.          }
  69.  
  70.          if (var7.op == 60) {
  71.             Identifier var12 = ((IdentifierExpression)var7).id;
  72.             if (var2.getLocalField(var12) != null) {
  73.                var1.error(super.where, "local.redefined", var12);
  74.             }
  75.  
  76.             this.field = new LocalField(var7.where, var2.field.getClassDefinition(), var4, var5, var12);
  77.             var2.declare(var1, this.field);
  78.             if (this.expr != null) {
  79.                var3 = this.expr.checkInitializer(var1, var2, var3, var5, var6);
  80.                this.expr = ((Node)this).convert(var1, var2, var5, this.expr);
  81.                this.field.setValue(this.expr);
  82.                if (this.field.isConstant()) {
  83.                   this.field.addModifiers(1048576);
  84.                }
  85.  
  86.                var3.addVar(this.field.number);
  87.             } else if (var8) {
  88.                var3.addVar(this.field.number);
  89.             } else {
  90.                var3.addVarUnassigned(this.field.number);
  91.             }
  92.  
  93.             return var3;
  94.          } else {
  95.             var1.error(var7.where, "invalid.decl");
  96.             return var3;
  97.          }
  98.       }
  99.    }
  100.  
  101.    public Statement inline(Environment var1, Context var2) {
  102.       if (this.field.isInnerClass()) {
  103.          ClassDefinition var5 = this.field.getInnerClass();
  104.          var5.inlineLocalClass(var1);
  105.          return null;
  106.       } else if (!this.field.isUsed() && !var1.debug()) {
  107.          return (new ExpressionStatement(super.where, this.expr)).inline(var1, var2);
  108.       } else {
  109.          var2.declare(var1, this.field);
  110.          if (this.expr != null) {
  111.             this.expr = this.expr.inlineValue(var1, var2);
  112.             this.field.setValue(this.expr);
  113.             if (var1.optimize() && this.field.writecount == 0) {
  114.                if (this.expr.op == 60) {
  115.                   IdentifierExpression var3 = (IdentifierExpression)this.expr;
  116.                   if (var3.field.isLocal() && (var2 = var2.getInlineContext()) != null && ((LocalField)var3.field).number < var2.varNumber) {
  117.                      this.field.setValue(this.expr);
  118.                      this.field.addModifiers(1048576);
  119.                      this.expr = null;
  120.                      return null;
  121.                   }
  122.                }
  123.  
  124.                if (this.expr.isConstant() || this.expr.op == 82 || this.expr.op == 83) {
  125.                   this.field.setValue(this.expr);
  126.                   this.field.addModifiers(1048576);
  127.                   this.expr = null;
  128.                   return null;
  129.                }
  130.             }
  131.          }
  132.  
  133.          return this;
  134.       }
  135.    }
  136.  
  137.    public Statement copyInline(Context var1, boolean var2) {
  138.       VarDeclarationStatement var3 = (VarDeclarationStatement)((Node)this).clone();
  139.       if (this.expr != null) {
  140.          var3.expr = this.expr.copyInline(var1);
  141.       }
  142.  
  143.       return var3;
  144.    }
  145.  
  146.    public int costInline(int var1, Environment var2, Context var3) {
  147.       if (this.field != null && this.field.isInnerClass()) {
  148.          return var1;
  149.       } else {
  150.          return this.expr != null ? this.expr.costInline(var1, var2, var3) : 0;
  151.       }
  152.    }
  153.  
  154.    public void code(Environment var1, Context var2, Assembler var3) {
  155.       if (this.expr != null && !this.expr.type.isType(11)) {
  156.          this.expr.codeValue(var1, var2, var3);
  157.          var2.declare(var1, this.field);
  158.          var3.add(super.where, 54 + this.field.getType().getTypeCodeOffset(), new LocalVariable(this.field, this.field.number));
  159.       } else {
  160.          var2.declare(var1, this.field);
  161.          if (this.expr != null) {
  162.             this.expr.code(var1, var2, var3);
  163.          }
  164.  
  165.       }
  166.    }
  167.  
  168.    public void print(PrintStream var1, int var2) {
  169.       var1.print("local ");
  170.       if (this.field != null) {
  171.          var1.print(this.field + "#" + this.field.hashCode());
  172.          if (this.expr != null) {
  173.             var1.print(" = ");
  174.             this.expr.print(var1);
  175.             return;
  176.          }
  177.       } else {
  178.          this.expr.print(var1);
  179.          var1.print(";");
  180.       }
  181.  
  182.    }
  183. }
  184.