| ! The program units in this file consist of a |
| ! module/submodule tree represented by the following |
| ! graph: |
| ! |
| ! parent |
| ! | |
| ! / \ |
| ! / \ |
| ! child sibling |
| ! | |
| ! grandchild |
| ! |
| ! where the parent node is a module and all other |
| ! nodes are submodules. |
| |
| module parent |
| implicit none |
| |
| interface |
| |
| ! Test Fortran 2008 "module function" syntax |
| module function child_function() result(child_stuff) |
| logical :: child_stuff |
| end function |
| |
| ! Test Fortran 2008 "module subroutine" syntax |
| module subroutine grandchild_subroutine() |
| end subroutine |
| |
| end interface |
| |
| end module parent |
| |
| ! Test the notation for a 1st-generation direct |
| ! descendant of a parent module |
| submodule ( parent ) child |
| implicit none |
| contains |
| module function child_function() result(child_stuff) |
| logical :: child_stuff |
| child_stuff=.true. |
| end function |
| end submodule child |
| |
| ! Empty submodule for checking disambiguation of |
| ! nodes at the same vertical level in the tree |
| submodule ( parent ) sibling |
| end submodule sibling |
| |
| ! Test the notation for an Nth-generation descendant |
| ! for N>1, which necessitates the colon. |
| submodule ( parent : child ) grandchild |
| contains |
| module subroutine grandchild_subroutine() |
| print *,"Test passed." |
| end subroutine |
| end submodule grandchild |