package net.sourceforge.pmd.cpd.cppast; import java.util.Hashtable; public class Scope { /** * Name of the scope (set only for class/function scopes). */ String scopeName; /** * Indicates whether this is a class scope or not. */ boolean type; // Indicates if this is a type. /** * (partial) table of type symbols introduced in this scope. */ Hashtable typeTable = new Hashtable(); /** * Parent scope. (null if it is the global scope). */ Scope parent; /** * Creates a scope object with a given name. */ public Scope(String name, boolean isType, Scope p) { scopeName = name; type = isType; parent = p; } /** * Creates an unnamed scope (like for compound statements). */ public Scope(Scope p) { type = false; parent = p; } /** * Inserts a name into the table to say that it is the name of a type. */ public void PutTypeName(String name) { typeTable.put(name, name); } /** * A type with a scope (class/struct/union). */ public void PutTypeName(String name, Scope sc) { typeTable.put(name, sc); } /** * Checks if a given name is the name of a type in this scope. */ public boolean IsTypeName(String name) { return typeTable.get(name) != null; } public Scope GetScope(String name) { Object sc = typeTable.get(name); if (sc instanceof Scope || sc instanceof ClassScope) return (Scope)sc; return null; } }