package com.laytonsmith.core.compiler; import com.laytonsmith.core.constructs.CString; import com.laytonsmith.core.constructs.Construct; import com.laytonsmith.core.constructs.Target; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Stack; /** * * */ public final class VariableStack { private Stack<Map<String, Construct>> vars; public VariableStack(){ vars = new Stack<Map<String, Construct>>(); pushScope(); } public void pushScope(){ vars.push(new HashMap<String, Construct>()); } public void popScope(){ vars.pop(); } private Construct get(String name, Target t){ List<Map<String, Construct>> varsReversed = new ArrayList<Map<String, Construct>>(); Collections.reverse(varsReversed); for(Map<String, Construct> map : varsReversed){ if(map.containsKey(name)){ return map.get(name); } } return new CString("", t); } public void assign(String name, Construct value){ vars.peek().put(name, value); } }