mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Compile numerical comparisons with more than 2 arguments to VM code.
* module/language/tree-il/primitives.scm (chained-comparison-expander): New procedure. (*primitive-expand-table*): Add primitive expanders for '<', '>', '<=', '>=', and '='.
This commit is contained in:
parent
e6c1c5f6cb
commit
58147d6780
1 changed files with 23 additions and 0 deletions
|
@ -491,6 +491,29 @@
|
|||
(define-primitive-expander f64vector-set! (vec i x)
|
||||
(bytevector-ieee-double-native-set! vec (* i 8) x))
|
||||
|
||||
(define (chained-comparison-expander prim-name)
|
||||
(case-lambda
|
||||
((src) (make-const src #t))
|
||||
((src a) #f)
|
||||
((src a b) #f)
|
||||
((src a b . rest)
|
||||
(let* ((prim (make-primitive-ref src prim-name))
|
||||
(b-sym (gensym "b"))
|
||||
(b* (make-lexical-ref src 'b b-sym)))
|
||||
(make-let src
|
||||
'(b)
|
||||
(list b-sym)
|
||||
(list b)
|
||||
(make-conditional src
|
||||
(make-application src prim (list a b*))
|
||||
(make-application src prim (cons b* rest))
|
||||
(make-const src #f)))))))
|
||||
|
||||
(for-each (lambda (prim-name)
|
||||
(hashq-set! *primitive-expand-table* prim-name
|
||||
(chained-comparison-expander prim-name)))
|
||||
'(< > <= >= =))
|
||||
|
||||
;; Appropriate for use with either 'eqv?' or 'equal?'.
|
||||
(define maybe-simplify-to-eq
|
||||
(case-lambda
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue