File: write_18.f90

package info (click to toggle)
lfortran 0.61.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 61,892 kB
  • sloc: cpp: 181,767; f90: 92,175; python: 17,616; ansic: 10,170; yacc: 2,377; sh: 1,444; fortran: 892; makefile: 38; javascript: 15
file content (37 lines) | stat: -rw-r--r-- 902 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
module write_18_mod

   type :: MyType
      integer :: a, b
   end type MyType

   interface write(formatted)
      procedure :: output
   end interface write(formatted)

contains

   subroutine output(self, unit, iotype, v_list, iostat, iomsg)
      class(MyType), intent(in)    :: self
      integer,       intent(in)    :: unit
      character(*),  intent(in)    :: iotype
      integer,       intent(in)    :: v_list(:)
      integer,       intent(out)   :: iostat
      character(*),  intent(inout) :: iomsg

      ! The iotype must be "DT", not "(dt)" or any other form
      if (iotype /= 'DT') error stop
      if (self%a /= 10) error stop
      if (self%b /= 20) error stop
      iostat = 0
   end subroutine output

end module write_18_mod

program write_18
   use write_18_mod
   type(MyType) :: obj
   obj%a = 10
   obj%b = 20
   write(*, '(dt)') obj
   print *, "ok"
end program write_18