File: custom_operator_09.f90

package info (click to toggle)
lfortran 0.58.0-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,512 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 33; javascript: 15
file content (38 lines) | stat: -rw-r--r-- 895 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
module custom_operator_09_mod
  implicit none

  type string_t
    character(:), allocatable :: value
  contains
    procedure, private, pass(rhs) :: character_cat_string_t
    generic :: operator(//) => character_cat_string_t

  end type string_t

  contains 

  elemental function character_cat_string_t(lhs, rhs) result(lhs_cat_rhs)
    character(len=*), intent(in) :: lhs
    class(string_t), intent(in) :: rhs 
    type(string_t) :: lhs_cat_rhs

    lhs_cat_rhs % value = lhs // rhs % value
  end function character_cat_string_t

end module custom_operator_09_mod

program custom_operator_09
  use custom_operator_09_mod
  implicit none

  type(string_t) :: name_obj, greeting_obj
  character(len=10) :: prefix

  name_obj%value = "world!"
  prefix = "hello, "

  greeting_obj = prefix // name_obj

  if (greeting_obj%value /= "hello,    world!") error stop

end program custom_operator_09