// Path: decaf_PA4/src/decaf/symbol/Symbol.java
// public abstract class Symbol {
// 	protected String name;
// 
// 	protected Scope definedIn;
// 
// 	protected Type type;
// 
// 	protected int order;
// 
// 	protected Location location;
// 
// 	public static final Comparator<Symbol> LOCATION_COMPARATOR = new Comparator<Symbol>() {
// 
// 		@Override
// 		public int compare(Symbol o1, Symbol o2) {
// 			return o1.location.compareTo(o2.location);
// 		}
// 
// 	};
// 
// 	public static final Comparator<Symbol> ORDER_COMPARATOR = new Comparator<Symbol>() {
// 
// 		@Override
// 		public int compare(Symbol o1, Symbol o2) {
// 			return o1.order > o2.order ? 1 : o1.order == o2.order ? 0 : -1;
// 		}
// 
// 	};
// 
// 	public Scope getScope() {
// 		return definedIn;
// 	}
// 
// 	public void setScope(Scope definedIn) {
// 		this.definedIn = definedIn;
// 	}
// 
// 	public int getOrder() {
// 		return order;
// 	}
// 
// 	public void setOrder(int order) {
// 		this.order = order;
// 	}
// 
// 	public Location getLocation() {
// 		return location;
// 	}
// 
// 	public void setLocation(Location location) {
// 		this.location = location;
// 	}
// 
// 	public Type getType() {
// 		return type;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public abstract boolean isVariable();
// 
// 	public abstract boolean isClass();
// 
// 	public abstract boolean isFunction();
// 
// 	public abstract String toString();
// }


import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import decaf.symbol.Symbol;
import decaf.utils.IndentPrintWriter;
package decaf.scope;



public abstract class Scope {
	public enum Kind {
		GLOBAL, CLASS, FORMAL, LOCAL
	}

	protected Map<String, Symbol> symbols = new LinkedHashMap<String, Symbol>();

	public abstract Kind getKind();

	public abstract void printTo(IndentPrintWriter pw);

	public boolean isGlobalScope() {
		return false;
	}

	public boolean isClassScope() {
// Path: decaf_PA4/src/decaf/symbol/Symbol.java
// public abstract class Symbol {
// 	protected String name;
// 
// 	protected Scope definedIn;
// 
// 	protected Type type;
// 
// 	protected int order;
// 
// 	protected Location location;
// 
// 	public static final Comparator<Symbol> LOCATION_COMPARATOR = new Comparator<Symbol>() {
// 
// 		@Override
// 		public int compare(Symbol o1, Symbol o2) {
// 			return o1.location.compareTo(o2.location);
// 		}
// 
// 	};
// 
// 	public static final Comparator<Symbol> ORDER_COMPARATOR = new Comparator<Symbol>() {
// 
// 		@Override
// 		public int compare(Symbol o1, Symbol o2) {
// 			return o1.order > o2.order ? 1 : o1.order == o2.order ? 0 : -1;
// 		}
// 
// 	};
// 
// 	public Scope getScope() {
// 		return definedIn;
// 	}
// 
// 	public void setScope(Scope definedIn) {
// 		this.definedIn = definedIn;
// 	}
// 
// 	public int getOrder() {
// 		return order;
// 	}
// 
// 	public void setOrder(int order) {
// 		this.order = order;
// 	}
// 
// 	public Location getLocation() {
// 		return location;
// 	}
// 
// 	public void setLocation(Location location) {
// 		this.location = location;
// 	}
// 
// 	public Type getType() {
// 		return type;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public abstract boolean isVariable();
// 
// 	public abstract boolean isClass();
// 
// 	public abstract boolean isFunction();
// 
// 	public abstract String toString();
// }


// Path: decaf_PA4/src/decaf/scope/Scope.java
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import decaf.symbol.Symbol;
import decaf.utils.IndentPrintWriter;

package decaf.scope;



public abstract class Scope {
	public enum Kind {
		GLOBAL, CLASS, FORMAL, LOCAL
	}

	protected Map<String, Symbol> symbols = new LinkedHashMap<String, Symbol>();

	public abstract Kind getKind();

	public abstract void printTo(IndentPrintWriter pw);

	public boolean isGlobalScope() {
		return false;
	}

	public boolean isClassScope() {
		return false;