diff --git a/collects/tests/racket/optimize.rktl b/collects/tests/racket/optimize.rktl index 3c8e4440b4..b53d5f043c 100644 --- a/collects/tests/racket/optimize.rktl +++ b/collects/tests/racket/optimize.rktl @@ -25,6 +25,7 @@ [a-rock (eval '(rock 0))] [chap-rock (eval '(chaperone-struct (rock 0) rock-x (lambda (r v) (add1 v))))] [check-error-message (lambda (name proc [fixnum? #f] + #:bad-value [bad-value (if fixnum? 10 'bad)] #:first-arg [first-arg #f] #:second-arg [second-arg #f]) (unless (memq name '(eq? eqv? equal? @@ -40,7 +41,7 @@ thing? continuation-mark-set-first)) (let ([s (with-handlers ([exn? exn-message]) - (let ([bad (if fixnum? 10 'bad)]) + (let ([bad bad-value]) (cond [first-arg (proc first-arg bad)] [second-arg (proc bad second-arg)] @@ -68,7 +69,7 @@ (when check-fixnum-as-bad? (check-error-message op (eval `(lambda (x) (,op x))) #t)) (un0 v op arg))] - + [un (lambda (v op arg [check-fixnum-as-bad? #f]) (un-exact v op arg check-fixnum-as-bad?) (when (number? arg) @@ -617,10 +618,12 @@ (un 1 'real-part 1+2i) (un 105 'real-part 105) (un-exact 10.0 'flreal-part 10.0+7.0i #t) + (check-error-message 'flreal-part (eval `(lambda (x) (flreal-part x))) #:bad-value 1+2i) (un 2 'imag-part 1+2i) (un-exact 0 'imag-part 106) (un-exact 0 'imag-part 106.0) (un-exact 7.0 'flimag-part 10.0+7.0i #t) + (check-error-message 'flimag-part (eval `(lambda (x) (flimag-part x))) #:bad-value 1+2i) (bin 1+2i 'make-rectangular 1 2) (bin-exact 1.0+2.0i 'make-rectangular 1 2.0) diff --git a/src/racket/src/jitinline.c b/src/racket/src/jitinline.c index 6f636fa535..a9da05260d 100644 --- a/src/racket/src/jitinline.c +++ b/src/racket/src/jitinline.c @@ -1612,6 +1612,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in /* real part must always be inexact */ (void)jit_ldxi_p(JIT_R1, JIT_R0, &((Scheme_Complex *)0x0)->r); CHECK_LIMIT(); + (void)jit_bmsi_l(reffail, JIT_R1, 0x1); (void)mz_bnei_t(reffail, JIT_R1, scheme_double_type, JIT_R2); if (name[2] == 'i') { (void)jit_ldxi_p(dest, JIT_R0, &((Scheme_Complex *)0x0)->i); diff --git a/src/racket/src/number.c b/src/racket/src/number.c index f36e907ebf..2821ef272c 100644 --- a/src/racket/src/number.c +++ b/src/racket/src/number.c @@ -1003,12 +1003,12 @@ void scheme_init_flfxnum_number(Scheme_Env *env) SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("make-flrectangular", p, env); - p = scheme_make_folding_prim(scheme_checked_real_part, "flreal-part", 1, 1, 1); + p = scheme_make_folding_prim(scheme_checked_flreal_part, "flreal-part", 1, 1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED | SCHEME_PRIM_PRODUCES_FLONUM); scheme_add_global_constant("flreal-part", p, env); - p = scheme_make_folding_prim(scheme_checked_imag_part, "flimag-part", 1, 1, 1); + p = scheme_make_folding_prim(scheme_checked_flimag_part, "flimag-part", 1, 1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED | SCHEME_PRIM_PRODUCES_FLONUM); scheme_add_global_constant("flimag-part", p, env);