

import java.util.*;
import Jakarta.util.FixDosOutputStream;
import java.io.*;

   /** production:

UnmodifiedInterfaceExtension
: "interface" QName [ IntExtClause ]
"{" [ InterfaceMemberDeclarations ] "}" ::UmodIntExt
   *
   * @layer<CompInt>
   */

public class UmodIntExt {
    public String GetName() {
        return arg[0].tok[0].tokenName();
    }
    public String GetType() {
        return "interface";
    }

    public void compose( AstNode etree ) {
        // we want to compose two interface extensions.
        // (a) check that both names are the same
        // (b) compose extends lists
        // (c) compose list of member declarations

        UmodIntExt e = ( UmodIntExt ) etree;

        // Step 1: check if both names are the same
         
        String baseName = arg[0].tok[0].tokenName();
        String extName  = e.arg[0].tok[0].tokenName();

        if ( !baseName.equals( extName ) )
            AstNode.fatalError( tok[0],
                        "trying to compose extensions with different names: " +
                    baseName + " and " + extName );
        
        // Step 2: compose extends lists

        arg[1].compose( e.arg[1] );

        // Step 3: now compose interface member declarations

        arg[2].compose( e.arg[2] );
    }
}
