[gambit-list] c-define-type & tag
Stephane Le Cornec
coleste at videotron.ca
Thu May 11 21:06:09 EDT 2006
Assuming the following C code:
struct Point {int x; int y;};
struct PointEx {int x; int y; int z;};
PointEx* getPointEx();
int length(Point*);
And its Scheme-interface:
(c-define-type Point "Point")
(c-define-type Point* (pointer Point))
(c-define-type PointEx "PointEx")
(c-define-type PointEx* (pointer PointEx))
(define get-PointEx (c-lambda () PointEx* "getPointEx"))
(define Point-length (c-lambda (Point*) int "length"))
How do you use type tags properly?
Doing (c-define-type PointEx* (pointer PointEx Point*)) still
generates a warning in the case below.
How do you write these so the C macro casts into Point* and not PointEx*?
(Point-length (get-PointEx))
The workaround is to write:
(define Point-length (c-lambda (Point*) int "___result =
length((Point*)___arg1);"))
but I still want to clarify my understanding of tags and release functions.
BTW, I get many more warnings. I think it is because "int(x) = 3;"
isn't a correct lvalue anymore. It does work because "int" is POD,
but in fact this is a constructor call for any non-POD.
--
Stephane!
coleste at videotron.ca (Stephane Le Cornec)
+------------------- Made with recycled electrons. --------------------+
| #include <disclaimer.h> Kebekkujin desu. |
+---------<http://www.starfiredesign.com/starfire/index.html>----------+
More information about the Gambit-list
mailing list