KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > compiler > base > ast > VarExpr


1 /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This file is part of the compiler and core tools for the AspectJ(tm)
4  * programming language; see http://aspectj.org
5  *
6  * The contents of this file are subject to the Mozilla Public License
7  * Version 1.1 (the "License"); you may not use this file except in
8  * compliance with the License. You may obtain a copy of the License at
9  * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is AspectJ.
17  *
18  * The Initial Developer of the Original Code is Xerox Corporation. Portions
19  * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
20  * All Rights Reserved.
21  *
22  * Contributor(s):
23  */

24
25 package org.aspectj.compiler.base.ast;
26
27 import org.aspectj.compiler.base.*;
28 import org.aspectj.compiler.base.cst.BlockScope;
29
30 import org.aspectj.compiler.base.bcg.CodeBuilder;
31 import org.aspectj.compiler.base.bcg.Label;
32
33 import org.aspectj.compiler.base.LocalClassPass;
34
35 /**
36  * @grammar id
37  * @property VarDec varDec
38  */

39
40 public class VarExpr extends AssignableExpr {
41     protected Type discoverType() {
42         return getVarDec().getType();
43     }
44
45     public Expr makeReference() {
46         return getAST().makeVar(getVarDec());
47     }
48
49     public final boolean canBeCopied() {
50         return true;
51     }
52
53     public String JavaDoc getId() { return varDec.getId(); }
54
55     //INTRO from CopyWalker
56
// public ASTObject postCopy(CopyWalker walker, ASTObject oldObject) {
57
// VarDec newDec = (VarDec)walker.lookupMapping(((VarExpr)oldObject).varDec);
58
// if (newDec != varDec) setVarDec(newDec);
59
// return this;
60
// }
61

62     //INTRO from MovingWalker
63
public ASTObject postMove(MovingWalker walker) {
64         return walker.moveVarExpr(this);
65     }
66
67     public void unparse(CodeWriter writer) {
68         writer.write(varDec.getId());
69         return;
70     }
71
72     // ------------------------------
73
// INTRO from FlowCheckerPass
74

75     public void walkFlow(FlowCheckerPass w) {
76         VarDec dec = getVarDec();
77         if (! (dec instanceof FormalDec)
78                 && ! w.getVars().isDefinitelyAssigned(getVarDec())) {
79             showError("Variable " + getId() + " might not have a value");
80         }
81     }
82
83     // ------------------------------
84
// INTRO from AssignmentCheckerPass
85

86     public ASTObject postAssignmentCheck(AssignmentCheckerPass walker) {
87         if (isLhs()) return this;
88         Expr initExpr = varDec.getInitializer();
89         if (initExpr != null && varDec.isFinal() &&
90                 initExpr instanceof LiteralExpr && ! getType().isObject() ) {
91             return varDec.getType().foldCast((LiteralExpr)initExpr).setSource(this);
92         } else {
93             return this;
94         }
95     }
96
97     // ------------------------------
98
// INTRO: LocalClassPass.AnalysisWalker
99

100     public void walkAnalysis(LocalClassPass.AnalysisWalker walker) {
101         walker.processVarExpr(this);
102     }
103
104     // ------------------------------
105
// INTRO: LocalClassPass.ThreadingWalker
106

107     public ASTObject postThreading(LocalClassPass.ThreadingWalker walker) {
108         Object JavaDoc o = walker.lookup(getVarDec());
109         if (o == null) {
110             return this;
111         } else if (o instanceof FieldDec) {
112             FieldDec fieldDec = (FieldDec)o;
113 // System.out.println("threading: " + this + ", " + fieldDec + ", " +
114
// fieldDec.getDeclaringType() + "::" + getLexicalType());
115
return getAST().makeGet(getAST().makePrimary(
116                                                   (NameType)fieldDec.getDeclaringType(),
117                                                   (NameType)getLexicalType(), false,
118                                                   !isInConstructorCallExpr()),
119                         fieldDec);
120         } else {
121             return getAST().makeVar((FormalDec) o);
122         }
123     }
124
125     // ------------------------------
126
// bcg
127

128     protected void cgEffect(CodeBuilder cb) {}
129     protected void cgLvalue(CodeBuilder cb) {}
130     protected void cgLtoRvalue(CodeBuilder cb) {
131         getType().emitLoad(cb, getVarDec().getFrameLoc());
132     }
133     protected void cgAssignment(CodeBuilder cb) {
134         getType().emitStore(cb, getVarDec().getFrameLoc());
135     }
136     protected void cgDupLvalue(CodeBuilder cb) {}
137     protected void cgDupRvalue(CodeBuilder cb) {
138         getType().emitDup(cb);
139     }
140     protected boolean isIncable() {
141         return getType() instanceof IntType &&
142             getVarDec().getFrameLoc() < 0xFF;
143     }
144
145     //BEGIN: Generated from @child and @property
146
protected VarDec varDec;
147     public VarDec getVarDec() { return varDec; }
148     public void setVarDec(VarDec _varDec) { varDec = _varDec; }
149
150     public VarExpr(SourceLocation location, VarDec _varDec) {
151         super(location);
152         setVarDec(_varDec);
153     }
154     protected VarExpr(SourceLocation source) {
155         super(source);
156     }
157
158     public ASTObject copyWalk(CopyWalker walker) {
159         VarExpr ret = new VarExpr(getSourceLocation());
160         ret.preCopy(walker, this);
161         ret.varDec = varDec;
162         return ret;
163     }
164
165
166     public String JavaDoc getDefaultDisplayName() {
167         return "VarExpr(varDec: "+varDec+")";
168     }
169
170     //END: Generated from @child and @property
171
}
172
Popular Tags