import java.util.*;
import Jakarta.util.FixDosOutputStream;
import java.io.*;
//---------- mixin-layer for SourceDecl ----------------
public class SourceDecl {
public void harvestConstructors( int stage ) {
// just set the SourceDeclSeen boolean; doing so will
// allow constructor propagation errors to be reported
// do nothing if we are within quoted text
if ( stage != 0 ) {
super.harvestConstructors( stage );
return;
}
kernelConstants.globals().j2jbase.SourceDeclSeen = true;
}
public void reduce2java( AstProperties props ) {
// do nothing -- this statement vanishes in translation to java
// although do note that this statement has been seen.
// just declare the property SoUrCe exists; that's all we need
// do, however, print the white-space in front for pretty-printing
// Translations of other statements are conditional based
// on the presense or absense of source statements
// some error checking first. If a SoUrCe statement is seen
// by jak2java, then the first one must declare a ROOT token
// otherwise jak2java is translating a refinement (function)
// not a class (constant)
if ( props.getProperty( "SoUrCe" ) == null ) {
if ( tok[1].tokenName().equals( "" ) )
AstNode.error( tok[0],
"cannot translate a refinement, only base classes" );
}
props.print( getComment() );
props.setProperty( "SoUrCe", "non-Null" );
kernelConstants.globals().j2jbase.SourceDeclCounter++;
}
}