optimizer: abs
expects and produces reals, not numbers
Related to #2685
This commit is contained in:
parent
34cd1e2a2b
commit
b133bea92e
|
@ -4039,6 +4039,13 @@
|
|||
(check-number-op-unary 'sub1)
|
||||
(check-number-op-unary 'abs))
|
||||
|
||||
;; `abs` wants and produces reals, not arbitrary numbers:
|
||||
(test-comp '(lambda (x) (when (number? x) (abs x)) 5)
|
||||
'(lambda (x) 5)
|
||||
#f)
|
||||
(test-comp '(lambda (x) (real? (abs x)))
|
||||
'(lambda (x) (abs x) #t))
|
||||
|
||||
(test-comp '(lambda () (-) (void))
|
||||
'(lambda () (void))
|
||||
#f)
|
||||
|
|
|
@ -124,9 +124,9 @@ void scheme_init_numarith(Scheme_Startup_Env *env)
|
|||
|
||||
p = scheme_make_folding_prim(scheme_abs, "abs", 1, 1, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_WANTS_NUMBER
|
||||
| SCHEME_PRIM_WANTS_REAL
|
||||
| SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS
|
||||
| SCHEME_PRIM_PRODUCES_NUMBER
|
||||
| SCHEME_PRIM_PRODUCES_REAL
|
||||
| SCHEME_PRIM_CLOSED_ON_REALS);
|
||||
scheme_addto_prim_instance("abs", p, env);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user