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 / ThisExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.1 KB  |  114 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 ThisExpression extends Expression {
  11.    LocalField field;
  12.    Expression implementation;
  13.  
  14.    public ThisExpression(int var1) {
  15.       super(82, var1, Type.tObject);
  16.    }
  17.  
  18.    protected ThisExpression(int var1, int var2) {
  19.       super(var1, var2, Type.tObject);
  20.    }
  21.  
  22.    public ThisExpression(int var1, LocalField var2) {
  23.       super(82, var1, Type.tObject);
  24.       this.field = var2;
  25.       ++var2.readcount;
  26.    }
  27.  
  28.    public ThisExpression(int var1, Context var2) {
  29.       super(82, var1, Type.tObject);
  30.       this.field = var2.getLocalField(Constants.idThis);
  31.       ++this.field.readcount;
  32.    }
  33.  
  34.    public Expression getImplementation() {
  35.       return (Expression)(this.implementation != null ? this.implementation : this);
  36.    }
  37.  
  38.    public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
  39.       if (var2.field.isStatic()) {
  40.          var1.error(super.where, "undef.var", Constants.opNames[super.op]);
  41.          super.type = Type.tError;
  42.          return var3;
  43.       } else {
  44.          if (this.field == null) {
  45.             this.field = var2.getLocalField(Constants.idThis);
  46.             ++this.field.readcount;
  47.          }
  48.  
  49.          if (this.field.scopeNumber < var2.frameNumber) {
  50.             this.implementation = var2.makeReference(var1, this.field);
  51.          }
  52.  
  53.          if (!var3.testVar(this.field.number)) {
  54.             var1.error(super.where, "access.inst.before.super", Constants.opNames[super.op]);
  55.          }
  56.  
  57.          if (this.field == null) {
  58.             super.type = var2.field.getClassDeclaration().getType();
  59.          } else {
  60.             super.type = this.field.getType();
  61.          }
  62.  
  63.          return var3;
  64.       }
  65.    }
  66.  
  67.    public boolean isNonNull() {
  68.       return true;
  69.    }
  70.  
  71.    public Expression inlineValue(Environment var1, Context var2) {
  72.       if (this.implementation != null) {
  73.          return this.implementation.inlineValue(var1, var2);
  74.       } else {
  75.          if (this.field != null && this.field.isInlineable(var1, false)) {
  76.             Expression var3 = (Expression)this.field.getValue(var1);
  77.             if (var3 != null) {
  78.                var3 = var3.copyInline(var2);
  79.                var3.type = super.type;
  80.                return var3;
  81.             }
  82.          }
  83.  
  84.          return this;
  85.       }
  86.    }
  87.  
  88.    public Expression copyInline(Context var1) {
  89.       if (this.implementation != null) {
  90.          return this.implementation.copyInline(var1);
  91.       } else {
  92.          ThisExpression var2 = (ThisExpression)((Node)this).clone();
  93.          if (this.field == null) {
  94.             var2.field = var1.getLocalField(Constants.idThis);
  95.             ++var2.field.readcount;
  96.          } else {
  97.             var2.field = this.field.getCurrentInlineCopy(var1);
  98.          }
  99.  
  100.          return var2;
  101.       }
  102.    }
  103.  
  104.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  105.       var3.add(super.where, 25, new Integer(this.field.number));
  106.    }
  107.  
  108.    public void print(PrintStream var1) {
  109.       String var2 = this.field == null ? "" : this.field.getClassDefinition().getName().getFlatName().getName() + ".";
  110.       var2 = var2 + Constants.opNames[super.op];
  111.       var1.print(var2 + "#" + (this.field != null ? this.field.hashCode() : 0));
  112.    }
  113. }
  114.