import java.io.PrintWriter; // Start of classes from CodeTemplate.Kernel //************************************************** // class Environment //************************************************** public class Environment { protected Environment next; protected String mangle_string; protected Environment parents; protected EnvElem idents; protected boolean active; public Environment() { mangle_string = "_" + String.valueOf( kernelConstants.globals().global_mangle_num++ ); parents = null; idents = null; next = null; active = true; } public boolean isActive() { return ( active ); } public void setActive( boolean act ) { active = act; } // Locate the specified id on the list if it's there. protected EnvElem localFindId( String id ) { EnvElem ptr; ptr = idents; while ( ptr != null ) { if ( id.compareTo( ptr.id ) == 0 ) return ( ptr ); ptr = ptr.next; } return ( null ); } public EnvElem findId( String id ) { EnvElem ptr; Environment eptr; if ( ! active ) return ( null ); ptr = localFindId( id ); if ( ptr != null ) return ( ptr ); eptr = parents; while ( eptr != null ) { ptr = eptr.findId( id ); if ( ptr != null ) return ( ptr ); eptr = eptr.next; } return ( null ); } public String mangleNum() { return ( mangle_string ); } public boolean addAlias( String id, AstNode ast ) { EnvElem elem; elem = ( EnvElem ) findId( id ); if ( elem == null ) return ( false ); elem._alias = ast; return ( true ); } public Environment addId( String id ) { idents = new EnvElem( id, this, idents ); return ( Environment ) this ; } public Environment addEnv( Environment env ) { env.next = parents; parents = env; return ( Environment ) this ; } }