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 ThisExpression extends Expression {
- LocalField field;
- Expression implementation;
-
- public ThisExpression(int var1) {
- super(82, var1, Type.tObject);
- }
-
- protected ThisExpression(int var1, int var2) {
- super(var1, var2, Type.tObject);
- }
-
- public ThisExpression(int var1, LocalField var2) {
- super(82, var1, Type.tObject);
- this.field = var2;
- ++var2.readcount;
- }
-
- public ThisExpression(int var1, Context var2) {
- super(82, var1, Type.tObject);
- this.field = var2.getLocalField(Constants.idThis);
- ++this.field.readcount;
- }
-
- public Expression getImplementation() {
- return (Expression)(this.implementation != null ? this.implementation : this);
- }
-
- public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
- if (var2.field.isStatic()) {
- var1.error(super.where, "undef.var", Constants.opNames[super.op]);
- super.type = Type.tError;
- return var3;
- } else {
- if (this.field == null) {
- this.field = var2.getLocalField(Constants.idThis);
- ++this.field.readcount;
- }
-
- if (this.field.scopeNumber < var2.frameNumber) {
- this.implementation = var2.makeReference(var1, this.field);
- }
-
- if (!var3.testVar(this.field.number)) {
- var1.error(super.where, "access.inst.before.super", Constants.opNames[super.op]);
- }
-
- if (this.field == null) {
- super.type = var2.field.getClassDeclaration().getType();
- } else {
- super.type = this.field.getType();
- }
-
- return var3;
- }
- }
-
- public boolean isNonNull() {
- return true;
- }
-
- public Expression inlineValue(Environment var1, Context var2) {
- if (this.implementation != null) {
- return this.implementation.inlineValue(var1, var2);
- } else {
- if (this.field != null && this.field.isInlineable(var1, false)) {
- Expression var3 = (Expression)this.field.getValue(var1);
- if (var3 != null) {
- var3 = var3.copyInline(var2);
- var3.type = super.type;
- return var3;
- }
- }
-
- return this;
- }
- }
-
- public Expression copyInline(Context var1) {
- if (this.implementation != null) {
- return this.implementation.copyInline(var1);
- } else {
- ThisExpression var2 = (ThisExpression)((Node)this).clone();
- if (this.field == null) {
- var2.field = var1.getLocalField(Constants.idThis);
- ++var2.field.readcount;
- } else {
- var2.field = this.field.getCurrentInlineCopy(var1);
- }
-
- return var2;
- }
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- var3.add(super.where, 25, new Integer(this.field.number));
- }
-
- public void print(PrintStream var1) {
- String var2 = this.field == null ? "" : this.field.getClassDefinition().getName().getFlatName().getName() + ".";
- var2 = var2 + Constants.opNames[super.op];
- var1.print(var2 + "#" + (this.field != null ? this.field.hashCode() : 0));
- }
- }
-