problems with intl.lisp and sbcl



Hi,

I have problems compiling intl.lisp with sbcl
(version  SBCL 1.0.19-gentoo) ; if a make the following changes i
succed in compiling, but it looks fishy to me:

*** src/intl.lisp	2009-02-10 22:32:06.000000000 +0100
--- /tmp/intl.lisp	2009-02-10 22:28:18.000000000 +0100
***************
*** 30,36 ****
  (ext:file-comment
   "$Header: /cvsroot/maxima/maxima/src/intl.lisp,v 1.3 2009/02/09 20:32:53 rtoy Exp $")
  
! (in-package "INTL")
  
  (defvar *locale-directory* "/usr/share/locale/")
  (defvar *locale* "C")
--- 30,36 ----
  (ext:file-comment
   "$Header: /cvsroot/maxima/maxima/src/intl.lisp,v 1.3 2009/02/09 20:32:53 rtoy Exp $")
  
! ;(in-package "INTL")
  
  (defvar *locale-directory* "/usr/share/locale/")
  (defvar *locale* "C")
***************
*** 236,245 ****
  	`(dgettext ,*default-domain* ,string))))
  
  (defun install ()
!   (unless #+(or CMU SBCL) (eq (get-macro-character #\_)
! 			      #'lisp::read-dispatch-char)
! 	  #-(or CMU SBCL) (get-macro-character #\_)
!     (make-dispatch-macro-character #\_ t))
    (set-dispatch-macro-character #\_ #\" #'read-translatable-string)
    (set-dispatch-macro-character #\# #\" #'read-translatable-string)
    t)
--- 236,244 ----
  	`(dgettext ,*default-domain* ,string))))
  
  (defun install ()
!   (unless #+CMU (eq (get-macro-character #\_)  #'lisp::read-dispatch-char)
! 	  #-CMU (get-macro-character #\_)
! 	  (make-dispatch-macro-character #\_ t))
    (set-dispatch-macro-character #\_ #\" #'read-translatable-string)
    (set-dispatch-macro-character #\# #\" #'read-translatable-string)
    t)

in my sbcl (get-macro-character #\_) returns nil, unlike cmucl. OK
thats a simple change, but what amazes me are the errors I get
with the (in-package "INTL") form still active:

; in: DEFUN READ-LELONG
;     ((INTL::A (INTL::READ-CHAR INTL::STREAM))
;      (INTL::B (INTL::READ-CHAR INTL::STREAM))
;      (INTL::C (INTL::READ-CHAR INTL::STREAM))
;      (INTL::D (INTL::READ-CHAR INTL::STREAM)))
; 
; caught COMMON-LISP:ERROR:
;   illegal function call

;     (INTL::LET
;      ((INTL::A (INTL::READ-CHAR INTL::STREAM))
;       (INTL::B (INTL::READ-CHAR INTL::STREAM))
;       (INTL::C (INTL::READ-CHAR INTL::STREAM))
;       (INTL::D (INTL::READ-CHAR INTL::STREAM)))
;      (INTL::+ (INTL::ASH (INTL::CHAR-CODE INTL::D) 24)
;       (INTL::ASH (INTL::CHAR-CODE INTL::C) 16)
;       (INTL::ASH (INTL::CHAR-CODE INTL::B) 8) (INTL::CHAR-CODE INTL::A)))
; 
; note: The first argument never returns a value.

;     (INTL::CHAR-CODE INTL::D)
; ==>
;   INTL::D

this looks very suspicious to me. Has anybody got an idea?

Thanks in advance,

Andreas

-- 
ceterum censeo redmondinem esse delendam.