mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2025-12-15 15:21:03 -08:00
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:
parent
19cbcd5a7c
commit
144d25367d
3 changed files with 18 additions and 17 deletions
|
|
@ -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())"
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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*)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue