Changeset 546

Show
Ignore:
Timestamp:
06/16/08 08:47:31 (7 months ago)
Author:
weyrick
Message:

fix array_slice when accessing the last element of an array. thanks igli

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pcc/runtime/ext/standard/php-array.scm

    r519 r546  
    606606          (max-len a-size) 
    607607          (real-offset (convert-to-number offset))) 
    608       (if (php-number? real-offset) 
     608      (if (php-< real-offset 0) 
     609          (set! real-offset (php-+ a-size real-offset))) 
     610      (when (php-<= real-offset (php-- a-size 1)) 
    609611          (begin 
    610              (if (php-< real-offset 0) 
    611                  (set! real-offset (php-+ a-size real-offset))) 
    612              (if (php-< real-offset (php-- a-size 1)) 
    613                  (begin 
    614                     (cond ((eqv? length 'unset) (set! max-len (php-- a-size real-offset))) 
    615                           ((and (php-number? length) 
    616                                 (php-< length 0))   (set! max-len (php-+ (php-- a-size real-offset) length))) 
    617                           ((and (php-number? length) 
    618                                 (php->= length 0))  (set! max-len length))) 
    619                     (let ((i 0)) 
    620                        (php-hash-for-each safe-array 
    621                           (lambda (k v) 
    622                              (when (and (php->= i real-offset) 
    623                                         (php-< cur-len max-len)) 
    624                                 (set! cur-len (+ cur-len 1)) 
    625                                 (php-hash-insert! new-array :next v)) 
    626                              (set! i (+ i 1)))))) 
    627                  #f) 
    628              new-array) 
    629           #f))) 
     612             (cond ((eqv? length 'unset) (set! max-len (php-- a-size real-offset))) 
     613                   ((and (php-number? length) 
     614                         (php-< length 0))   (set! max-len (php-+ (php-- a-size real-offset) length))) 
     615                   ((and (php-number? length) 
     616                         (php->= length 0))  (set! max-len length))) 
     617             (let ((i 0)) 
     618                (php-hash-for-each safe-array 
     619                                   (lambda (k v) 
     620                                      (when (and (php->= i real-offset) 
     621                                                 (php-< cur-len max-len)) 
     622                                         (set! cur-len (+ cur-len 1)) 
     623                                         (php-hash-insert! new-array :next v)) 
     624                                      (set! i (+ i 1))))))) 
     625      new-array)) 
    630626                                                        
    631627