cs: improve Chez Scheme version check

Use the new `scheme-fork-version-number` function to make sure
the build uses the latest.
This commit is contained in:
Matthew Flatt 2019-09-13 07:29:23 -06:00
parent a5448f112d
commit 4e07c20afe
5 changed files with 35 additions and 60 deletions

View File

@ -12,7 +12,7 @@
(define collection 'multi)
(define version "7.4.0.8")
(define version "7.4.0.9")
(define deps `("racket-lib"
["racket" #:version ,version]))

View File

@ -57,7 +57,8 @@
prelex-is-flags-offset
prelex-was-flags-offset
prelex-sticky-mask
prelex-is-mask)
prelex-is-mask
scheme-version)
(provide record-ptr-offset)
(define record-ptr-offset 1)

View File

@ -99,6 +99,7 @@
$suppress-primitive-inlining
debug-level
scheme-version-number
scheme-fork-version-number
(rename-out [make-parameter $make-thread-parameter]
[make-parameter make-thread-parameter]
[cons make-binding]
@ -845,7 +846,22 @@
(define $suppress-primitive-inlining (make-parameter #f))
(define debug-level (make-parameter 0))
(define (scheme-version-number) (values 9 5 3))
(define (scheme-version-number)
(define v (lookup-constant 'scheme-version))
(if (zero? (arithmetic-shift v -24))
(values (arithmetic-shift v -16)
(bitwise-and 255 (arithmetic-shift v -8))
(bitwise-and 255 v))
(values (arithmetic-shift v -24)
(bitwise-and 255 (arithmetic-shift v -16))
(bitwise-and 255 (arithmetic-shift v -8)))))
(define (scheme-fork-version-number)
(define v (lookup-constant 'scheme-version))
(define-values (maj min sub) (scheme-version-number))
(if (zero? (arithmetic-shift v -24))
(values maj min sub 0)
(values maj min sub (bitwise-and 255 v))))
(define (make-hashtable hash eql?)
(cond

View File

@ -1,65 +1,23 @@
;; Check to make we're using a build of Chez Scheme
;; that has all the features we need.
(define-values (need-maj need-min need-sub need-dev)
(values 9 5 3 1))
(let-values ([(maj min sub) (scheme-version-number)])
(unless (or (> maj 9)
(and (= maj 9)
(or (> min 5)
(and (= min 5)
(>= sub 3)))))
(unless (guard (x [else #f]) (eval 'scheme-fork-version-number))
(error 'compile-file
(error 'compile-file "need the Racket fork of Chez Scheme to build")))
(let-values ([(maj min sub dev) (scheme-fork-version-number)])
(unless (or (> maj need-maj)
(and (= maj need-maj)
(or (> min need-min)
(and (= min need-min)
(or (>= sub need-sub)
(and (= sub need-sub)
(>= dev need-dev)))))))
(error 'compile-file "need a newer Chez Scheme")))
(define (check-ok what thunk)
(unless (guard (x [else #f]) (thunk))
(error 'compile-file
(format
"failed trying `~a`; probably you need a newer Chez Scheme"
what))))
(define (check-defined expr)
(check-ok expr (lambda () (eval expr))))
(check-defined 'box-cas!)
(check-defined 'make-arity-wrapper-procedure)
(check-defined 'generate-procedure-source-information)
(check-defined 'object-backreferences)
(check-defined 'current-generate-id)
(check-defined 'load-compiled-from-port)
(check-defined 'collect-rendezvous)
(check-defined '(define-ftype T (function __collect_safe () void)))
(check-defined 'call-setting-continuation-attachment)
(check-defined 'hashtable-cells)
(check-ok "fxvector-set!"
(lambda ()
(parameterize ([optimize-level 3]
[run-cp0 (lambda (cp0 x) x)])
(eval '(define (op x)
(if (fx- 0) 0 0)))
(eval '(define (f x)
(fxvector-set! x 0 (op 0))))
(eval '(f (fxvector 0))))))
(check-defined 'vfasl-convert-file)
(check-defined 'compute-size-increments)
(check-defined 'enable-type-recovery)
(check-defined 'make-wrapper-procedure)
(check-defined 'make-phantom-bytevector)
(check-defined 'enable-arithmetic-left-associative)
(check-ok "eq? on flonums"
(lambda ()
(let* ([n (string->number "3.14")]
[v (vector n n)])
(collect 0)
(unless (eq? (vector-ref v 0) (vector-ref v 1))
(error 'eq-on-flonum "no")))))
(check-defined 'procedure-known-single-valued?)
(check-defined 'compress-format)
(check-defined '#%$record-cas!)
(check-defined 'eq-hashtable-try-atomic-cell)
(check-defined 'hashtable-ref-cell)
(check-defined 'call-consuming-continuation-attachment)
;; ----------------------------------------
(current-make-source-object

View File

@ -16,7 +16,7 @@
#define MZSCHEME_VERSION_X 7
#define MZSCHEME_VERSION_Y 4
#define MZSCHEME_VERSION_Z 0
#define MZSCHEME_VERSION_W 8
#define MZSCHEME_VERSION_W 9
/* A level of indirection makes `#` work as needed: */
#define AS_a_STR_HELPER(x) #x