File: class_68.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 (41 lines) | stat: -rw-r--r-- 929 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
module class_68_mod
  implicit none
  type, abstract :: toml_lexer
  contains
    procedure(func_interface), deferred :: f   ! deferred binding
  end type toml_lexer

  abstract interface
     subroutine func_interface(self)
       import :: toml_lexer
       class(toml_lexer), intent(inout) :: self
     end subroutine func_interface
  end interface

end module

module class_68_mod2 
    use class_68_mod
 type, extends(toml_lexer) :: mocked_lexer
    integer :: key
  contains
    procedure :: f => f_mock
  end type
    contains 
  subroutine f_mock(self)
    class(mocked_lexer), intent(inout) :: self
    print *, "Mock function called"
    self%key = 100
  end subroutine f_mock
  subroutine temp(lex)
    class(toml_lexer), intent(inout) :: lex
    call lex%f()
  end subroutine
end module

program class_68
    use class_68_mod2
    type(mocked_lexer) :: x
    call temp(x)
    if (x%key /= 100) error stop
end program