From 7b6eb65d798ff81974970a7e0014c2fc64a16b99 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 20 Nov 2009 22:43:01 +0000 Subject: [PATCH] vector-copy now works for empty vectors svn: r16930 --- collects/scheme/vector.ss | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/collects/scheme/vector.ss b/collects/scheme/vector.ss index 9af85d0f7e..945126cf45 100644 --- a/collects/scheme/vector.ss +++ b/collects/scheme/vector.ss @@ -20,19 +20,29 @@ (unless (exact-nonnegative-integer? start) (raise-type-error 'vector-copy "non-negative exact integer" 1 start)) (let ([len (vector-length v)]) - (unless (and (<= 0 start) (< start len)) - (raise-mismatch-error - 'vector-copy - (format "start index ~e out of range [~e, ~e] for vector ~e" - start 0 len v) - v)) - (unless (and (<= start end) (<= end len)) - (raise-mismatch-error - 'vector-copy - (format "end index ~e out of range [~e, ~e] for vector ~e" - end start len v) - v)) - (vector-copy* v start end))) + (cond + [(= len 0) + (unless (and (= start 0) + (= end 0)) + (raise-mismatch-error + 'vector-copy + (format "start index and end index must both be 0 for empty vectors, got ~e and ~e" + start len))) + (vector)] + [else + (unless (and (<= 0 start) (< start len)) + (raise-mismatch-error + 'vector-copy + (format "start index ~e out of range [~e, ~e] for vector ~e" + start 0 len v) + v)) + (unless (and (<= start end) (<= end len)) + (raise-mismatch-error + 'vector-copy + (format "end index ~e out of range [~e, ~e] for vector ~e" + end start len v) + v)) + (vector-copy* v start end)]))) ;; do vector-map, putting the result in `target' ;; length is passed to save the computation