home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.io.PrintStream;
- import java.util.Hashtable;
- import sun.tools.asm.Assembler;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.Type;
-
- public class ArrayAccessExpression extends UnaryExpression {
- Expression index;
-
- public ArrayAccessExpression(int var1, Expression var2, Expression var3) {
- super(48, var1, Type.tError, var2);
- this.index = var3;
- }
-
- public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
- var3 = super.right.checkValue(var1, var2, var3, var4);
- if (this.index == null) {
- var1.error(super.where, "array.index.required");
- return var3;
- } else {
- var3 = this.index.checkValue(var1, var2, var3, var4);
- this.index = ((Node)this).convert(var1, var2, Type.tInt, this.index);
- if (!super.right.type.isType(9)) {
- if (!super.right.type.isType(13)) {
- var1.error(super.where, "not.array", super.right.type);
- }
-
- return var3;
- } else {
- super.type = super.right.type.getElementType();
- return var3;
- }
- }
- }
-
- public Vset checkAmbigName(Environment var1, Context var2, Vset var3, Hashtable var4, UnaryExpression var5) {
- if (this.index == null) {
- var3 = super.right.checkAmbigName(var1, var2, var3, var4, this);
- if (super.right.type == Type.tPackage) {
- FieldExpression.reportFailedPackagePrefix(var1, super.right);
- return var3;
- } else if (super.right instanceof TypeExpression) {
- Type var6 = Type.tArray(super.right.type);
- var5.right = new TypeExpression(super.where, var6);
- return var3;
- } else {
- var1.error(super.where, "array.index.required");
- return var3;
- }
- } else {
- return super.checkAmbigName(var1, var2, var3, var4, var5);
- }
- }
-
- public Vset checkLHS(Environment var1, Context var2, Vset var3, Hashtable var4) {
- return this.checkValue(var1, var2, var3, var4);
- }
-
- public Vset checkAssignOp(Environment var1, Context var2, Vset var3, Hashtable var4, Expression var5) {
- return this.checkValue(var1, var2, var3, var4);
- }
-
- Type toType(Environment var1, Context var2) {
- return this.toType(var1, super.right.toType(var1, var2));
- }
-
- Type toType(Environment var1, Type var2) {
- if (this.index != null) {
- var1.error(this.index.where, "array.dim.in.type");
- }
-
- return Type.tArray(var2);
- }
-
- public Expression inline(Environment var1, Context var2) {
- return (new CommaExpression(super.where, super.right, this.index)).inline(var1, var2);
- }
-
- public Expression inlineValue(Environment var1, Context var2) {
- super.right = super.right.inlineValue(var1, var2);
- this.index = this.index.inlineValue(var1, var2);
- return this;
- }
-
- public Expression inlineLHS(Environment var1, Context var2) {
- return this.inlineValue(var1, var2);
- }
-
- public Expression copyInline(Context var1) {
- ArrayAccessExpression var2 = (ArrayAccessExpression)((Node)this).clone();
- var2.right = super.right.copyInline(var1);
- var2.index = this.index.copyInline(var1);
- return var2;
- }
-
- public int costInline(int var1, Environment var2, Context var3) {
- return 1 + super.right.costInline(var1, var2, var3) + this.index.costInline(var1, var2, var3);
- }
-
- int codeLValue(Environment var1, Context var2, Assembler var3) {
- super.right.codeValue(var1, var2, var3);
- this.index.codeValue(var1, var2, var3);
- return 2;
- }
-
- void codeLoad(Environment var1, Context var2, Assembler var3) {
- switch (super.type.getTypeCode()) {
- case 0:
- case 1:
- var3.add(super.where, 51);
- return;
- case 2:
- var3.add(super.where, 52);
- return;
- case 3:
- var3.add(super.where, 53);
- return;
- default:
- var3.add(super.where, 46 + super.type.getTypeCodeOffset());
- }
- }
-
- void codeStore(Environment var1, Context var2, Assembler var3) {
- switch (super.type.getTypeCode()) {
- case 0:
- case 1:
- var3.add(super.where, 84);
- return;
- case 2:
- var3.add(super.where, 85);
- return;
- case 3:
- var3.add(super.where, 86);
- return;
- default:
- var3.add(super.where, 79 + super.type.getTypeCodeOffset());
- }
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- this.codeLValue(var1, var2, var3);
- this.codeLoad(var1, var2, var3);
- }
-
- public void print(PrintStream var1) {
- var1.print("(" + Constants.opNames[super.op] + " ");
- super.right.print(var1);
- var1.print(" ");
- if (this.index != null) {
- this.index.print(var1);
- } else {
- var1.print("<empty>");
- }
-
- var1.print(")");
- }
- }
-