lfortran
lfortran copied to clipboard
feat: implement `OverLoadedBoolOp`
module module_operator_overloading_12
implicit none
public :: operator(.and.)
interface operator(.and.)
elemental module function and(lhs, rhs) result(diagnosis)
implicit none
integer, intent(in) :: lhs, rhs
integer :: diagnosis
end function
end interface
contains
elemental module function and(lhs, rhs) result(diagnosis)
implicit none
integer, intent(in) :: lhs, rhs
integer :: diagnosis
diagnosis = lhs + rhs
end function and
end module module_operator_overloading_12
program operator_overloading_12
use module_operator_overloading_12, only: operator(.and.)
implicit none
integer :: a, b, c
a = 5
b = 5
c = a .and. b
print *, "The result of a .and. b is:", c
! if ( c /= 10 ) error stop ! this fails with LFortran, need to introduce OverLoadedBoolOp
end program
(Assignment
(Var 5 c)
(LogicalBinOp
(Var 5 a)
And
(Var 5 b)
(Integer 4)
()
)
()
.false.
)
We should have OverLoadedBoolOp similar to OverloadedBinOp
(OverloadedBinOp
(Var 5 t)
Add
(Var 5 f)
(Logical 4)
()
(FunctionCall
5 bin_add
5 ~add
[((Var 5 t))
((Var 5 f))]
(Integer 4)
()
()
)
)
@Pranavchiku Can i work on this.