Instead of replacing all DEFCONSTANT with DEFPARAMETER, use LET statements to prevent evaluation of the c-inline forms in profile, sockets and serve-event

This commit is contained in:
Juan Jose Garcia Ripoll 2009-06-29 14:41:04 +02:00
parent 19cbcd5a7c
commit 144d25367d
3 changed files with 18 additions and 17 deletions

View file

@ -40,9 +40,10 @@
extern ECL_API size_t GC_get_total_bytes();
")
(defparameter +wrap+ (ffi:c-inline () () :object
"ecl_make_unsigned_integer(~((size_t)0))"
:one-liner t))
(let () ; This prevents compile-time evaluation of the following
(defconstant +wrap+ (ffi:c-inline () () :object
"ecl_make_unsigned_integer(~((size_t)0))"
:one-liner t)))
(defun get-bytes-consed (orig)
(let ((bytes (ffi:c-inline () () :object "ecl_make_unsigned_integer(GC_get_total_bytes())"

View file

@ -44,14 +44,14 @@
"#include <errno.h>"
"#include <sys/select.h>")
(eval-when (:compile-toplevel :load-toplevel)
(eval-when (:compile-toplevel :execute)
(defmacro c-constant (c-name)
`(c-inline () () :int ,c-name :one-liner t))
(defmacro define-c-constants (&rest args)
`(progn
`(let ()
,@(loop
for (lisp-name c-name) on args by #'cddr
collect `(defparameter ,lisp-name (c-inline () () :int ,c-name :one-liner t)))))
(defmacro c-constant (name)
`(c-inline () () :int ,name :one-liner t)))
collect `(defconstant ,lisp-name (c-constant ,c-name))))))
(define-c-constants
+eintr+ "EINTR")

View file

@ -88,14 +88,14 @@
(wsock-initialize)
); #+:wsock
(eval-when (:compile-toplevel :load-toplevel)
(eval-when (:compile-toplevel :execute)
(defmacro c-constant (c-name)
`(c-inline () () :int ,c-name :one-liner t))
(defmacro define-c-constants (&rest args)
`(progn
`(let () ; Prevents evaluation of constant value form
,@(loop
for (lisp-name c-name) on args by #'cddr
collect `(defparameter ,lisp-name (c-inline () () :int ,c-name :one-liner t)))))
(defmacro c-constant (name)
`(c-inline () () :int ,name :one-liner t)))
collect `(defconstant ,lisp-name (c-constant ,c-name))))))
#+:wsock
(Clines
@ -1253,8 +1253,8 @@ also known as unix-domain sockets."))
(:documentation "Common base class of socket related conditions."))
(defmacro define-socket-condition (symbol name)
`(progn
(defparameter ,symbol (c-constant ,(symbol-name symbol)))
`(let () ; Prevents evaluation of constant value at compilation time
(defconstant ,symbol (c-constant ,(symbol-name symbol)))
(define-condition ,name (socket-error)
((symbol :reader socket-error-symbol :initform (quote ,symbol))))
(export ',name)
@ -1335,8 +1335,8 @@ GET-NAME-SERVICE-ERRNO")
(get-name-service-error-message num))))))
(defmacro define-name-service-condition (symbol name)
`(progn
(defparameter ,symbol (c-constant ,(symbol-name symbol)))
`(let ()
(defconstant ,symbol (c-constant ,(symbol-name symbol)))
(define-condition ,name (name-service-error)
((symbol :reader name-service-error-symbol :initform (quote ,symbol))))
(push (cons ,symbol (quote ,name)) *conditions-for-name-service-errno*)