(TranslationUnit
    [(Module
        m1
        (TriviaNode
            []
            [(EndOfLine)
            (EndOfLine)]
        )
        []
        []
        [(DerivedType
            Base
            []
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
            []
            [(Declaration
                (AttrType
                    TypeInteger
                    []
                    ()
                    ()
                    None
                )
                []
                [(i
                []
                []
                ()
                ()
                None
                ())]
                ()
            )]
            []
        )
        (Interface
            (InterfaceHeader)
            ()
            [(InterfaceProc
                (Subroutine
                    sub1
                    [(i)
                    (b)]
                    [(SimpleAttribute
                        AttrModule
                    )]
                    ()
                    (TriviaNode
                        [(EOLComment
                            "! Module procedure interface body for sub1"
                        )]
                        []
                    )
                    []
                    []
                    []
                    [(Declaration
                        (AttrType
                            TypeInteger
                            []
                            ()
                            ()
                            None
                        )
                        [(AttrIntent
                            In
                        )]
                        [(i
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )
                    (Declaration
                        (AttrType
                            TypeType
                            []
                            ()
                            Base
                            None
                        )
                        [(AttrIntent
                            In
                        )]
                        [(b
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )]
                    []
                    []
                    []
                )
            )]
        )]
        []
        []
    )
    (Module
        m2
        (TriviaNode
            []
            [(EndOfLine)
            (EndOfLine)]
        )
        [(Use
            []
            m1
            []
            .false.
            (TriviaNode
                []
                [(EOLComment
                    "! Use association of module m1"
                )
                (EndOfLine)]
            )
        )]
        []
        [(Interface
            (InterfaceHeader)
            ()
            [(InterfaceProc
                (Function
                    func1
                    []
                    [(AttrType
                        TypeReal
                        []
                        ()
                        ()
                        None
                    )
                    (SimpleAttribute
                        AttrModule
                    )]
                    ()
                    ()
                    (TriviaNode
                        [(EOLComment
                            "! Module procedure interface body for func1"
                        )]
                        [(EndOfLine)
                        (EndOfLine)]
                    )
                    []
                    []
                    []
                    []
                    []
                    []
                    []
                )
            )
            (InterfaceProc
                (Function
                    func2
                    [(b)]
                    [(SimpleAttribute
                        AttrModule
                    )]
                    ()
                    ()
                    (TriviaNode
                        [(EOLComment
                            "! Module procedure interface body for func2"
                        )]
                        []
                    )
                    []
                    []
                    []
                    [(Declaration
                        (AttrType
                            TypeType
                            []
                            ()
                            Base
                            None
                        )
                        []
                        [(b
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )
                    (Declaration
                        (AttrType
                            TypeType
                            []
                            ()
                            Base
                            None
                        )
                        []
                        [(func2
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )]
                    []
                    []
                    []
                )
            )]
        )]
        []
        []
    )
    (Module
        m4
        (TriviaNode
            []
            [(EndOfLine)
            (EndOfLine)]
        )
        [(Use
            []
            m1
            []
            .false.
            (TriviaNode
                []
                [(EOLComment
                    "! Use association of module m1"
                )]
            )
        )]
        []
        [(DerivedType
            NewType
            []
            ()
            [(AttrExtends
                Base
            )]
            [(Declaration
                (AttrType
                    TypeReal
                    []
                    ()
                    ()
                    None
                )
                []
                [(j
                []
                []
                ()
                ()
                None
                ())]
                ()
            )]
            []
        )]
        []
        []
    )
    (Submodule
        m1
        ()
        m1sub
        (TriviaNode
            []
            [(EndOfLine)
            (EndOfLine)]
        )
        [(Use
            []
            m4
            []
            .false.
            (TriviaNode
                []
                [(EOLComment
                    "! Use association of module m4"
                )
                (EndOfLine)]
            )
        )]
        []
        []
        []
        [(Subroutine
            sub1
            [(i)
            (b)]
            [(SimpleAttribute
                AttrModule
            )]
            ()
            (TriviaNode
                [(EOLComment
                    "! Implementation of sub1 declared in m1"
                )]
                []
            )
            []
            []
            []
            [(Declaration
                (AttrType
                    TypeInteger
                    []
                    ()
                    ()
                    None
                )
                [(AttrIntent
                    In
                )]
                [(i
                []
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeType
                    []
                    ()
                    Base
                    None
                )
                [(AttrIntent
                    In
                )]
                [(b
                []
                []
                ()
                ()
                None
                ())]
                ()
            )]
            [(Print
                0
                ()
                [(String "sub1" ())
                i
                b]
                ()
            )]
            []
            []
        )]
    )
    (Submodule
        m2
        ()
        m2sub
        (TriviaNode
            [(EndOfLine)
            (EndOfLine)]
            [(EndOfLine)
            (EndOfLine)]
        )
        []
        []
        []
        []
        [(Function
            func1
            []
            [(AttrType
                TypeReal
                []
                ()
                ()
                None
            )
            (SimpleAttribute
                AttrModule
            )]
            ()
            ()
            (TriviaNode
                [(EOLComment
                    "! Implementation of func1 declared in m2"
                )]
                []
            )
            []
            []
            []
            []
            [(Assignment
                0
                func1
                20
                ()
            )]
            []
            []
        )]
    )
    (Submodule
        m2
        m2sub
        m2sub2
        (TriviaNode
            [(EndOfLine)
            (EndOfLine)]
            [(EndOfLine)
            (EndOfLine)]
        )
        []
        []
        []
        []
        [(Function
            func2
            [(b)]
            [(SimpleAttribute
                AttrModule
            )]
            ()
            ()
            (TriviaNode
                [(EOLComment
                    "! Implementation of func2 declared in m2"
                )]
                []
            )
            []
            []
            []
            [(Declaration
                (AttrType
                    TypeType
                    []
                    ()
                    Base
                    None
                )
                []
                [(b
                []
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeType
                    []
                    ()
                    Base
                    None
                )
                []
                [(func2
                []
                []
                ()
                ()
                None
                ())]
                ()
            )]
            [(Assignment
                0
                func2
                b
                ()
            )]
            []
            []
        )]
    )
    (Module
        m3
        (TriviaNode
            []
            [(EndOfLine)
            (EndOfLine)]
        )
        []
        []
        [(Interface
            (InterfaceHeader)
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
            [(InterfaceProc
                (Subroutine
                    interfaceSub1
                    [(i)
                    (b)]
                    []
                    ()
                    (TriviaNode
                        []
                        [(EndOfLine)
                        (EndOfLine)]
                    )
                    [(Use
                        []
                        m1
                        []
                        .false.
                        ()
                    )]
                    []
                    []
                    [(Declaration
                        (AttrType
                            TypeInteger
                            []
                            ()
                            ()
                            None
                        )
                        [(AttrIntent
                            In
                        )]
                        [(i
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )
                    (Declaration
                        (AttrType
                            TypeType
                            []
                            ()
                            Base
                            None
                        )
                        [(AttrIntent
                            In
                        )]
                        [(b
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )]
                    []
                    []
                    []
                )
            )
            (InterfaceProc
                (Function
                    interfaceFunc1
                    []
                    [(AttrType
                        TypeReal
                        []
                        ()
                        ()
                        None
                    )]
                    ()
                    ()
                    (TriviaNode
                        []
                        [(EndOfLine)
                        (EndOfLine)]
                    )
                    []
                    []
                    []
                    []
                    []
                    []
                    []
                )
            )
            (InterfaceProc
                (Function
                    interfaceFunc2
                    [(b)]
                    []
                    ()
                    ()
                    ()
                    [(Use
                        []
                        m1
                        []
                        .false.
                        ()
                    )]
                    []
                    []
                    [(Declaration
                        (AttrType
                            TypeType
                            []
                            ()
                            Base
                            None
                        )
                        []
                        [(b
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )
                    (Declaration
                        (AttrType
                            TypeType
                            []
                            ()
                            Base
                            None
                        )
                        []
                        [(interfaceFunc2
                        []
                        []
                        ()
                        ()
                        None
                        ())]
                        ()
                    )]
                    []
                    []
                    []
                )
            )]
        )
        (DerivedType
            Container
            []
            ()
            []
            [(Declaration
                (AttrType
                    TypeProcedure
                    []
                    ()
                    interfaceSub1
                    None
                )
                [(SimpleAttribute
                    AttrNoPass
                )
                (SimpleAttribute
                    AttrPointer
                )]
                [(pp1
                []
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeProcedure
                    []
                    ()
                    interfaceFunc1
                    None
                )
                [(SimpleAttribute
                    AttrNoPass
                )
                (SimpleAttribute
                    AttrPointer
                )]
                [(pp2
                []
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeProcedure
                    []
                    ()
                    interfaceFunc2
                    None
                )
                [(SimpleAttribute
                    AttrNoPass
                )
                (SimpleAttribute
                    AttrPointer
                )]
                [(pp3
                []
                []
                ()
                ()
                None
                ())]
                ()
            )]
            []
        )]
        []
        []
    )
    (Program
        example
        ()
        [(Use
            []
            m1
            []
            .false.
            ()
        )
        (Use
            []
            m2
            []
            .false.
            ()
        )
        (Use
            []
            m3
            []
            .false.
            ()
        )]
        []
        [(Declaration
            (AttrType
                TypeType
                []
                ()
                Container
                None
            )
            []
            [(c1
            []
            []
            ()
            ()
            None
            ())]
            ()
        )]
        [(Associate
            0
            pp1 [(c1
            [])]
            sub1
            ()
        )
        (Associate
            0
            pp2 [(c1
            [])]
            func1
            ()
        )
        (Associate
            0
            pp3 [(c1
            [])]
            func2
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
        )
        (SubroutineCall
            0
            pp1
            [(c1
            [])]
            [(()
            10
            ()
            0)
            (()
            (FuncCallOrArray
                Base
                []
                [(()
                11
                ()
                0)]
                []
                []
                []
            )
            ()
            0)]
            []
            []
            ()
        )
        (Print
            0
            ()
            [(String "func1" ())
            (FuncCallOrArray
                int
                []
                [(()
                (FuncCallOrArray
                    pp2
                    [(c1
                    [])]
                    []
                    []
                    []
                    []
                )
                ()
                0)]
                []
                []
                []
            )]
            ()
        )
        (Print
            0
            ()
            [(String "func2" ())
            (FuncCallOrArray
                pp3
                [(c1
                [])]
                [(()
                (FuncCallOrArray
                    Base
                    []
                    [(()
                    5
                    ()
                    0)]
                    []
                    []
                    []
                )
                ()
                0)]
                []
                []
                []
            )]
            ()
        )]
        []
    )]
)
