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 / NewArrayExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.7 KB  |  147 lines

  1. package sun.tools.tree;
  2.  
  3. import java.util.Hashtable;
  4. import sun.tools.asm.ArrayData;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.java.CompilerError;
  7. import sun.tools.java.Environment;
  8. import sun.tools.java.Type;
  9.  
  10. public class NewArrayExpression extends NaryExpression {
  11.    Expression init;
  12.  
  13.    public NewArrayExpression(int var1, Expression var2, Expression[] var3) {
  14.       super(41, var1, Type.tError, var2, var3);
  15.    }
  16.  
  17.    public NewArrayExpression(int var1, Expression var2, Expression[] var3, Expression var4) {
  18.       this(var1, var2, var3);
  19.       this.init = var4;
  20.    }
  21.  
  22.    public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
  23.       super.type = super.right.toType(var1, var2);
  24.       boolean var5 = this.init != null;
  25.  
  26.       for(int var6 = 0; var6 < super.args.length; ++var6) {
  27.          Expression var7 = super.args[var6];
  28.          if (var7 == null) {
  29.             if (var6 == 0 && !var5) {
  30.                var1.error(super.where, "array.dim.missing");
  31.             }
  32.  
  33.             var5 = true;
  34.          } else {
  35.             if (var5) {
  36.                var1.error(var7.where, "invalid.array.dim");
  37.             }
  38.  
  39.             var3 = var7.checkValue(var1, var2, var3, var4);
  40.             super.args[var6] = ((Node)this).convert(var1, var2, Type.tInt, var7);
  41.          }
  42.  
  43.          super.type = Type.tArray(super.type);
  44.       }
  45.  
  46.       if (this.init != null) {
  47.          var3 = this.init.checkInitializer(var1, var2, var3, super.type, var4);
  48.          this.init = ((Node)this).convert(var1, var2, super.type, this.init);
  49.       }
  50.  
  51.       return var3;
  52.    }
  53.  
  54.    public Expression copyInline(Context var1) {
  55.       NewArrayExpression var2 = (NewArrayExpression)super.copyInline(var1);
  56.       if (this.init != null) {
  57.          var2.init = this.init.copyInline(var1);
  58.       }
  59.  
  60.       return var2;
  61.    }
  62.  
  63.    public Expression inline(Environment var1, Context var2) {
  64.       Object var3 = null;
  65.  
  66.       for(int var4 = 0; var4 < super.args.length; ++var4) {
  67.          if (super.args[var4] != null) {
  68.             var3 = var3 != null ? new CommaExpression(super.where, (Expression)var3, super.args[var4]) : super.args[var4];
  69.          }
  70.       }
  71.  
  72.       if (this.init != null) {
  73.          var3 = var3 != null ? new CommaExpression(super.where, (Expression)var3, this.init) : this.init;
  74.       }
  75.  
  76.       if (var3 != null) {
  77.          return ((Expression)var3).inline(var1, var2);
  78.       } else {
  79.          return null;
  80.       }
  81.    }
  82.  
  83.    public Expression inlineValue(Environment var1, Context var2) {
  84.       if (this.init != null) {
  85.          return this.init.inlineValue(var1, var2);
  86.       } else {
  87.          for(int var3 = 0; var3 < super.args.length; ++var3) {
  88.             if (super.args[var3] != null) {
  89.                super.args[var3] = super.args[var3].inlineValue(var1, var2);
  90.             }
  91.          }
  92.  
  93.          return this;
  94.       }
  95.    }
  96.  
  97.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  98.       int var4 = 0;
  99.  
  100.       for(int var5 = 0; var5 < super.args.length; ++var5) {
  101.          if (super.args[var5] != null) {
  102.             super.args[var5].codeValue(var1, var2, var3);
  103.             ++var4;
  104.          }
  105.       }
  106.  
  107.       if (super.args.length > 1) {
  108.          var3.add(super.where, 197, new ArrayData(super.type, var4));
  109.       } else {
  110.          switch (super.type.getElementType().getTypeCode()) {
  111.             case 0:
  112.                var3.add(super.where, 188, new Integer(4));
  113.                return;
  114.             case 1:
  115.                var3.add(super.where, 188, new Integer(8));
  116.                return;
  117.             case 2:
  118.                var3.add(super.where, 188, new Integer(5));
  119.                return;
  120.             case 3:
  121.                var3.add(super.where, 188, new Integer(9));
  122.                return;
  123.             case 4:
  124.                var3.add(super.where, 188, new Integer(10));
  125.                return;
  126.             case 5:
  127.                var3.add(super.where, 188, new Integer(11));
  128.                return;
  129.             case 6:
  130.                var3.add(super.where, 188, new Integer(6));
  131.                return;
  132.             case 7:
  133.                var3.add(super.where, 188, new Integer(7));
  134.                return;
  135.             case 8:
  136.             default:
  137.                throw new CompilerError("codeValue");
  138.             case 9:
  139.                var3.add(super.where, 189, super.type.getElementType());
  140.                return;
  141.             case 10:
  142.                var3.add(super.where, 189, var1.getClassDeclaration(super.type.getElementType()));
  143.          }
  144.       }
  145.    }
  146. }
  147.