home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.util.Hashtable;
- import sun.tools.asm.ArrayData;
- import sun.tools.asm.Assembler;
- import sun.tools.java.CompilerError;
- import sun.tools.java.Environment;
- import sun.tools.java.Type;
-
- public class NewArrayExpression extends NaryExpression {
- Expression init;
-
- public NewArrayExpression(int var1, Expression var2, Expression[] var3) {
- super(41, var1, Type.tError, var2, var3);
- }
-
- public NewArrayExpression(int var1, Expression var2, Expression[] var3, Expression var4) {
- this(var1, var2, var3);
- this.init = var4;
- }
-
- public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
- super.type = super.right.toType(var1, var2);
- boolean var5 = this.init != null;
-
- for(int var6 = 0; var6 < super.args.length; ++var6) {
- Expression var7 = super.args[var6];
- if (var7 == null) {
- if (var6 == 0 && !var5) {
- var1.error(super.where, "array.dim.missing");
- }
-
- var5 = true;
- } else {
- if (var5) {
- var1.error(var7.where, "invalid.array.dim");
- }
-
- var3 = var7.checkValue(var1, var2, var3, var4);
- super.args[var6] = ((Node)this).convert(var1, var2, Type.tInt, var7);
- }
-
- super.type = Type.tArray(super.type);
- }
-
- if (this.init != null) {
- var3 = this.init.checkInitializer(var1, var2, var3, super.type, var4);
- this.init = ((Node)this).convert(var1, var2, super.type, this.init);
- }
-
- return var3;
- }
-
- public Expression copyInline(Context var1) {
- NewArrayExpression var2 = (NewArrayExpression)super.copyInline(var1);
- if (this.init != null) {
- var2.init = this.init.copyInline(var1);
- }
-
- return var2;
- }
-
- public Expression inline(Environment var1, Context var2) {
- Object var3 = null;
-
- for(int var4 = 0; var4 < super.args.length; ++var4) {
- if (super.args[var4] != null) {
- var3 = var3 != null ? new CommaExpression(super.where, (Expression)var3, super.args[var4]) : super.args[var4];
- }
- }
-
- if (this.init != null) {
- var3 = var3 != null ? new CommaExpression(super.where, (Expression)var3, this.init) : this.init;
- }
-
- if (var3 != null) {
- return ((Expression)var3).inline(var1, var2);
- } else {
- return null;
- }
- }
-
- public Expression inlineValue(Environment var1, Context var2) {
- if (this.init != null) {
- return this.init.inlineValue(var1, var2);
- } else {
- for(int var3 = 0; var3 < super.args.length; ++var3) {
- if (super.args[var3] != null) {
- super.args[var3] = super.args[var3].inlineValue(var1, var2);
- }
- }
-
- return this;
- }
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- int var4 = 0;
-
- for(int var5 = 0; var5 < super.args.length; ++var5) {
- if (super.args[var5] != null) {
- super.args[var5].codeValue(var1, var2, var3);
- ++var4;
- }
- }
-
- if (super.args.length > 1) {
- var3.add(super.where, 197, new ArrayData(super.type, var4));
- } else {
- switch (super.type.getElementType().getTypeCode()) {
- case 0:
- var3.add(super.where, 188, new Integer(4));
- return;
- case 1:
- var3.add(super.where, 188, new Integer(8));
- return;
- case 2:
- var3.add(super.where, 188, new Integer(5));
- return;
- case 3:
- var3.add(super.where, 188, new Integer(9));
- return;
- case 4:
- var3.add(super.where, 188, new Integer(10));
- return;
- case 5:
- var3.add(super.where, 188, new Integer(11));
- return;
- case 6:
- var3.add(super.where, 188, new Integer(6));
- return;
- case 7:
- var3.add(super.where, 188, new Integer(7));
- return;
- case 8:
- default:
- throw new CompilerError("codeValue");
- case 9:
- var3.add(super.where, 189, super.type.getElementType());
- return;
- case 10:
- var3.add(super.where, 189, var1.getClassDeclaration(super.type.getElementType()));
- }
- }
- }
- }
-