import java.io.PrintWriter; //************************************************** // Env extension class //************************************************** public class Env { public void reduce2java( AstProperties props ) { AstCursor csr; AstNode ancestor; PrintWriter ps; Environment env; AstTokenInterface token; String tname; ps = ( PrintWriter ) props.getProperty( "output" ); ancestor = hasAncestor( "ClsBody" ); if ( ancestor != null ) { // context is class body // Create an environment owned by the class env = new Environment(); props.setProperty( "env", env ); // Generate code for creating a new environment ps.print( "\n\tpublic " + kernelConstants.LangName + "Environment _E = (" + kernelConstants.LangName + "Environment) new " + kernelConstants.LangName + "Environment()" ); csr = new AstCursor(); csr.First( arg[0] ); csr.PlusPlus(); AstToken.printWhitespace( false ); while ( csr.More() ) { tname = csr.node.tok[0].tokenName(); if ( tname.length() > 0 ) { // Add any identifiers names to the environment env.addId( tname ); ps.print( ".addId(\"" ); csr.reduce2java( props ); ps.print( "\")" ); } csr.PlusPlus(); } AstToken.printWhitespace( true ); ps.println( ";\n\tpublic " + kernelConstants.LangName + "Environment getEnv() { return(_E); }" ); return; } ancestor = hasAncestor( "FDecl" ); if ( ancestor != null ) { // context is interface body ps.println( "\t" + kernelConstants.LangName + "Environment getEnv();" ); } else AstNode.fatalError( tok[0], "Can't find context for 'environment' decl" ); } }