[gambit-list] What's going on with this expansion?

Bradley Lucier lucier at math.purdue.edu
Wed Nov 16 14:54:30 EST 2011


Marc:

Here's the contents of a file:

(declare (standard-bindings)
	 (extended-bindings)
	 (block))

(declare (not inline))

(define (safe-fixnum-+ x y)
  (declare (fixnum))
  (+ x y))

Here's the expansion:

[Bradley-Luciers-MacBook-Pro:~/programs/gambc-v4_6_2-devel] lucier% gsc -c -expansion crap.scm
Expansion:

(define safe-fixnum-+
  (lambda (x y)
    (if (and ('#<procedure #2 ##fixnum?> y) ('#<procedure #2 ##fixnum?> x))
        (let ((temp.2 ('#<procedure #3 ##fx+?> x y)))
          (if temp.2
              temp.2
              (if (and ('#<procedure #2 ##fixnum?> y) ('#<procedure #2 ##fixnum?> x))
                  (let ((temp.5 ('#<procedure #3 ##fx+?> x y))) (if temp.5 temp.5 ('#<procedure #4 fx+> x y)))
                  ('#<procedure #4 fx+> x y))))
        (if (and ('#<procedure #2 ##fixnum?> y) ('#<procedure #2 ##fixnum?> x))
            (let ((temp.8 ('#<procedure #3 ##fx+?> x y))) (if temp.8 temp.8 ('#<procedure #4 fx+> x y)))
            ('#<procedure #4 fx+> x y)))))


The C code generated by gsc matches the expansion.

This is very strange results---checking three times whether x and y are fixnums?  I can't understand this.

Brad


More information about the Gambit-list mailing list