import java.io.PrintWriter; //************************************************** // ClsIscape extension class //************************************************** public class ClsIscape { public AstNode myAlias; // This method gets called if the Iscape is in a top-level // constructor. public AstNode setParms( Environment env, AstTokenInterface _arg0 ) { setParms( ( AstToken ) _arg0 ); EnvElem elem = ( EnvElem ) env.findId( tok[0].tokenName() ); if ( elem == null ) { // Error. Must have an entry to support aliasing. AstNode.fatalError( tok[0], "No environment for implicit class escape (" + tok[0].tokenName() + ")" ); } if ( elem._alias == null ) { // Error. No alias defined for this identifier. AstNode.fatalError( tok[0], "No alias for implicit class escape (" + tok[0].tokenName() + ")" ); } aliasStack.push( this ); myAlias = elem._alias; return ( ClsIscape ) this ; } public void doPatch() { AstNode alias_ast; if ( ! ( myAlias instanceof AST_Class ) ) { System.err.println( "Didn't do patch - alias is " + myAlias.getClass().getName() ); System.err.println( "AST_Class required for alias.\n" ); return; } alias_ast = ( AstNode ) myAlias.clone(); this.Replace( alias_ast ); } public void reduce2ast( AstProperties props ) { PrintWriter ps; Integer level; ps = ( PrintWriter ) props.getProperty( "output" ); if ( props.getProperty( "env" ) == null ) { // Error. No env indicates we are either not in an AST // constructor or the one we are in doesn't have an // environment declaration in it. AstNode.fatalError( tok[0], "Implicit class escape must be in constructor!" ); } // Get level number level = ( Integer ) props.getProperty( "AstLevel" ); ps.print( " (" + className() + ") new " + className() + "().setParms(" ); if ( level.intValue() == 1 ) ps.print( "_E, " ); tok[0].reduce2ast( props ); // ps.print(", "); // tok[1].reduce2ast(props); ps.println( ") /* " + className() + " */" ); } }