(j3.2006) Interp request for GENERIC

Tom Clune Thomas.L.Clune
Fri Mar 4 00:19:54 EST 2011


Jim,


On Mar 3, 2011, at 11:13 PM, Jim Xia wrote:

>
> There is a typo in your code:        procedure :: base_r8 !  
> shouldn't this be base_r?

Yes - sorry I cleaned up the example in haste.   The one my colleague  
created used "real*8", and I hated to submit a non-standard conforming  
example.   I should have checked it more thoroughly.  Sorry about that.

>
> A generic call is resolved to a specific binding name at compile  
> time and bound to a specific procedure at runtime.  So bar%proc(i)  
> and bar%proc(x) are resolved to as if calling bar%base_i(i) and bar 
> %base_r(x) respectively at compile time.  The actual procedures are  
> invoked are dependent on the dynamic type of the designator -- in  
> this case a Child type.  So the actual procedures called are child_i  
> and child_r.  The intuitive sense is correct :-)

Thanks for the confirmation.   I've already submitted a bug report to  
the relevant unnamed vendor.

Cheers,

- Tom


>
> Cheers,
>
> Jim Xia
>
> Compiler Testing, X10 & XLF
> IBM Toronto Lab at 8200 Warden Ave,
> Markham, On, L6G 1C7
> 905-413-3444
>
>
>
> From:	Tom Clune <Thomas.L.Clune at nasa.gov>
> To:	fortran standards email list for J3 <j3 at j3-fortran.org>
> Date:	03/03/2011 10:54 PM
> Subject:	(j3.2006) Interp request for GENERIC
>
>
>
>
> In the sample code below there are two derived types defined - Base
> and Child, which EXTEND's Base.   Base defines a GENERIC with two  
> type-
> bound procedures, and Child overrides those type bound procedures.  On
> two compilers, when the generic is invoked on an object of type child,
> the Child's type-bound procedures are invoked, while one other the
> parent's are invoked.   The former makes more intuitive sense.   The
> statements on the subject in the extant F2003 books left me more
> confused on this issue.
>
> module ClassMod
>    implicit none
>
>    type Base
>    contains
>       procedure :: base_i
>       procedure :: base_r8
>       generic :: proc => base_i, base_r
>    end type Base
>
>    type, extends(Base) :: Child
>       integer :: i
>       real :: x
>    contains
>       procedure :: base_i  => child_i
>       procedure :: base_r => child_r
>    end type Child
>
> contains
>
>    subroutine base_i(this,i)
>       class(Base) :: this
>       integer :: i
>       write(6,*) 'executed base_i'
>    end subroutine base_i
>
>    subroutine base_r(this,x)
>       class(Base) :: this
>       real :: x
>       write(6,*) 'executed base_r'
>    end subroutine base_r
>
>    subroutine child_i(this,i)
>       class(Child) :: this
>       integer :: i
>       this%i = i
>       write(6,*) 'executed child_i'
>    end subroutine child_i
>
>    subroutine child_r(this,x)
>       class(Child) :: this
>       real :: x
>       this%x = x
>       write(6,*) 'executed child_r'
>    end subroutine child_r
>
> end module ClassMod
>
> program tryit
>    use ClassMod
>    implicit none
>    integer :: i
>    real :: x
>    type(Base) :: foo
>    type(Child) :: bar
>    i = 5
>    x = 20e0
>    write(6,*) 'calling Base:'
>    call foo%proc(i)
>    call foo%proc(x)
>    write(6,*) 'calling actual procedures:'
>    call bar%proc(i)
>    call bar%proc(x)
> end program tryit
>
>
>
> Thanks in advance,
>
> - Tom
>
> Thomas Clune
> Software Integration and Visualization Office
> NASA GSFC (610.3)
> 301-286-4635 (W)                 301-286-1775 (F)
> <Thomas.L.Clune at nasa.gov>
>
>
>
>
>
>
> _______________________________________________
> J3 mailing list
> J3 at j3-fortran.org
> http://j3-fortran.org/mailman/listinfo/j3
>
>
> <ATT00001.txt>

Thomas Clune					
Software Integration and Visualization Office
NASA GSFC (610.3)
301-286-4635 (W)	301-286-1775 (F)
<Thomas.L.Clune at nasa.gov>






-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://j3-fortran.org/pipermail/j3/attachments/20110304/eb341195/attachment-0001.htm>



More information about the J3 mailing list