File: class_65.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 (54 lines) | stat: -rw-r--r-- 1,051 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
44
45
46
47
48
49
50
51
52
53
54
module class_65_mod
  implicit none

  type :: base_t
  end type

  type, extends(base_t) :: extended_t
    integer :: key
  end type

  type :: temp_t
    type(extended_t) :: child(2)
  end type


contains 

subroutine call_describe(obj, check)
    class(base_t), intent(in) :: obj
    integer, intent(inout) :: check
    class(base_t), allocatable :: obj_tmp
    allocate(obj_tmp)
    obj_tmp = obj
    select type (obj_tmp)
      type is (base_t)
        check = check + 3
      type is (extended_t)
        check = check + 2
        if (obj_tmp%key /= 10) error stop
      class default
        error stop
    end select
  end subroutine

end module class_65_mod

program class_65
  use class_65_mod

  interface describe
    module procedure :: call_describe
  end interface

  type(temp_t) :: x
  type(base_t) :: y
  integer :: count
  count = 0
  x%child(1) = extended_t(10)
  x%child(2) = extended_t(20)
  call describe(x%child(1), count)
  if (count /= 2) error stop
  call describe(y, count)
  if (count /= 5) error stop
end program class_65