diff --git a/pkgs/racket-test-core/tests/racket/syntax.rktl b/pkgs/racket-test-core/tests/racket/syntax.rktl index 87761cf25f..b51fc2998e 100644 --- a/pkgs/racket-test-core/tests/racket/syntax.rktl +++ b/pkgs/racket-test-core/tests/racket/syntax.rktl @@ -572,6 +572,33 @@ (test 1 f #s(o n e)) (test (void) f #f)) +;; Make sure a mixture of fixnums and non-fixnums works: +(let () + (define (f x) + (case x + [(1) 'one] + [(1000) 'onek] + [(1001) 'onek+] + [(1002) 'onek+] + [(1003) 'onek+] + [(1000000) 'onem] + [(1000000000) 'onet] + [(1000000000000) 'oneqd] + [(1000000000001) 'oneqd+] + [(1000000000002) 'oneqd+] + [(1000000000003) 'oneqd+] + [(1000000000000000) 'oneqt] + [(1000000000000000000) 'ones] + [(1000000000000000001) 'ones+] + [(1000000000000000002) 'ones+])) + (test 'one f 1) + (test 'onek f 1000) + (test 'onem f 1000000) + (test 'onet f 1000000000) + (test 'oneqd f 1000000000000) + (test 'oneqt f 1000000000000000) + (test 'ones f 1000000000000000000)) + (test #t 'and (and (= 2 2) (> 2 1))) (test #f 'and (and (= 2 2) (< 2 1))) (test '(f g) 'and (and 1 2 'c '(f g))) diff --git a/racket/collects/racket/private/case.rkt b/racket/collects/racket/private/case.rkt index 0f292ec576..ba0a2f010c 100644 --- a/racket/collects/racket/private/case.rkt +++ b/racket/collects/racket/private/case.rkt @@ -167,7 +167,11 @@ #,exp))] [exp (if (null? (consts-fixnum ks)) exp - #`(if (fixnum-for-every-system? v) + #`(if #,(if (null? (consts-other ks)) + ;; can check for fixnum + #'(fixnum? v) + ;; maybe could-be-fixnum numbers are in `others` + #'(fixnum-for-every-system? v)) #,(dispatch-fixnum #'v (consts-fixnum ks)) #,exp))]) exp)]) diff --git a/racket/src/cs/schemified/expander.scm b/racket/src/cs/schemified/expander.scm index b067d02afd..88f32ab06b 100644 --- a/racket/src/cs/schemified/expander.scm +++ b/racket/src/cs/schemified/expander.scm @@ -465,9 +465,6 @@ (if (list? a_0) (append a_0 b_0) (raise-argument-error 'unquote-splicing "list?" a_0)))) -(define fixnum-for-every-system? - (lambda (v_0) - (if (fixnum? v_0) (if (fx>= v_0 -536870912) (fx<= v_0 536870911) #f) #f))) (define bad-list$1 (|#%name| bad-list @@ -24569,7 +24566,7 @@ (begin (let ((type_0 (read-byte/no-eof i_0))) (let ((index_0 - (if (fixnum-for-every-system? type_0) + (if (fixnum? type_0) (if (if (unsafe-fx>= type_0 1) (unsafe-fx< type_0 42) #f) diff --git a/racket/src/cs/schemified/schemify.scm b/racket/src/cs/schemified/schemify.scm index 8ac461020c..ffea7335e6 100644 --- a/racket/src/cs/schemified/schemify.scm +++ b/racket/src/cs/schemified/schemify.scm @@ -47963,7 +47963,7 @@ (begin (let ((type_0 (read-byte/no-eof i_0))) (let ((index_0 - (if (fixnum-for-every-system? type_0) + (if (fixnum? type_0) (if (if (unsafe-fx>= type_0 1) (unsafe-fx< type_0 42) #f)