mirror of
https://github.com/janet-lang/janet
synced 2025-10-30 15:13:03 +00:00
Beginning of struct support.
TODO: - struct return values - support for unions in signatures - more testing - complex types - packed structs - writing structs to buffers (useful and we have most of the machinery).
This commit is contained in:
21
ffitest/so.c
21
ffitest/so.c
@@ -35,3 +35,24 @@ double double_lots(
|
||||
double float_fn(float x, float y, float z) {
|
||||
return (x + y) * z;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
int a;
|
||||
int b;
|
||||
} intint;
|
||||
|
||||
typedef struct {
|
||||
int a;
|
||||
int b;
|
||||
int c;
|
||||
} intintint;
|
||||
|
||||
int intint_fn(double x, intint ii) {
|
||||
printf("double: %g\n", x);
|
||||
return ii.a + ii.b;
|
||||
}
|
||||
|
||||
int intintint_fn(double x, intintint iii) {
|
||||
printf("double: %g\n", x);
|
||||
return iii.a + iii.b + iii.c;
|
||||
}
|
||||
|
||||
@@ -36,10 +36,32 @@
|
||||
[x y z]
|
||||
(native-call float-fn-pointer float-fn-sig x y z))
|
||||
|
||||
(def intint-fn-sig (native-signature :default :int :double [:int :int]))
|
||||
(def intint-fn-pointer (native-lookup module "intint_fn"))
|
||||
(defn intint-fn
|
||||
[x ii]
|
||||
(native-call intint-fn-pointer intint-fn-sig x ii))
|
||||
|
||||
|
||||
(def intintint (native-struct :int :int :int))
|
||||
(def intintint-fn-sig (native-signature :default :int :double intintint))
|
||||
(def intintint-fn-pointer (native-lookup module "intintint_fn"))
|
||||
(defn intintint-fn
|
||||
[x iii]
|
||||
(native-call intintint-fn-pointer intintint-fn-sig x iii))
|
||||
|
||||
#
|
||||
# Call functions
|
||||
#
|
||||
|
||||
(pp (int-fn 10 20))
|
||||
(pp (double-fn 1.5 2.5 3.5))
|
||||
(pp (double-many 1 2 3 4 5 6))
|
||||
(pp (double-lots 1 2 3 4 5 6 7 8 9 10))
|
||||
(pp (float-fn 8 4 17))
|
||||
(pp (intint-fn 123.456 [10 20]))
|
||||
(pp (intintint-fn 123.456 [10 20 30]))
|
||||
|
||||
(assert (= 60 (int-fn 10 20)))
|
||||
(assert (= 42 (double-fn 1.5 2.5 3.5)))
|
||||
(assert (= 21 (double-many 1 2 3 4 5 6)))
|
||||
|
||||
Reference in New Issue
Block a user