From ebd363161ef533833fc48c3389075bf4db7ebe17 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Sun, 7 Oct 2012 23:57:13 -0400 Subject: [PATCH] Don't simplify 'equal?' to 'eq?' when constant is an *inexact* small integer. * module/language/tree-il/primitives.scm (*primitive-expand-table*): Refine test for fixnums to verify that the small integer is exact. * test-suite/tests/tree-il.test ("primitives"): Add test. --- module/language/tree-il/primitives.scm | 1 + test-suite/tests/tree-il.test | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/module/language/tree-il/primitives.scm b/module/language/tree-il/primitives.scm index dc0a1457e..0c5b0855a 100644 --- a/module/language/tree-il/primitives.scm +++ b/module/language/tree-il/primitives.scm @@ -509,6 +509,7 @@ (eq? #nil v) (symbol? v) (and (integer? v) + (exact? v) (<= v most-positive-fixnum) (>= v most-negative-fixnum))) (make-application src (make-primitive-ref #f 'eq?) diff --git a/test-suite/tests/tree-il.test b/test-suite/tests/tree-il.test index bb7f90863..0a5303703 100644 --- a/test-suite/tests/tree-il.test +++ b/test-suite/tests/tree-il.test @@ -106,6 +106,10 @@ (apply (primitive equal?) (const 42) (toplevel x)) (apply (primitive eq?) (const 42) (toplevel x))) + (pass-if-primitives-resolved + (apply (primitive equal?) (const 42.0) (toplevel x)) + (apply (primitive equal?) (const 42.0) (toplevel x))) + (pass-if-primitives-resolved (apply (primitive equal?) (const #nil) (toplevel x)) (apply (primitive eq?) (const #nil) (toplevel x))))