1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
module program_parsing_02_submodule
implicit none
integer :: complex = 1
logical :: true = .TRUE.
logical :: false = .FALSE.
type :: type
type(type), allocatable :: types(:)
end type
interface
module subroutine function(integer,real)
integer, intent(in) :: integer
integer, intent(out) :: real
end subroutine function
end interface
contains
end module program_parsing_02_submodule
submodule (program_parsing_02_submodule) program_parsing_02_module
contains
module procedure function
real = 2*integer
end procedure function
end submodule program_parsing_02_module
program program_parsing_02
use program_parsing_02_submodule, only: character => complex, subroutine => function, &
then => true, else => false, type
implicit none
integer :: integer, real
type(type) :: types
integer = character
! Thanks to https://stackoverflow.com/a/57015100/1876449
types = type(types=[type(types=[type(), type(), type()]), type()])
block: block
logical :: if
endif: if (then) then
if = then
else if (else) then
if = else
else
if = .not.(else) .and. .not.(if)
endif endif
print *, if
end block block
associate: associate (logical=>character,complex=>real)
call subroutine(logical,complex)
print*, (complex)
end associate associate
end program program_parsing_02
|