0.8alpha.0.21:
[sbcl.git] / contrib / sb-grovel / def-to-lisp.lisp
index 3f82a5d..337d5c7 100644 (file)
 (defun c-for-function (stream lisp-name alien-defn)
   (destructuring-bind (c-name &rest definition) alien-defn
     (let ((*print-right-margin* nil))
-      (format stream "printf(\"(declaim (inline ~A))\\n\");~%"
+      (format stream "printf(\"(cl:declaim (cl:inline ~A))\\n\");~%"
               lisp-name)
       (princ "printf(\"(sb-grovel::define-foreign-routine (" stream)
       (princ "\\\"" stream) (princ c-name stream) (princ "\\\" " stream)
       (princ lisp-name stream)
       (princ " ) " stream)
+      (terpri stream)
       (dolist (d definition)
         (write d :length nil
                :right-margin nil :stream stream)
 
 (defun print-c-source (stream headers definitions package-name)
   (let ((*print-right-margin* nil))
+    (format stream "#define SIGNEDP(x) (((x)-1)<0)~%")
+    (format stream "#define SIGNED_(x) (SIGNEDP(x)?\"\":\"un\")~%")
     (loop for i in headers
           do (format stream "#include <~A>~%" i))
     (format stream "main() { ~%
 printf(\"(in-package ~S)\\\n\");~%" package-name)  
-    (format stream "printf(\"(deftype int () '(signed-byte %d))\\\n\",8*sizeof (int));~%")
-    (format stream "printf(\"(deftype char () '(unsigned-byte %d))\\\n\",8*sizeof (char));~%")
-    (format stream "printf(\"(deftype long () '(unsigned-byte %d))\\\n\",8*sizeof (long));~%")
+    (format stream "printf(\"(cl:deftype int () '(%ssigned-byte %d))\\\n\",SIGNED_(int),8*sizeof (int));~%")
+    (format stream "printf(\"(cl:deftype char () '(unsigned-byte %d))\\\n\",SIGNED_(char),8*sizeof (char));~%")
+    (format stream "printf(\"(cl:deftype long () '(unsigned-byte %d))\\\n\",SIGNED_(long),8*sizeof (long));~%")
     (dolist (def definitions)
       (destructuring-bind (type lispname cname &optional doc) def
         (cond ((eq type :integer)
                (format stream
-                       "printf(\"(defconstant ~A %d \\\"~A\\\")\\\n\",~A);~%"
+                       "printf(\"(cl:defconstant ~A %d \\\"~A\\\")\\\n\",~A);~%"
                        lispname doc cname))
+             ((eq type :type)
+              (format stream
+                       "printf(\"(sb-alien:define-alien-type ~A (sb-alien:%ssigned %d))\\\n\",SIGNED_(~A),8*(sizeof(~A)));~%"
+                      lispname cname cname))
               ((eq type :string)
                (format stream
-                       "printf(\"(defvar ~A %S \\\"~A\\\")\\\n\",~A);~%"
+                       "printf(\"(cl:defvar ~A %S \\\"~A\\\")\\\n\",~A);~%"
                      lispname doc cname))
               ((eq type :function)
                (c-for-function stream lispname cname))