Hi Bill,
Yes, I realized F2003 had procedure pointers, but I didn't realize
that many compilers already support them.
One reason I was interested was to see if I could implement a OO
runtime in F90; if I already have F2003, I don't need to implement my
own OO.
Thanks for the pointer ;-)
Drew
On 17/12/2005, at 12:30 AM, Bill Long wrote:
> On many (most modern) architectures, trying to stuff a pointer
> into an integer*4 will not work. But it is also not necessary. A
> simpler version of your program is
>
>
> subroutine MyRoutine()
> implicit none
> print *, "In routine"
> end subroutine
>
> program test
> implicit none
> procedure(),pointer :: ptr
> external :: MyRoutine
> ptr => MyRoutine
> call ptr()
> end
>
> Procedure pointers were put into Fortran just so you would not have
> to play the games below. Procedure pointers are a feature of the
> latest standard, but I suspect IBM has them implemented. Customers
> ranked procedure pointers pretty high on the implementation
> priority lists.
>
> Cheers,
> Bill
>
>
> Drew Mccormack wrote:
>
>> I have just been playing around with the 'external' keyword,
>> trying to 'trick' fortran into storing a pointer to a subroutine
>> for me. Alas, my XLF compiler tells me at run-time that I have
>> issued an illegal instruction. Can anyone explain to me why the
>> following doesn't work?
>>
>>
>> subroutine MyRoutine()
>> implicit none
>> print *,'In routine'
>> end subroutine
>>
>> subroutine Message(routine)
>> implicit none
>> external routine
>> call routine()
>> end subroutine
>>
>> subroutine saveOrMessageProcPointer(ptr, savePtr)
>> implicit none
>> integer*4 :: ptr
>> logical :: savePtr
>> integer*4, save :: savedPtr
>> if ( savePtr) then
>> savedPtr = ptr
>> else
>> call Message(savedPtr)
>> endif
>> end subroutine
>>
>> program Test
>> implicit none
>> external MyRoutine
>> call saveOrMessageProcPointer(MyRoutine, .true.)
>> call saveOrMessageProcPointer(MyRoutine, .false.)
>> end program
>>
>>
>> Regards,
>> Drew
>>
>> ---------------------------------------------------------
>> Drew McCormack
>>
>> www.maniacalextent.com
>
>
> --
> Bill Long [log in to unmask]
> Fortran Technical Support & voice: 651-605-9024
> Bioinformatics Software Development fax: 651-605-9142
> Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120
>
>
|