KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > compiler > base > cst > BlockScope


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.cst;
26
27 import org.aspectj.compiler.base.ast.*;
28 import org.aspectj.compiler.base.*;
29 import org.aspectj.util.StackMap;
30
31 import java.util.*;
32
33 /**
34  * The scope of a code body
35  */

36 public class BlockScope extends Scope {
37     private StackMap vars = new StackMap();
38     private StackMap types = new StackMap();
39     
40     public BlockScope(JavaCompiler compiler, Scope parent) {
41         super(compiler, parent);
42     }
43     public String JavaDoc shortToString() { return "BLOCK"; }
44     
45     /** enter a { */
46     public void pushBlock() {
47         vars.push(); types.push();
48     }
49     
50     /** exit a } */
51     public void popBlock() {
52         vars.pop(); types.pop();
53     }
54     
55     public void addVarDec(VarDec varDec) {
56         Object JavaDoc oldDec = vars.put(varDec.getId(), varDec);
57         if (oldDec == null) return;
58         
59         varDec.showError(varDec.getId() + " is already defined");
60     }
61     
62     public Expr bindUnqualifiedName(String JavaDoc name, ASTObject fromWhere) {
63         Object JavaDoc ret = vars.get(name);
64         if (ret != null) {
65             return new VarExpr(fromWhere.getSourceLocation(), (VarDec)ret);
66         }
67         else return super.bindUnqualifiedName(name, fromWhere);
68     }
69     
70     public void addTypeDec(TypeDec typeDec) {
71         Object JavaDoc oldDec = types.put(typeDec.getId(), typeDec);
72         if (oldDec == null) return;
73         
74         typeDec.showError(typeDec.getId() + " is already defined");
75     }
76     
77     public Type findType(String JavaDoc name, ASTObject fromWhere) {
78         Object JavaDoc ret = types.get(name);
79         if (ret != null) return ((TypeDec)ret).getType();
80         return super.findType(name, fromWhere);
81     }
82 }
83
84
Popular Tags