From af9900c7d47c9f8f67e8f2acba6c2b3687c7bfb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kochma=C5=84ski?= Date: Fri, 18 Dec 2015 10:35:11 +0100 Subject: [PATCH] compiler: fix compiler-macro for `FIND' C-compiled `FIND' didn't respect `START' nor `END' arguments due to bug in parsing the arguments and invoking `DO-SEQ'. Fixes #199. --- CHANGELOG | 3 +++ src/cmp/cmpopt-sequence.lsp | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 825d0fb49..134da75b1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -119,6 +119,9 @@ - Fix `listen' on streams when FILE_CNT isn't available (use read instad of fread) + - `FIND' compiled with C compiler didn't respect `START' nor `END' + arguments. Compiler macro is fixed now and should work as expected + * 16.0.0 changes since 15.3.7 ** API changes diff --git a/src/cmp/cmpopt-sequence.lsp b/src/cmp/cmpopt-sequence.lsp index c4ebcbf50..21ad2bd95 100644 --- a/src/cmp/cmpopt-sequence.lsp +++ b/src/cmp/cmpopt-sequence.lsp @@ -101,7 +101,9 @@ (nconc key-init test-init) key-flag test-flag - test)))))) + test + start + end)))))) #+(or) (define-compiler-macro si::make-seq-iterator (seq &optional (start 0)) @@ -275,7 +277,7 @@ (ext:with-unique-names (%value %elt) `(let ((,%value ,value) ,@init) - (do-in-seq (,%elt ,sequence) + (do-in-seq (,%elt ,sequence :start ,start :end ,end) (when ,(funcall test-function %value (funcall key-function %elt)) (return ,%elt))))))))