[Ecls-list] (and defconstant ffi:c-inline)

Matthew Mondor mm_lists at pulsar-zone.net
Fri Apr 2 05:40:18 UTC 2010


On Thu, 1 Apr 2010 23:29:37 -0400
Matthew Mondor <mm_lists at pulsar-zone.net> wrote:

> Any suggestion or trick which would allow to define CL constant
> litterals deriving from a C constant, which would not have to lookup
> globals, so that I could fix my DEFINE-C-CONSTANTS macro to use it?
> I admit being relatively new to the various CL environments and could
> very well be missing something obvious.

I guess that another option is to use something like

(defmacro with-c-constants (constants &body body)
  `(symbol-macrolet
       ,(mapcar
         #'(lambda (c)
             (destructuring-bind (symbol constant) c
               `(,symbol
                 (ffi:c-inline () () :int ,constant :one-liner t))))
         constants)
     , at body))

(defun bar ()
  (with-c-constants ((o-rdonly "O_RDONLY")
                     (o-creat "O_CREAT"))
    (format t "~A ~A~%" o-rdonly o-creat)))

And optionally provide a macro like WITH-FCNTL-CONSTANTS and other
categories using predefined lists, although unfortunately this would
introduce some extra redundancy...
-- 
Matt




More information about the ecl-devel mailing list