File: associate_08.f90

package info (click to toggle)
lfortran 0.59.0-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 56,736 kB
  • sloc: cpp: 168,052; f90: 74,272; python: 17,537; ansic: 7,705; yacc: 2,345; sh: 1,334; fortran: 895; makefile: 37; javascript: 15
file content (43 lines) | stat: -rw-r--r-- 1,120 bytes parent folder | download | duplicates (3)
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
module associate_08_module_1
    implicit none

    type t_1
        integer :: i
    end type t_1

    type t_2
        type(t_1), pointer :: type_2(:)
    end type t_2
contains
    subroutine sub_1(type_1, i)
        class(t_2), intent(inout) :: type_1
        integer, intent(in) :: i
        allocate(type_1%type_2(1))
        associate(target=>type_1%type_2(1)%i)
            target = i
        end associate
    end subroutine sub_1

    subroutine sub_2(progress)
        class(t_2), intent(inout), allocatable :: progress(:)
        allocate(progress(1))
        allocate(progress(1)%type_2(1))
        associate(target => progress(1))
            target%type_2(1)%i = 345
        end associate
    end subroutine sub_2
end module

program associate2
    use associate_08_module_1
    implicit none
    type(t_2) :: type_1
    class(t_2), allocatable :: t_2_array(:)
    call sub_1(type_1, 123)
    if (type_1%type_2(1)%i /= 123) error stop
    print *, type_1%type_2(1)%i

    ! TODO: Fix when implementing class arrays
    ! call sub_2(t_2_array)
    ! print *, t_2_array(1)%type_2(1)%i
end program associate2