Internal procedures as dummy arguments in gfortran?
Daniel Kraft
d@domob.eu
Wed Sep 23 10:55:00 GMT 2009
Paul Richard Thomas wrote:
> To my astonishment, given some of the remarks, changing the error to
> an error on notification works just fine on FC9/i386 :-)
Have you tried this with some kind of more complicated stuff? I'm no
expert on using PROCEDURE and procedures as actual arguments, but
something along:
ABSTRACT INTERFACE
INTEGER FUNCTION myproc ()
IMPLICIT NONE
END FUNCTION myproc
END ABSTRACT INTERFACE
...
IMPLICIT NONE
...
SUBROUTINE sub1 (proc)
PROCEDURE(myproc) :: proc
CALL sub2 (proc)
END SUBROUTINE sub1
SUBROUTINE sub2 (p1, p2)
PROCEDURE(myproc) :: p1, p2
PRINT *, p1 () ! Should be 1
PRINT *, p2 () ! Should be 2
END SUBROUTINE sub2
RECURSIVE SUBROUTINE sub2 (proc)
PROCEDURE(myproc), OPTIONAL :: proc
INTEGER :: a
IF (PRESENT (proc))
a = 2
CALL sub2 (proc, internal_proc)
ELSE
a = 1
CALL sub1 (internal_proc)
END IF
CONTAINS
INTEGER FUNCTION internal_proc ()
internal_proc = a
END FUNCTION internal_proc
END SUBROUTINE sub3
At least I would expect this to behave as indicated by the comments,
though I've not checked with the standard. I'd be very surprised if
that worked just out-of-the-box, too, when disabling the error. But you
could try! If it does, I guess we can claim this F2008 feature
implemented :D
Daniel
--
Done: Arc-Bar-Cav-Ran-Rog-Sam-Tou-Val-Wiz
To go: Hea-Kni-Mon-Pri
More information about the Fortran
mailing list