import java.util.*;
import Jakarta.util.FixDosOutputStream;
import java.io.*;
/************ mixinSm layer ****************
* @layer<mixinSm>
*/
public class UmodSmDecl {
// this method links extension declaration as a "extends" to
// the base declaration (whose typedeclaration name) is "name"
public void extensionOf( String name ) {
// add "name" to the extension list of this interface
// Step 1: create an AST_QualifiedName
AST_QualifiedName tl = AST_QualifiedName.Make( " " + name + " " );
// Step 2: now create an extension and plug it in
if ( arg[1].arg[0] == null ) {
AstOptNode aon = ( AstOptNode ) arg[1];
aon.setParms( new ExtClause().setParms( new AstToken().setParms( " ","extends", 0 ), tl ) );
}
else {
AstNode.fatalError( tok[0], "state_machine " + getName() +
" already has an extends clause" );
}
}
// this mangles the state machine name, mangles the name of constructors
// and returns the mangled name
public String getAndMangleName() {
// get the name of the interface, mangle it, and return the
// mangled name
String name = mangleName( getName() );
setName( name );
AST_FieldDecl f = ( ( AST_FieldDecl ) arg[3].arg[4].arg[0] );
if ( f != null )
f.mangleConstructors();
return name;
}
public String getName() {
return arg[0].tok[0].tokenName();
}
private void setName( String name ) {
( ( AstToken ) arg[0].tok[0] ).setName( name );
}
}