From: Daniel L. <dl...@bi...> - 2009-03-19 19:49:59
Attachments:
loop-typed-init.patch
|
Before this patch, the type of non-numeric variables created by loop is declared incorrectly: CL-USER> (defun foo (x) (loop for b across x do (print b)))) FOO CL-USER> (foo nil) NIL CL-USER> (macroexpand-1 '(loop for b across x do (print b))) (BLOCK NIL (LET ((B NIL) (#:LOOP-ACROSS-VECTOR-762 X) (#:LOOP-ACROSS-INDEX-763 0) (#:LOOP-ACROSS-LIMIT-764 0)) (DECLARE (TYPE FIXNUM #:LOOP-ACROSS-LIMIT-764) (TYPE FIXNUM #:LOOP-ACROSS-INDEX-763) (TYPE (OR (MEMBER NIL) VECTOR) #:LOOP-ACROSS-VECTOR-762)) ;<============= (SB-LOOP::LOOP-BODY ((SETQ #:LOOP-ACROSS-LIMIT-764 (LENGTH #:LOOP-ACROSS-VECTOR-762))) ((WHEN (>= #:LOOP-ACROSS-INDEX-763 #:LOOP-ACROSS-LIMIT-764) (GO SB-LOOP::END-LOOP)) (SB-LOOP::LOOP-REALLY-DESETQ B (AREF #:LOOP-ACROSS-VECTOR-762 #:LOOP-ACROSS-INDEX-763)) NIL (SB-LOOP::LOOP-REALLY-DESETQ #:LOOP-ACROSS-INDEX-763 (1+ #:LOOP-ACROSS-INDEX-763))) ((PRINT B)) ((WHEN (>= #:LOOP-ACROSS-INDEX-763 #:LOOP-ACROSS-LIMIT-764) (GO SB-LOOP::END-LOOP)) (SB-LOOP::LOOP-REALLY-DESETQ B (AREF #:LOOP-ACROSS-VECTOR-762 #:LOOP-ACROSS-INDEX-763)) NIL (SB-LOOP::LOOP-REALLY-DESETQ #:LOOP-ACROSS-INDEX-763 (1+ #:LOOP-ACROSS-INDEX-763))) NIL))) This patch makes LOOP-TYPED-INIT provide an initial value of the desired vector type. LOOP-MAKE-VAR will then produce the correct type declaration for the variable. SBCL self-builds and passes all expected tests. |
From: Attila L. <att...@gm...> - 2009-03-26 23:59:41
|
i think this broke the compilation of ironclad 0.26. https://bugs.launchpad.net/sbcl/+bug/349244 -- attila |
From: Juho S. <js...@ik...> - 2009-03-27 00:52:48
|
Attila Lendvai <att...@gm...> writes: > i think this broke the compilation of ironclad 0.26. Thanks for the report, I reverted this (and added a minimal testcase). -- Juho Snellman |
From: Nikodemus S. <nik...@ra...> - 2009-09-15 21:40:13
|
2009/3/27 Juho Snellman <js...@ik...>: > Attila Lendvai <att...@gm...> writes: > >> i think this broke the compilation of ironclad 0.26. > > Thanks for the report, I reverted this (and added a minimal testcase). I've re-implemented this in corrected form in 1.0.31.11. Cheers, -- Nikodemus |