123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* Define a C preprocessor symbol that can be used in interface files
- to distinguish between the SWIG language modules. */
- #define SWIG_UFFI
- /* Typespecs for basic types. */
- %typemap(ffitype) char ":char";
- %typemap(ffitype) unsigned char ":unsigned-char";
- %typemap(ffitype) signed char ":char";
- %typemap(ffitype) short ":short";
- %typemap(ffitype) signed short ":short";
- %typemap(ffitype) unsigned short ":unsigned-short";
- %typemap(ffitype) int ":int";
- %typemap(ffitype) signed int ":int";
- %typemap(ffitype) unsigned int ":unsigned-int";
- %typemap(ffitype) long ":long";
- %typemap(ffitype) signed long ":long";
- %typemap(ffitype) unsigned long ":unsigned-long";
- %typemap(ffitype) float ":float";
- %typemap(ffitype) double ":double";
- %typemap(ffitype) char * ":cstring";
- %typemap(ffitype) void * ":pointer-void";
- %typemap(ffitype) void ":void";
- // FIXME: This is guesswork
- typedef long size_t;
- %wrapper %{
- (eval-when (compile eval)
- ;;; You can define your own identifier converter if you want.
- ;;; Use the -identifier-converter command line argument to
- ;;; specify its name.
-
- (defun identifier-convert-null (id &key type)
- (declare (ignore type))
- (read-from-string id))
- (defun identifier-convert-lispify (cname &key type)
- (assert (stringp cname))
- (if (eq type :constant)
- (setf cname (format nil "*~A*" cname)))
- (setf cname (replace-regexp cname "_" "-"))
- (let ((lastcase :other)
- newcase char res)
- (dotimes (n (length cname))
- (setf char (schar cname n))
- (if* (alpha-char-p char)
- then
- (setf newcase (if (upper-case-p char) :upper :lower))
- (when (or (and (eq lastcase :upper) (eq newcase :lower))
- (and (eq lastcase :lower) (eq newcase :upper)))
- ;; case change... add a dash
- (push #\- res)
- (setf newcase :other))
- (push (char-downcase char) res)
- (setf lastcase newcase)
- else
- (push char res)
- (setf lastcase :other)))
- (read-from-string (coerce (nreverse res) 'string))))
- (defun identifier-convert-low-level (cname &key type)
- (assert (stringp cname))
- (if (eq type :constant)
- (setf cname (format nil "+~A+" cname)))
- (setf cname (substitute #\- #\_ cname))
- (if (eq type :operator)
- (setf cname (format nil "%~A" cname)))
- (if (eq type :constant-function)
- nil)
- (read-from-string cname))
- (defmacro swig-defconstant (string value &key (export T))
- (let ((symbol (funcall *swig-identifier-converter* string :type :constant)))
- `(eval-when (compile load eval)
- (uffi:def-constant ,symbol ,value ,export))))
- (defmacro swig-defun (name &rest rest)
- (let ((symbol (funcall *swig-identifier-converter* name :type :operator)))
- `(eval-when (compile load eval)
- (uffi:def-function (,name ,symbol) ,@rest)
- (export (quote ,symbol)))))
- (defmacro swig-def-struct (name &rest fields)
- "Declare a struct object"
- (let ((symbol (funcall *swig-identifier-converter* name :type :type)))
- `(eval-when (compile load eval)
- (uffi:def-struct ,symbol ,@fields)
- (export (quote ,symbol)))))
-
- ) ;; eval-when
- %}
|