fix JIT, `unsafe-struct-ref', chaperone, and procedure property
This commit is contained in:
parent
f9247ff3a5
commit
0dcc96c5eb
|
@ -314,22 +314,27 @@
|
|||
(test-bin 65535 'unsafe-u16vector-ref (u16vector 10 65535 187) 1)
|
||||
|
||||
(let ()
|
||||
(define-struct posn (x [y #:mutable] z))
|
||||
(for ([star (list values (add-star "star"))])
|
||||
(test-bin 'a unsafe-struct-ref (make-posn 'a 'b 'c) 0 #:literal-ok? #f)
|
||||
(test-bin 'b unsafe-struct-ref (make-posn 'a 'b 'c) 1 #:literal-ok? #f)
|
||||
(let ([p (make-posn 100 200 300)])
|
||||
(test-tri 500 (star 'unsafe-struct-set!) p 1 500
|
||||
(define (try-struct prop prop-val)
|
||||
(define-struct posn (x [y #:mutable] z)
|
||||
#:property prop prop-val)
|
||||
(for ([star (list values (add-star "star"))])
|
||||
(test-bin 'a unsafe-struct-ref (make-posn 'a 'b 'c) 0 #:literal-ok? #f)
|
||||
(test-bin 'b unsafe-struct-ref (make-posn 'a 'b 'c) 1 #:literal-ok? #f)
|
||||
(let ([p (make-posn 100 200 300)])
|
||||
(test-tri 500 (star 'unsafe-struct-set!) p 1 500
|
||||
#:pre (lambda () (set-posn-y! p 0))
|
||||
#:post (lambda (x) (posn-y p))
|
||||
#:literal-ok? #f)))
|
||||
(let ([p (chaperone-struct (make-posn 100 200 300)
|
||||
posn-y (lambda (p v) v)
|
||||
set-posn-y! (lambda (p v) v))])
|
||||
(test-tri 500 'unsafe-struct-set! p 1 500
|
||||
#:pre (lambda () (set-posn-y! p 0))
|
||||
#:post (lambda (x) (posn-y p))
|
||||
#:literal-ok? #f)))
|
||||
(let ([p (chaperone-struct (make-posn 100 200 300)
|
||||
posn-y (lambda (p v) v)
|
||||
set-posn-y! (lambda (p v) v))])
|
||||
(test-tri 500 'unsafe-struct-set! p 1 500
|
||||
#:pre (lambda () (set-posn-y! p 0))
|
||||
#:post (lambda (x) (posn-y p))
|
||||
#:literal-ok? #f)))
|
||||
(define-values (prop:nothing nothing? nothing-ref) (make-struct-type-property 'nothing))
|
||||
(try-struct prop:nothing 5)
|
||||
(try-struct prop:procedure (lambda (s) 'hi!)))
|
||||
|
||||
;; test unboxing:
|
||||
(test-tri 5.4 '(lambda (x y z) (unsafe-fl+ x (unsafe-f64vector-ref y z))) 1.2 (f64vector 1.0 4.2 6.7) 1)
|
||||
|
|
|
@ -1605,6 +1605,8 @@ static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int
|
|||
|
||||
__START_TINY_JUMPS__(1);
|
||||
mz_patch_branch(ref);
|
||||
if (for_struct && unsafe && can_chaperone)
|
||||
(void)mz_beqi_t(reffail, JIT_R0, scheme_proc_chaperone_type, JIT_R2);
|
||||
if (!unsafe) {
|
||||
if (!int_ready)
|
||||
(void)jit_bmci_ul(reffail, JIT_R1, 0x1);
|
||||
|
|
Loading…
Reference in New Issue
Block a user