import java.io.PrintWriter;
//**************************************************
// StrEscape extension class -- should never appear on a list
//**************************************************
public class StrEscape {
public void reduce2java( AstProperties props ) {
PrintWriter pw = ( PrintWriter ) props.getProperty( "output" );
AstToken atok = ( AstToken ) tok[0];
pw.print( atok.white_space );
pw.print( "\"" );
arg[0].reduce2java( props );
pw.print( "\"" );
/* $str outside AST constructor should be retired -- but not yet
delete the above code after bootstrapping
$TEqn.AstNode.error( tok[0],
"$str construct found outside of AST constructor");
*/
}
public void reduce2ast( AstProperties props ) {
PrintWriter pw = ( PrintWriter ) props.getProperty( "output" );
Integer oldLevel = ( Integer ) props.getProperty( "AstLevel" );
// Decrement AstLevel marker
if ( oldLevel != null ) {
if ( oldLevel.intValue() ==1 )
props.removeProperty( "AstLevel" );
else
props.setProperty( "AstLevel", new Integer( oldLevel.intValue()-1 ) );
}
else
// no way reduce2ast node can be called without an AstLevel marker
AstNode.fatalError( tok[0], "AstLevel marker missing!!!" );
// output string literal in AST form
String qual = kernelConstants.LangName;
String result = "(" + qual + "StrLit) new " + qual +
"StrLit().setParms( new " + qual +
"AstToken().setParms(\"\", '\"' + " + arg[0] + " + '\"',0))";
pw.print( result );
// Restore AstLevel marker (increment)
props.setProperty( "AstLevel", oldLevel );
}
}