From ebdd135d6281e0758d2641e005fbff4253de5749 Mon Sep 17 00:00:00 2001
From: Joe Groff <arcata@gmail.com>
Date: Mon, 9 Feb 2009 16:36:46 -0600
Subject: [PATCH] gfortran returns float for REAL functions, not double like
 f2c

---
 basis/alien/fortran/fortran-tests.factor | 6 +++---
 basis/alien/fortran/fortran.factor       | 6 ++++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/basis/alien/fortran/fortran-tests.factor b/basis/alien/fortran/fortran-tests.factor
index 9b618ef513..1b2ffda4a9 100644
--- a/basis/alien/fortran/fortran-tests.factor
+++ b/basis/alien/fortran/fortran-tests.factor
@@ -116,7 +116,7 @@ RECORD: FORTRAN_TEST_RECORD
 [ "int" { } ]
 [ "logical" fortran-ret-type>c-type ] unit-test
 
-[ "double" { } ]
+[ "float" { } ]
 [ "real" fortran-ret-type>c-type ] unit-test
 
 [ "double" { } ]
@@ -136,7 +136,7 @@ RECORD: FORTRAN_TEST_RECORD
 
 ! fortran-sig>c-sig
 
-[ "double" { "int*" "char*" "float*" "double*" "long" } ]
+[ "float" { "int*" "char*" "float*" "double*" "long" } ]
 [ "real" { "integer" "character*17" "real" "real*8" } fortran-sig>c-sig ]
 unit-test
 
@@ -213,7 +213,7 @@ unit-test
         [ { [ drop ] } spread ]
     } 1 ncleave
     ! [fortran-invoke]
-    [ "double" "funpack" "fun_times__" { "float*" } alien-invoke ]
+    [ "float" "funpack" "fun_times__" { "float*" } alien-invoke ]
     1 nkeep
     ! [fortran-results>]
     shuffle( reta aa -- reta aa ) 
diff --git a/basis/alien/fortran/fortran.factor b/basis/alien/fortran/fortran.factor
index c7688fbe3a..9327c7b02c 100644
--- a/basis/alien/fortran/fortran.factor
+++ b/basis/alien/fortran/fortran.factor
@@ -155,7 +155,9 @@ GENERIC: (fortran-ret-type>c-type) ( type -- c-type )
 
 M: f (fortran-ret-type>c-type) drop "void" ;
 M: fortran-type (fortran-ret-type>c-type) (fortran-type>c-type) ;
-M: real-type (fortran-ret-type>c-type) drop "double" ;
+! XXX F2C claims to return double for REAL typed functions
+! XXX OSX Accelerate.framework uses float 
+! M: real-type (fortran-ret-type>c-type) drop "double" ;
 
 : suffix! ( seq   elt   -- seq   ) over push     ; inline
 : append! ( seq-a seq-b -- seq-a ) over push-all ; inline
@@ -374,7 +376,7 @@ MACRO: fortran-invoke ( return library function parameters -- )
 
 :: define-fortran-function ( return library function parameters -- )
     function create-in dup reset-generic 
-    return library function parameters return parse-arglist
+    return library function parameters return [ "void" ] unless* parse-arglist
     [ \ fortran-invoke 5 [ ] nsequence ] dip define-declared ;
 
 : SUBROUTINE: