From: Christophe R. <cr...@us...> - 2009-10-30 15:23:27
|
Update of /cvsroot/sbcl/sbcl/src/code/external-formats In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv12010/src/code/external-formats Modified Files: enc-cn-tbl.lisp enc-jpn-tbl.lisp mb-util.lisp Log Message: 1.0.32.5: defend against full MAKE-ARRAY before the type system is ready This is basically defence against bugs of the form lp #316323, where the wrong answer comes out of a make-array before SUBTYPEP is working properly. We should be able to arrange the build so that we never have to do a full MAKE-ARRAY before we're ready for it. Slight modifications of a couple of macros: VOP-related and multibyte encoding-related. There should be no user-visible change. Index: enc-cn-tbl.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/external-formats/enc-cn-tbl.lisp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- enc-cn-tbl.lisp 27 Dec 2006 00:37:31 -0000 1.1 +++ enc-cn-tbl.lisp 30 Oct 2009 15:23:12 -0000 1.2 @@ -12,7 +12,7 @@ (in-package "SB!IMPL") (define-multibyte-mapper *gbk-to-ucs-table* - '( ;; begin, insert GBK2UCS.TXT here (emacs: C-x i GBK2UCS.TXT) + ( ;; begin, insert GBK2UCS.TXT here (emacs: C-x i GBK2UCS.TXT) (#x8140 #x4E02) (#x8141 #x4E04) (#x8142 #x4E05) @@ -21807,7 +21807,7 @@ )) ;; end of *gbk-to-ucs-table* (define-multibyte-mapper *ucs-to-gbk-table* - '( ;; begin, insert UCS2GBK.TXT here (emacs: C-x i UCS2GBK.TXT) + ( ;; begin, insert UCS2GBK.TXT here (emacs: C-x i UCS2GBK.TXT) (#x00A4 #xA1E8) (#x00A7 #xA1EC) (#x00A8 #xA1A7) Index: enc-jpn-tbl.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/external-formats/enc-jpn-tbl.lisp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- enc-jpn-tbl.lisp 12 Nov 2006 21:42:29 -0000 1.1 +++ enc-jpn-tbl.lisp 30 Oct 2009 15:23:12 -0000 1.2 @@ -1,6 +1,6 @@ (in-package "SB!IMPL") (define-multibyte-mapper *ucs-to-eucjp-table* - '((#xa1 #x8fa2c2) + ((#xa1 #x8fa2c2) (#xa2 #xa1f1) (#xa3 #xa1f2) (#xa4 #x8fa2f0) @@ -13012,7 +13012,7 @@ (#xffe3 #xa1b1) (#xffe5 #xa1ef))) (define-multibyte-mapper *eucjp-to-ucs-table* - '((#x8ea1 #xff61) + ((#x8ea1 #xff61) (#x8ea2 #xff62) (#x8ea3 #xff63) (#x8ea4 #xff64) @@ -26022,7 +26022,7 @@ (#x8fede2 #x9fa3) (#x8fede3 #x9fa5))) (define-multibyte-mapper *ucs-to-sjis-table* - '((#xa2 #x8191) + ((#xa2 #x8191) (#xa3 #x8192) (#xa5 #x5c) (#xa7 #x8198) @@ -35304,7 +35304,7 @@ (#xffe4 #xfa55) (#xffe5 #x818f))) (define-multibyte-mapper *sjis-to-ucs-table* - '((#xa1 #xff61) + ((#xa1 #xff61) (#xa2 #xff62) (#xa3 #xff63) (#xa4 #xff64) Index: mb-util.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/external-formats/mb-util.lisp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- mb-util.lisp 29 Sep 2009 01:02:20 -0000 1.4 +++ mb-util.lisp 30 Oct 2009 15:23:12 -0000 1.5 @@ -1,15 +1,12 @@ (in-package "SB!IMPL") -(defun make-multibyte-mapper (list) +(defmacro define-multibyte-mapper (name list) (let ((list (sort (copy-list list) #'< :key #'car)) (hi (loop for x in list maximize (max (car x) (cadr x))))) - (make-array (list (length list) 2) - :element-type (list 'integer 0 hi) - :initial-contents list))) - -(defmacro define-multibyte-mapper (name list) - `(defparameter ,name - (make-multibyte-mapper ,list))) + `(defparameter ,name + (make-array '(,(length list) 2) + :element-type '(integer 0 ,hi) + :initial-contents ',list)))) (defun get-multibyte-mapper (table code) (declare (optimize speed (safety 0)) |