Changeset 15701 in project


Ignore:
Timestamp:
09/01/09 14:41:48 (10 years ago)
Author:
felix winkelmann
Message:

fixnum ops for index counts

Location:
release/4/srfi-42/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • release/4/srfi-42/trunk/srfi-42.scm

    r15407 r15701  
    491491  (syntax-rules (index)
    492492    ((:integers cc var (index i))
    493      (:do cc ((var 0) (i 0)) #t ((+ var 1) (+ i 1))) )
     493     (:do cc ((var 0) (i 0)) #t ((fx+ var 1) (fx+ i 1))) )
    494494    ((:integers cc var)
    495      (:do cc ((var 0)) #t ((+ var 1))) )))
     495     (:do cc ((var 0)) #t ((fx+ var 1))) )))
    496496
    497497
     
    512512     (:do cc
    513513          (let ((b arg2))
    514             (if (not (and (integer? b) (exact? b)))
     514            (if (not (fixnum? b))
    515515                (error
    516516                   "arguments of :range are not exact integer "
    517517                   "(use :real-range?)" 0 b 1 )))
    518518          ((var 0))
    519           (< var b)
     519          (fx< var b)
    520520          (let ())
    521521          #t
    522           ((+ var 1)) ))
     522          ((fx+ var 1)) ))
    523523
    524524    ((:range cc var 0 arg2 -1)
    525525     (:do cc
    526526          (let ((b arg2))
    527             (if (not (and (integer? b) (exact? b)))
     527            (if (not (fixnum? b))
    528528                (error
    529529                   "arguments of :range are not exact integer "
    530530                   "(use :real-range?)" 0 b 1 )))
    531531          ((var 0))
    532           (> var b)
     532          (fx> var b)
    533533          (let ())
    534534          #t
    535           ((- var 1)) ))
     535          ((fx- var 1)) ))
    536536
    537537    ((:range cc var arg1 arg2 1)
    538538     (:do cc
    539539          (let ((a arg1) (b arg2))
    540             (if (not (and (integer? a) (exact? a)
    541                           (integer? b) (exact? b) ))
     540            (if (not (and (fixnum? a) (fixnum? b)))
    542541                (error
    543542                   "arguments of :range are not exact integer "
    544543                   "(use :real-range?)" a b 1 )) )
    545544          ((var a))
    546           (< var b)
     545          (fx< var b)
    547546          (let ())
    548547          #t
    549           ((+ var 1)) ))
     548          ((fx+ var 1)) ))
    550549
    551550    ((:range cc var arg1 arg2 -1)
    552551     (:do cc
    553552          (let ((a arg1) (b arg2) (s -1) (stop 0))
    554             (if (not (and (integer? a) (exact? a)
    555                           (integer? b) (exact? b) ))
     553            (if (not (and (fixnum? a) (fixnum? b)))
    556554                (error
    557555                   "arguments of :range are not exact integer "
    558556                   "(use :real-range?)" a b -1 )) )
    559557          ((var a))
    560           (> var b)
     558          (fx> var b)
    561559          (let ())
    562560          #t
    563           ((- var 1)) ))
     561          ((fx- var 1)) ))
    564562
    565563; the general case
     
    568566     (:do cc
    569567          (let ((a arg1) (b arg2) (s arg3) (stop 0))
    570             (if (not (and (integer? a) (exact? a)
    571                           (integer? b) (exact? b)
    572                           (integer? s) (exact? s) ))
     568            (if (not (and (fixnum? a) (fixnum? b) (fixnum? s)))
    573569                (error
    574570                   "arguments of :range are not exact integer "
     
    576572            (if (zero? s)
    577573                (error "step size must not be zero in :range") )
    578             (set! stop (+ a (* (max 0 (ceiling (/ (- b a) s))) s))) )
     574            (set! stop (fx+ a (fx* (fxmax 0 (fx/ (fx- b a) s)) s))) )
    579575          ((var a))
    580           (not (= var stop))
     576          (not (eq? var stop))
    581577          (let ())
    582578          #t
    583           ((+ var s)) ))))
     579          ((fx+ var s)) ))))
    584580
    585581; Comment: The macro :range inserts some code to make sure the values
     
    939935             (i 0) )
    940936         (do-ec qualifier
    941                 (if (< i len)
     937                (if (fx< i len)
    942938                    (begin (vector-set! vec i expression)
    943                            (set! i (+ i 1)) )
     939                           (set! i (fx+ i 1)) )
    944940                    (error "vector is too short for the comprehension") ))
    945          (if (= i len)
     941         (if (eq? i len)
    946942             vec
    947943             (error "vector is too long for the comprehension") ))))))
  • release/4/srfi-42/trunk/srfi-42.setup

    r14549 r15701  
    11;;; srfi-42.setup -*- Scheme -*-
    22
    3 (define (dynld-name fn)         
    4   (make-pathname #f fn ##sys#load-dynamic-extension))   
    5 
    6 (compile -s -O2 -d0 srfi-42.scm -j srfi-42)
     3(compile -s -O2 -d1 srfi-42.scm -j srfi-42)
    74(compile -s -O2 -d0 srfi-42.import.scm)
    85
    96(install-extension
    107 'srfi-42
    11  `(,(dynld-name "srfi-42") ,(dynld-name  "srfi-42.import") )
     8 '("srfi-42.so" "srfi-42.import.so")
    129 '((syntax)
    1310   (version 1.6)
Note: See TracChangeset for help on using the changeset viewer.