1 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 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 shortToString() { return "BLOCK"; } 44 45 46 public void pushBlock() { 47 vars.push(); types.push(); 48 } 49 50 51 public void popBlock() { 52 vars.pop(); types.pop(); 53 } 54 55 public void addVarDec(VarDec varDec) { 56 Object 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 name, ASTObject fromWhere) { 63 Object 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 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 name, ASTObject fromWhere) { 78 Object ret = types.get(name); 79 if (ret != null) return ((TypeDec)ret).getType(); 80 return super.findType(name, fromWhere); 81 } 82 } 83 84 | Popular Tags |