File: class_36.f90

package info (click to toggle)
lfortran 0.60.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,412 kB
  • sloc: cpp: 173,406; f90: 80,491; python: 17,586; ansic: 9,610; yacc: 2,356; sh: 1,401; fortran: 895; makefile: 37; javascript: 15
file content (63 lines) | stat: -rw-r--r-- 1,457 bytes parent folder | download
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
59
60
61
62
63
module class_36_module

   type :: SomeType
      integer :: x = 2
   contains
      procedure, pass   :: subroutine_pass
      procedure, nopass :: subroutine_nopass

      procedure, pass :: function_pass
      procedure, nopass :: function_nopass
   end type SomeType

contains

   subroutine subroutine_pass(self, var)
      class(SomeType), intent(in)  :: self
      real(8), intent(out) :: var

      print *, "var inside subroutine_pass: ", var
      if (var /= 16.33) error stop

      var = 32.33
      call self%subroutine_nopass(var)
   end subroutine subroutine_pass

   subroutine subroutine_nopass(var)
      real(8), intent(out) :: var

      print *, "var inside subroutine_nopass: ", var
      if (var /= 32.33) error stop

      var = 64.33
   end subroutine subroutine_nopass

   integer function function_pass (self)
      class(SomeType) :: self
      function_pass = self%x
   end function function_pass

   integer function function_nopass (var)
      integer :: var
      function_nopass = var
   end function function_nopass

end module class_36_module

program class_36
    use class_36_module
    implicit none

    type(SomeType) :: my_var
    real(8) :: r

    r = 16.33

    call my_var%subroutine_pass(r)

    print *, "r after subroutine call: ", r
    if (r /= 64.33) error stop

    print *, "return from function_pass: ",  function_pass(my_var)
    print *, "return from function_nopass: ", function_nopass(42)
end program