alien.fortran: add a bad-fortran-abi object
Use this to represent an invalid Fortran library ABI with information about how to fix it. Modified from patch by Joe Groff.db4
parent
9ddef268e1
commit
36efd95d12
|
@ -12,13 +12,8 @@ IN: alien.fortran
|
||||||
|
|
||||||
SINGLETONS: f2c-abi g95-abi gfortran-abi intel-unix-abi intel-windows-abi ;
|
SINGLETONS: f2c-abi g95-abi gfortran-abi intel-unix-abi intel-windows-abi ;
|
||||||
|
|
||||||
<<
|
TUPLE: bad-fortran-abi detail ;
|
||||||
: add-f2c-libraries ( -- )
|
C: <bad-fortran-abi> bad-fortran-abi
|
||||||
"I77" "libI77.so" cdecl add-library
|
|
||||||
"F77" "libF77.so" cdecl add-library ;
|
|
||||||
|
|
||||||
! os netbsd? [ add-f2c-libraries ] when
|
|
||||||
>>
|
|
||||||
|
|
||||||
: alien>nstring ( alien len encoding -- string )
|
: alien>nstring ( alien len encoding -- string )
|
||||||
[ memory>byte-array ] dip decode ;
|
[ memory>byte-array ] dip decode ;
|
||||||
|
@ -43,6 +38,7 @@ library-fortran-abis [ H{ } clone ] initialize
|
||||||
[ "__" append ] [ "_" append ] if ;
|
[ "__" append ] [ "_" append ] if ;
|
||||||
|
|
||||||
HOOK: fortran-c-abi fortran-abi ( -- abi )
|
HOOK: fortran-c-abi fortran-abi ( -- abi )
|
||||||
|
M: bad-fortran-abi fortran-c-abi cdecl ;
|
||||||
M: f2c-abi fortran-c-abi cdecl ;
|
M: f2c-abi fortran-c-abi cdecl ;
|
||||||
M: g95-abi fortran-c-abi cdecl ;
|
M: g95-abi fortran-c-abi cdecl ;
|
||||||
M: gfortran-abi fortran-c-abi cdecl ;
|
M: gfortran-abi fortran-c-abi cdecl ;
|
||||||
|
@ -415,7 +411,7 @@ PRIVATE>
|
||||||
: set-fortran-abi ( library -- )
|
: set-fortran-abi ( library -- )
|
||||||
library-fortran-abis get-global at fortran-abi set ;
|
library-fortran-abis get-global at fortran-abi set ;
|
||||||
|
|
||||||
: (fortran-invoke) ( return library function parameters -- quot )
|
: ((fortran-invoke)) ( return library function parameters -- quot )
|
||||||
{
|
{
|
||||||
[ 2nip [<fortran-result>] ]
|
[ 2nip [<fortran-result>] ]
|
||||||
[ nip nip nip [fortran-args>c-args] ]
|
[ nip nip nip [fortran-args>c-args] ]
|
||||||
|
@ -423,6 +419,11 @@ PRIVATE>
|
||||||
[ 2nip [fortran-results>] ]
|
[ 2nip [fortran-results>] ]
|
||||||
} 4 ncleave 4 nappend ;
|
} 4 ncleave 4 nappend ;
|
||||||
|
|
||||||
|
:: (fortran-invoke) ( return library function parameters -- quot )
|
||||||
|
library library-fortran-abis get-global at dup bad-fortran-abi?
|
||||||
|
[ '[ _ throw ] ]
|
||||||
|
[ drop return library function parameters ((fortran-invoke)) ] if ;
|
||||||
|
|
||||||
MACRO: fortran-invoke ( return library function parameters -- )
|
MACRO: fortran-invoke ( return library function parameters -- )
|
||||||
{ [ 2drop nip set-fortran-abi ] [ (fortran-invoke) ] } 4 ncleave ;
|
{ [ 2drop nip set-fortran-abi ] [ (fortran-invoke) ] } 4 ncleave ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue