[armedbear-devel] Maxima status: Can't compile due to i18n changes

Robert Dodier robert.dodier at gmail.com
Sat Mar 13 18:53:04 UTC 2010


On 3/13/10, Erik Huelsmann <ehuels at gmail.com> wrote:

> The issue is with intl.lisp: the defvar form defining *default-domain* contains an
> _N reader macro, which expands into multiple symbols on ABCL: This is
> what I found after expansion:
>
> --- fasl content
> (DEFVAR *DEFAULT-DOMAIN* "maxima" NIL "The message-lookup domain used
> by INTL:GETTEXT and INTL:NGETTEXT.
>   Use (INTL:TEXTDOMAIN \"whatever\") in each source file to set this.")
> --- fasl content

Erik, thanks for your work on ABCL.
With the fragment shown in the PS to define _N, I get this output:

$ java -jar /usr/local/armedbear-svn/abcl/dist/abcl.jar
Armed Bear Common Lisp 0.19.0-dev
Java 1.5.0_01 Sun Microsystems Inc.
Java HotSpot(TM) Client VM
Low-level initialization completed in 3.619 seconds.
Startup completed in 9.248 seconds.
Type ":help" for a list of available commands.
CL-USER(1): (load "/tmp/_N.lisp")
T
CL-USER(2): _N"foo"
NIL
CL-USER(3): "foo"
CL-USER(4): (defvar *blurf* _N"foo")
*BLURF*
CL-USER(5): (macroexpand '(defvar *blurf* _N"foo"))
(PROGN (SYSTEM::%DEFVAR (QUOTE *BLURF*)) (UNLESS (BOUNDP (QUOTE
*BLURF*)) (SETQ *BLURF* NIL)) (SYSTEM:%SET-DOCUMENTATION (QUOTE
*BLURF*) (QUOTE VARIABLE) (QUOTE "foo")) (QUOTE *BLURF*))
T

Hmm, I didn't type "foo" at CL-USER(3), it showed up by itself.
When I try it in Clisp, I don't see the superfluous NIL + spurious "foo" input:

[1]> (load "/tmp/_N.lisp")
;; Loading file /tmp/_N.lisp ...
;; Loaded file /tmp/_N.lisp
T
[2]> _N"foo"
"foo"
[3]>

Maybe this gives some clue? Not sure what's going on here.

I built ABCL from svn on 2010-01-24.

best,

Robert Dodier

PS.
$ cat /tmp/_N.lisp
(defpackage :intl)

(eval-when #-gcl (:compile-toplevel :execute)
           #+gcl (compile eval)
  (defparameter intl::*default-domain* "maxima")
  (unless (and (fboundp 'intl::read-translatable-string)
               (eq (get-macro-character #\_)
                   (fdefinition 'intl::read-translatable-string)))
    (set-macro-character #\_ (lambda (stream char)
                               (declare (ignore char))
                               (case (peek-char nil stream nil nil t)
                                 (#\" (values))
                                 (#\N (read-char stream t nil t) (values))
                                 (otherwise '_)))
                         t)))




More information about the armedbear-devel mailing list