Do not inline builtin funcionts out of a lambda
authorDavid Vazquez <davazp@gmail.com>
Thu, 24 Jan 2013 23:36:47 +0000 (23:36 +0000)
committerDavid Vazquez <davazp@gmail.com>
Thu, 24 Jan 2013 23:36:47 +0000 (23:36 +0000)
ecmalisp.lisp

index e121258..02aa16e 100644 (file)
   (defun get-universal-time ()
     (+ (get-unix-time) 2208988800))
 
   (defun get-universal-time ()
     (+ (get-unix-time) 2208988800))
 
-  ;; The `values-list' primitive cannot be inlined out of functions as
-  ;; the VALUES argument is not available there. We declare it
-  ;; NOTINLINE to avoid it.
   (defun values-list (list)
     (values-list list))
   (defun values-list (list)
     (values-list list))
-  (declaim (notinline values-list))
 
   (defun values (&rest args)
     (values-list args)))
 
   (defun values (&rest args)
     (values-list args)))
         "return func;" *newline*)
       (join strs)))
 
         "return func;" *newline*)
       (join strs)))
 
+
+(defvar *compiling-lambda-p* nil)
+
 (define-compilation lambda (lambda-list &rest body)
   (let ((required-arguments (lambda-list-required-arguments lambda-list))
         (optional-arguments (lambda-list-optional-arguments lambda-list))
         (rest-argument (lambda-list-rest-argument lambda-list))
 (define-compilation lambda (lambda-list &rest body)
   (let ((required-arguments (lambda-list-required-arguments lambda-list))
         (optional-arguments (lambda-list-optional-arguments lambda-list))
         (rest-argument (lambda-list-rest-argument lambda-list))
+        (*compiling-lambda-p* t)
         documentation)
     ;; Get the documentation string for the lambda function
     (when (and (stringp (car body))
         documentation)
     ;; Get the documentation string for the lambda function
     (when (and (stringp (car body))
             (apply comp args)))
          ;; Built-in functions
          ((and (assoc name *builtins*)
             (apply comp args)))
          ;; Built-in functions
          ((and (assoc name *builtins*)
-               (not (claimp name 'function 'notinline)))
+               (not (claimp name 'function 'notinline))
+               *compiling-lambda-p*)
           (let ((comp (second (assoc name *builtins*))))
             (apply comp args)))
          (t
           (let ((comp (second (assoc name *builtins*))))
             (apply comp args)))
          (t