package ql.ast.visitor.typechecker; import java.util.HashMap; import java.util.Map; import java.util.Set; import ql.ast.QLType; import ql.ast.expression.Identifier; public class TypeEnvironment { private Map<Identifier, QLType> environment; private TypeEnvironment parentEnvironment; public TypeEnvironment() { environment = new HashMap<Identifier, QLType>(); } public TypeEnvironment(TypeEnvironment parent) { this(); this.parentEnvironment = parent; } public void store(Identifier identifier, QLType typeInstance) { environment.put(identifier, typeInstance); } public QLType resolve(Identifier identifier) { QLType type = environment.get(identifier); if (type == null && parentEnvironment != null) { type = parentEnvironment.resolve(identifier); } return type; } public Set<Identifier> getIdentifiers() { return environment.keySet(); } public TypeEnvironment getParent() { return (parentEnvironment == null ) ? this : parentEnvironment; } }