[asdf-devel] Possible problem with check-compile-results

Robert Goldman rpgoldman at sift.net
Fri Aug 23 18:40:44 UTC 2013


I would be grateful if someone could confirm this for me.

I see this in quickloading BABEL on a relatively recent SBCL
1.1.7.112.master.104-d62278d

Babel crashes on compiling:

caught ERROR:
;   (during macroexpansion of (DEFINE-UCS :UCS-2LE ...))
;   #:~A-CODE-POINT-COUNTER fell through ETYPECASE expression.
;   Wanted one of (STRING SIMPLE-STRING).

; in: DEFINE-UCS :UCS-2BE
;     (BABEL-ENCODINGS::DEFINE-UCS :UCS-2BE 2 :BE 65536)

After that, some logic in UIOP'S CHECK-LISP-COMPILE-RESULTS goes
pear-shaped.

I believe the problem starts here:

(with-upgradability ()
  (defmacro define-convenience-action-methods
      (function formals &key if-no-operation if-no-component
operation-initargs)
    (let* ((rest (gensym "REST"))
           (found (gensym "FOUND"))
           (keyp (equal (last formals) '(&key)))
           (formals-no-key (if keyp (butlast formals) formals))
           (len (length formals-no-key))
           (operation 'operation)
           (component 'component)
           (opix (position operation formals))
           (coix (position component formals))
           (prefix (subseq formals 0 opix))
           (suffix (subseq formals (1+ coix) len))
           (more-args (when keyp `(&rest ,rest &key &allow-other-keys))))
      (assert (and (integerp opix) (integerp coix) (= coix (1+ opix))))
      (flet ((next-method (o c)
               (if keyp
                   `(apply ',function , at prefix ,o ,c , at suffix ,rest)
                   `(,function , at prefix ,o ,c , at suffix))))
        `(progn
           (defmethod ,function (, at prefix (,operation symbol) component
, at suffix , at more-args)
             (if ,operation
                 ,(next-method
                   (if operation-initargs ;backward-compatibility with
ASDF1's operate. Yuck.
                       `(apply 'make-operation ,operation
:original-initargs ,rest ,rest)
                       `(make-operation ,operation))
                   `(or (find-component () ,component) ,if-no-component))
                 ,if-no-operation))
           (defmethod ,function (, at prefix (,operation operation)
,component , at suffix , at more-args)
             (if (typep ,component 'component)
                 (error "No defined method for ~S on
~/asdf-action:format-action/"
                        ',function (cons ,operation ,component))
                 (if-let (,found (find-component () ,component))
                    ,(next-method operation found)
                    ,if-no-component))))))))


The ERROR created here, with its embedded funcall to
ASDF-ACTION:FORMAT-ACTION seems to do something bad when the format
string is repackaged in UIOP/LISP-BUILD:CHECK-LISP-COMPILE-RESULTS:

    (unless output
      (error 'compile-file-error :context-format context-format
:context-arguments context-arguments))

possibly in this REPORT-FUNCTION:

    (:report (lambda (c s)
               (format s (compatfmt "~@<~A~@[ while ~?~]~@:>")
                       (or (compile-condition-description c) (type-of c))
                       (compile-condition-context-format c)
                       (compile-condition-context-arguments c)))))

I am not particularly adept in the SBCL debugger wrapped by SLDB,
especially where one of these
error-wrapped-in-error-wrapped-in-ASDF-wrapped-in-quicklisp contexts, so
I would be grateful if someone would  try to replicate this (try a clean
QL install of BABEL).

Note that the error comes with SBCL's built-in ASDF, not bleeding-edge ASDF.

Thanks!
r

-- 
Robert P. Goldman
Principal Scientist
Smart Information Flow Technologies (d/b/a SIFT, LLC)

211 N. First St., Suite 300
Minneapolis, MN 55401

Voice:    (612) 326-3934
Email:    rpgoldman at SIFT.net




More information about the asdf-devel mailing list