You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I hesitated to add this as an issue at GitHub.com (feature request), I
put it here first.
FriCAS supports what I would call preliminary support of FFI stuff via
a set of CL macros. I would like to suggest adding more types in this
regard. For example, it could be possible to add double-float arrays,
boolean and the like. I modified, and well tested, the following for
example. For information, only for SBCL and Clozure CL, but adding
those additional types for other CL implementations should be easy I
think:
diff --git a/home/greg/Tmp/fricas/src/lisp/fricas-lisp.lisp
b/src/lisp/fricas-lisp.lisp
index 357aa063..8de10db7 100644
--- a/home/greg/Tmp/fricas/src/lisp/fricas-lisp.lisp
+++ b/src/lisp/fricas-lisp.lisp
@@ -363,10 +363,13 @@ with this hack and will try to convince the GCL
crowd to fix this.
)
(defvar *c_type_as_string* '(
+ (void "void")
+ (bool "bool")
(int "int")
(c-string "char *")
(double "double")
(char-* "char *")
+ (double-* "double *")
))
(defun c_type_as_string(c_type) (nth 1 (assoc c_type *c_type_as_string*)))
@@ -465,10 +468,13 @@ with this hack and will try to convince the GCL
crowd to fix this.
(eval-when (:compile-toplevel :load-toplevel :execute)
(setf *c-type-to-ffi* '(
- (int SB-ALIEN::int)
- (c-string SB-ALIEN::c-string)
- (double SB-ALIEN::double)
- (char-* (sb-alien:* sb-alien:char))
+ (void sb-alien::void)
+ (bool (sb-alien::boolean 8))
+ (int sb-alien::int)
+ (c-string (sb-alien::c-string))
+ (double sb-alien::double-float)
+ (char-* (sb-alien:* sb-alien:char))
+ (double-* (sb-alien:* sb-alien:double-float))
))
(defun c-args-to-sbcl (arguments)
@@ -490,10 +496,13 @@ with this hack and will try to convince the GCL
crowd to fix this.
(eval-when (:compile-toplevel :load-toplevel :execute)
(setf *c-type-to-ffi* '(
+ (void :void)
+ (bool :signed-byte)
(int :int)
(c-string :address)
(double :double-float)
(char-* :address)
+ (double-* :address)
))
(defun c-args-to-openmcl (arguments)
@@ -518,7 +527,7 @@ with this hack and will try to convince the GCL
crowd to fix this.
`(ccl::external-call ,c-name ,@fargs ,l-ret))
(fun-body
(if strs
- `(ccl::with-cstrs ,strs ,call-body)
+ `(ccl::with-encoded-cstrs :utf-8 ,strs ,call-body)
call-body)))
`(defun ,name ,largs ,fun-body))))
@@ -532,7 +541,7 @@ with this hack and will try to convince the GCL
crowd to fix this.
(setf *c-type-to-ffi* '(
(int :int)
- (c-string :cstring )
+ (c-string :cstring)
(double :double)
(char-* :pointer-void)
The patch file is attached. One remark, I added UTF-8 to Clozure CL
encoded-cstrs in such a way some non-ascii characters can be used in
the Spad source code, SBCL has as default external format UTF-8. It
can be modified via sb-ext:default-external-format and
sb-ext:default-c-string-external-format. This is not an intent to
fully support UTF-8 in Spad code, it just allows, for example, to use:
x quo y == ibinfunc("÷", x, y)
instead of (commented here)
-- x quo y == ibinfunc("div", x, y)
x rem y == ibinfunc("%", x, y)
where ibinfunc is a macro that expands binary functions operating on integers.
Hello,
I hesitated to add this as an issue at GitHub.com (feature request), I
put it here first.
FriCAS supports what I would call preliminary support of FFI stuff via
a set of CL macros. I would like to suggest adding more types in this
regard. For example, it could be possible to add double-float arrays,
boolean and the like. I modified, and well tested, the following for
example. For information, only for SBCL and Clozure CL, but adding
those additional types for other CL implementations should be easy I
think:
The patch file is attached. One remark, I added UTF-8 to Clozure CL
encoded-cstrs in such a way some non-ascii characters can be used in
the Spad source code, SBCL has as default external format UTF-8. It
can be modified via sb-ext:default-external-format and
sb-ext:default-c-string-external-format. This is not an intent to
fully support UTF-8 in Spad code, it just allows, for example, to use:
where ibinfunc is a macro that expands binary functions operating on integers.
Regards,
Greg
fricas.patch
The text was updated successfully, but these errors were encountered: