From: Jan M. <sc...@us...> - 2014-05-04 14:14:08
|
The branch "master" has been updated in SBCL: via cdbc1eb4a5b3de98b485681927819770c7eb749c (commit) from 019f744ef8a9da88c1f0632426030b679b9992bb (commit) - Log ----------------------------------------------------------------- commit cdbc1eb4a5b3de98b485681927819770c7eb749c Author: Mark Cox <mar...@gm...> Date: Sun May 4 20:52:15 2014 +1000 MAKE-SEQUENCE signals correct error for incompletely user-defined sequences For the following situation: - result type is a type specifier designating a DEFTYPEd type - the type expands to a the name of a user-defined sequence class - not all mandatory sequence protocol methods are define for the user-define sequence class MAKE-SEQUENCE used to signal a SIMPLE-TYPE-ERROR referring to the unexpanded type specifier, instead of signaling a SEQUENCE:PROTOCOL-UNIMPLEMENTED error. Fixes lp#1315846. --- NEWS | 4 ++- src/code/seq.lisp | 4 +- tests/extended-sequences.impure.lisp | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 75fdb19..d984745 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,7 @@ ;;;; -*- coding: utf-8; fill-column: 78 -*- changes relative to sbcl-1.1.18: + * bug fix: MAKE-SEQUENCE works with sequence types defined via DEFTYPE + (lp#1315846, thanks to Mark Cox) * bug fix: SET-[DISPATCH-]MACRO-CHARACTER should coerce a symbolic function-designator to a function only as needed. (lp#1012335) * bug fix: remove references to asdf-install from the manual. (lp#1207544, @@ -32,7 +34,7 @@ changes in sbcl-1.1.17 relative to sbcl-1.1.16: (lp#1077996) * bug fix: MAKE-CONDITION reports names of missing condition classes properly (lp#1199223) - * bug fix: restore building with clang. (lp#1293643) + * bug fix: restore building with clang. (lp#1293643) * bug fix: restore building on SPARC (broken since 1.1.15). * bug fix: improved FreeBSD support. * bug fix: PPC floating point conversion corrupted stack. diff --git a/src/code/seq.lisp b/src/code/seq.lisp index e6abb66..48f761f 100644 --- a/src/code/seq.lisp +++ b/src/code/seq.lisp @@ -327,7 +327,7 @@ ((eq expanded-type 'string) '(vector character)) ((eq expanded-type 'simple-string) '(simple-array character (*))) - (t type))) + (t expanded-type))) (cons (cond ((eq (car expanded-type) 'string) `(vector character ,@(cdr expanded-type))) @@ -335,7 +335,7 @@ `(simple-array character ,(if (cdr expanded-type) (cdr expanded-type) '(*)))) - (t type))))) + (t expanded-type))))) (type (specifier-type adjusted-type))) (cond ((csubtypep type (specifier-type 'list)) (cond diff --git a/tests/extended-sequences.impure.lisp b/tests/extended-sequences.impure.lisp new file mode 100644 index 0000000..8d2ab01 --- /dev/null +++ b/tests/extended-sequences.impure.lisp @@ -0,0 +1,35 @@ +;;;; Tests related to extended sequences. + +;;;; This file is impure because we want to be able to define methods +;;;; implementing the extended sequence protocol. + +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; While most of SBCL is derived from the CMU CL system, the test +;;;; files (like this one) were written from scratch after the fork +;;;; from CMU CL. +;;;; +;;;; This software is in the public domain and is provided with +;;;; absolutely no warranty. See the COPYING and CREDITS files for +;;;; more information. + +(load "test-util.lisp") +(load "assertoid.lisp") + +;;; For the following situation: +;;; - result type is a type specifier designating a DEFTYPEd type +;;; - the type expands to a the name of a user-defined sequence class +;;; - not all mandatory sequence protocol methods are define for the +;;; user-define sequence class +;;; MAKE-SEQUENCE used to signal a SIMPLE-TYPE-ERROR referring to the +;;; unexpanded type specifier, instead of signaling a +;;; SEQUENCE:PROTOCOL-UNIMPLEMENTED error. +(defclass bug-1315846-simple-sequence (sequence) ()) + +(deftype bug-1315846-sequence () + 'bug-1315846-simple-sequence) + +(with-test (:name (make-sequence deftype :bug-1315846)) + (assert (raises-error? (make-sequence 'bug-1315846-sequence 10) + sequence::protocol-unimplemented))) ----------------------------------------------------------------------- hooks/post-receive -- SBCL |