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 / ArrayAccessExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.7 KB  |  161 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.Constants;
  7. import sun.tools.java.Environment;
  8. import sun.tools.java.Type;
  9.  
  10. public class ArrayAccessExpression extends UnaryExpression {
  11.    Expression index;
  12.  
  13.    public ArrayAccessExpression(int var1, Expression var2, Expression var3) {
  14.       super(48, var1, Type.tError, var2);
  15.       this.index = var3;
  16.    }
  17.  
  18.    public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
  19.       var3 = super.right.checkValue(var1, var2, var3, var4);
  20.       if (this.index == null) {
  21.          var1.error(super.where, "array.index.required");
  22.          return var3;
  23.       } else {
  24.          var3 = this.index.checkValue(var1, var2, var3, var4);
  25.          this.index = ((Node)this).convert(var1, var2, Type.tInt, this.index);
  26.          if (!super.right.type.isType(9)) {
  27.             if (!super.right.type.isType(13)) {
  28.                var1.error(super.where, "not.array", super.right.type);
  29.             }
  30.  
  31.             return var3;
  32.          } else {
  33.             super.type = super.right.type.getElementType();
  34.             return var3;
  35.          }
  36.       }
  37.    }
  38.  
  39.    public Vset checkAmbigName(Environment var1, Context var2, Vset var3, Hashtable var4, UnaryExpression var5) {
  40.       if (this.index == null) {
  41.          var3 = super.right.checkAmbigName(var1, var2, var3, var4, this);
  42.          if (super.right.type == Type.tPackage) {
  43.             FieldExpression.reportFailedPackagePrefix(var1, super.right);
  44.             return var3;
  45.          } else if (super.right instanceof TypeExpression) {
  46.             Type var6 = Type.tArray(super.right.type);
  47.             var5.right = new TypeExpression(super.where, var6);
  48.             return var3;
  49.          } else {
  50.             var1.error(super.where, "array.index.required");
  51.             return var3;
  52.          }
  53.       } else {
  54.          return super.checkAmbigName(var1, var2, var3, var4, var5);
  55.       }
  56.    }
  57.  
  58.    public Vset checkLHS(Environment var1, Context var2, Vset var3, Hashtable var4) {
  59.       return this.checkValue(var1, var2, var3, var4);
  60.    }
  61.  
  62.    public Vset checkAssignOp(Environment var1, Context var2, Vset var3, Hashtable var4, Expression var5) {
  63.       return this.checkValue(var1, var2, var3, var4);
  64.    }
  65.  
  66.    Type toType(Environment var1, Context var2) {
  67.       return this.toType(var1, super.right.toType(var1, var2));
  68.    }
  69.  
  70.    Type toType(Environment var1, Type var2) {
  71.       if (this.index != null) {
  72.          var1.error(this.index.where, "array.dim.in.type");
  73.       }
  74.  
  75.       return Type.tArray(var2);
  76.    }
  77.  
  78.    public Expression inline(Environment var1, Context var2) {
  79.       return (new CommaExpression(super.where, super.right, this.index)).inline(var1, var2);
  80.    }
  81.  
  82.    public Expression inlineValue(Environment var1, Context var2) {
  83.       super.right = super.right.inlineValue(var1, var2);
  84.       this.index = this.index.inlineValue(var1, var2);
  85.       return this;
  86.    }
  87.  
  88.    public Expression inlineLHS(Environment var1, Context var2) {
  89.       return this.inlineValue(var1, var2);
  90.    }
  91.  
  92.    public Expression copyInline(Context var1) {
  93.       ArrayAccessExpression var2 = (ArrayAccessExpression)((Node)this).clone();
  94.       var2.right = super.right.copyInline(var1);
  95.       var2.index = this.index.copyInline(var1);
  96.       return var2;
  97.    }
  98.  
  99.    public int costInline(int var1, Environment var2, Context var3) {
  100.       return 1 + super.right.costInline(var1, var2, var3) + this.index.costInline(var1, var2, var3);
  101.    }
  102.  
  103.    int codeLValue(Environment var1, Context var2, Assembler var3) {
  104.       super.right.codeValue(var1, var2, var3);
  105.       this.index.codeValue(var1, var2, var3);
  106.       return 2;
  107.    }
  108.  
  109.    void codeLoad(Environment var1, Context var2, Assembler var3) {
  110.       switch (super.type.getTypeCode()) {
  111.          case 0:
  112.          case 1:
  113.             var3.add(super.where, 51);
  114.             return;
  115.          case 2:
  116.             var3.add(super.where, 52);
  117.             return;
  118.          case 3:
  119.             var3.add(super.where, 53);
  120.             return;
  121.          default:
  122.             var3.add(super.where, 46 + super.type.getTypeCodeOffset());
  123.       }
  124.    }
  125.  
  126.    void codeStore(Environment var1, Context var2, Assembler var3) {
  127.       switch (super.type.getTypeCode()) {
  128.          case 0:
  129.          case 1:
  130.             var3.add(super.where, 84);
  131.             return;
  132.          case 2:
  133.             var3.add(super.where, 85);
  134.             return;
  135.          case 3:
  136.             var3.add(super.where, 86);
  137.             return;
  138.          default:
  139.             var3.add(super.where, 79 + super.type.getTypeCodeOffset());
  140.       }
  141.    }
  142.  
  143.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  144.       this.codeLValue(var1, var2, var3);
  145.       this.codeLoad(var1, var2, var3);
  146.    }
  147.  
  148.    public void print(PrintStream var1) {
  149.       var1.print("(" + Constants.opNames[super.op] + " ");
  150.       super.right.print(var1);
  151.       var1.print(" ");
  152.       if (this.index != null) {
  153.          this.index.print(var1);
  154.       } else {
  155.          var1.print("<empty>");
  156.       }
  157.  
  158.       var1.print(")");
  159.    }
  160. }
  161.