Re: Showing two test failures...

Paulo Madeira <[email protected]>
Newsgroups gmane.lisp.slime.devel
Message-ID <CADoO0bfUh_WyORv21zcng4X5G2W-+DEpayv4cYY_kEpa0p49-Q@mail.gmail.com>
2014-08-25 8:38 GMT+01:00 Helmut Eller:
> compile-defun-4 fails due to the "improved" backquote stuff.  I haven't
> followed the discussion.  Why is it neccesary to that ,X returns
> a struct instead of somehing more traditionanal like (unquote X)?

As I see it, that's a correct reader error, you shouldn't be able to

    `(list 1 ,1 ,@1 (bar))

That ,@1 cause the equivalent append to fail:

    (append (list `1) (list 1) 1 (list `(bar)))

Although I'm not sure I'm looking at the right point of failure, and I
didn't actually test it.

> find-definition\.2-1 fails because a change to set-macro-character.
> This code used to work:
>
> (let* ((rt (copy-readtable nil)))
>   (flet ((wrap (fun) (lambda (&rest args) (apply args fun))))
>     (list
>      (assert (get-dispatch-macro-character #\# #\. rt))
>      (multiple-value-bind (fun nt) (get-macro-character #\# rt)
>        (set-macro-character #\# (wrap fun) nt rt))
>      (assert (get-dispatch-macro-character #\# #\. rt)))))
>
> but no longer does.  Does somebody know if this code is actually
> non-portable?

It is actually non-portable, the macro character function is provided
by the implementation through make-dispatch-macro-character:

http://www.lispworks.com/documentation/HyperSpec/Body/02_add.htm

The dispatch character table may be attached to the macro character
function, e.g. a funcallable-standard-object with a slot containing
the table.  Hence the need for make-dispatch-macro-character.  In the
case of SBCL, it's a bit more twisted, it actually checks for the
closure's value:

https://github.com/sbcl/sbcl/blob/82e75708c947be3ae4e7884241526ba9c81840f6/src/code/reader.lisp#L268

Best regards,

Paulo Madeira
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.