If it looks like a bug and smells like a bug .....

"Paul Werkowski (as pw at snoopy dot qozzy dot com)" <[email protected]>
Newsgroups gmane.lisp.lispworks.general
Message-ID <[email protected]>
 From LispWorks CLIM 2.0 User Guide:

invoke-with-output-to-output-record Generic Function

(invoke-with-output-to-output-record
  stream continuation record-type &rest init-args &key)
......
continuation is a function of two arguments, the stream and the output 
record; it has dynamic extent. record-type is the type of output record 
to create. init-args are CLOS initialization arguments that are passed 
to make-instance when the new output record is created.

CLTL page 76 deals with parsing lambda-lists. The &rest var is a list of 
everything else up to the ending #\). Keywords are not recognized as 
such until after the &key marker.

Consider this example:

(defclass record ()
   ((s1 :initarg :x)
    (s2 :initarg :y)))

(defun some-fcn (record-type &rest initargs &key foo)
   (print initargs)
   (apply 'make-instance record-type initargs))

(defun test1 ()
   (some-fcn  'record :x 1 :y 2))

 > (test1)
Error: Unexpected keyword :X which is not one of (:FOO).
   1 (continue) Ignore the unknown keyword :X.
   2 (abort) Return to top loop level 0.

This is exactly the form of error message  generated by  nested macros 
deep in the weeds of McCLIM table formatting  code.

This can be dealt with (sort of) by something like this:

(defun test2 ()
   (handler-bind ((conditions:unknown-keyword-error
                   #'(lambda(c)
                       (invoke-restart 'continue))))
     (some-fcn  'record :x 1 :y 2)))

 > (test2)
(:X 1 :Y 2)
#<RECORD 401000C663>


but not very useful in a large software system.

Same issue with LWW 7.1.

Should not be hard to fix this. Can DSPEC magic be used for a work-around?

Paul




_______________________________________________
Lisp Hug - the mailing list for LispWorks users
[email protected]
http://www.lispworks.com/support/lisp-hug.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.