Changeset 11960 in project for chicken


Ignore:
Timestamp:
09/17/08 09:15:53 (12 years ago)
Author:
Kon Lovett
Message:

Fold of 'let*' in 'hash-table-delete!'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • chicken/trunk/srfi-69.scm

    r10950 r11960  
    796796      (##sys#check-structure ht 'hash-table 'hash-table-delete!)
    797797      (let* ([vec (##sys#slot ht 1)]
    798              [len (##sys#size vec)] )
    799         (let* ([hash (##sys#slot ht 4)]
    800                [hshidx (hash key len)] )
    801           (let ([test (##sys#slot ht 3)]
    802                 [newsiz (fx- (##sys#slot ht 2) 1)]
    803                 [bucket0 (##sys#slot vec hshidx)] )
    804             (if (eq? core-eq? test)
    805                 ; Fast path (eq? is rewritten by the compiler):
    806                 (let loop ([prev #f] [bucket bucket0])
    807                   (and (not (null? bucket))
    808                        (let ([pare (##sys#slot bucket 0)]
    809                              [nxt (##sys#slot bucket 1)])
    810                         (if (eq? key (##sys#slot pare 0))
    811                              (begin
    812                                (if prev
    813                                    (##sys#setslot prev 1 nxt)
    814                                    (##sys#setslot vec hshidx nxt) )
    815                                (##sys#setislot ht 2 newsiz)
    816                                #t )
    817                              (loop bucket nxt) ) ) ) )
    818                 ; Slow path
    819                 (let loop ([prev #f] [bucket bucket0])
    820                   (and (not (null? bucket))
    821                        (let ([pare (##sys#slot bucket 0)]
    822                              [nxt (##sys#slot bucket 1)])
    823                         (if (test key (##sys#slot pare 0))
    824                              (begin
    825                                (if prev
    826                                    (##sys#setslot prev 1 nxt)
    827                                    (##sys#setslot vec hshidx nxt) )
    828                                (##sys#setislot ht 2 newsiz)
    829                                #t )
    830                              (loop bucket nxt) ) ) ) ) ) ) ) ) ) ) )
     798             [len (##sys#size vec)]
     799             [hash (##sys#slot ht 4)]
     800             [hshidx (hash key len)] )
     801        (let ([test (##sys#slot ht 3)]
     802              [newsiz (fx- (##sys#slot ht 2) 1)]
     803              [bucket0 (##sys#slot vec hshidx)] )
     804          (if (eq? core-eq? test)
     805              ; Fast path (eq? is rewritten by the compiler):
     806              (let loop ([prev #f] [bucket bucket0])
     807                (and (not (null? bucket))
     808                     (let ([pare (##sys#slot bucket 0)]
     809                           [nxt (##sys#slot bucket 1)])
     810                      (if (eq? key (##sys#slot pare 0))
     811                           (begin
     812                             (if prev
     813                                 (##sys#setslot prev 1 nxt)
     814                                 (##sys#setslot vec hshidx nxt) )
     815                             (##sys#setislot ht 2 newsiz)
     816                             #t )
     817                           (loop bucket nxt) ) ) ) )
     818              ; Slow path
     819              (let loop ([prev #f] [bucket bucket0])
     820                (and (not (null? bucket))
     821                     (let ([pare (##sys#slot bucket 0)]
     822                           [nxt (##sys#slot bucket 1)])
     823                      (if (test key (##sys#slot pare 0))
     824                           (begin
     825                             (if prev
     826                                 (##sys#setslot prev 1 nxt)
     827                                 (##sys#setslot vec hshidx nxt) )
     828                             (##sys#setislot ht 2 newsiz)
     829                             #t )
     830                           (loop bucket nxt) ) ) ) ) ) ) ) ) ) )
    831831
    832832;; hash-table-remove!:
Note: See TracChangeset for help on using the changeset viewer.