From a68c8eadc6fbcc901ef79342c07d80742e4c6ed7 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 21 Feb 2020 21:26:18 -0700 Subject: [PATCH] cs: fix `hash{,eq,eqv}` on an odd number of arguments Closes #3051 --- pkgs/racket-test-core/tests/racket/basic.rktl | 10 ++++++++++ racket/src/cs/rumble/hash.ss | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/pkgs/racket-test-core/tests/racket/basic.rktl b/pkgs/racket-test-core/tests/racket/basic.rktl index 7246a4dc06..065c478ea4 100644 --- a/pkgs/racket-test-core/tests/racket/basic.rktl +++ b/pkgs/racket-test-core/tests/racket/basic.rktl @@ -394,6 +394,16 @@ (test #t eq? (hasheq) (hash-remove (hasheq 3 4) 3)) (test #t eq? (hasheqv) (hash-remove (hasheqv 3 4) 3)) +(err/rt-test (hash 1)) +(err/rt-test (hasheqv 1)) +(err/rt-test (hasheq 1)) +(err/rt-test (make-hash 1)) +(err/rt-test (make-hasheqv 1)) +(err/rt-test (make-hasheq 1)) +(err/rt-test (make-weak-hash 1)) +(err/rt-test (make-weak-hasheqv 1)) +(err/rt-test (make-weak-hasheq 1)) + (test #t symbol? 'foo) (test #t symbol? (car '(a b))) (test #f symbol? "bar") diff --git a/racket/src/cs/rumble/hash.ss b/racket/src/cs/rumble/hash.ss index 792ab136c2..3a0444c1d3 100644 --- a/racket/src/cs/rumble/hash.ss +++ b/racket/src/cs/rumble/hash.ss @@ -73,6 +73,11 @@ (let loop ([kvs kvs] [h empty-hash]) (cond [(null? kvs) h] + [(null? (cdr kvs)) + (raise-arguments-error + 'vararg-ctor + "key does not have a value (i.e., an odd number of arguments were provided)" + "key" (car kvs))] [else (loop (cddr kvs) (intmap-set h (car kvs) (cadr kvs)))]))])) (define list-ctor