diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-09-11 20:49:02 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-09-11 20:49:02 +0200 |
commit | c75be2215da7dcc993ca8450bafcbab609132871 (patch) | |
tree | 02dd34ba28787b8d98ad50433c41339639d60cfc /modules/language/python/list.scm | |
parent | f75533465dbe70b153c75c85297422964b1a598d (diff) |
final hhtp code
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r-- | modules/language/python/list.scm | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm index a60703c..c656edf 100644 --- a/modules/language/python/list.scm +++ b/modules/language/python/list.scm @@ -50,8 +50,11 @@ (slot-ref o 'n) (vector->list (slot-ref o 'vec))))) +(define (int x) x) + (define-method (pylist-delete! (o <py-list>) k) (let* ((n (slot-ref o 'n)) + (k (int k)) (k (if (< k 0) (+ k n) k))) (pylist-subset! o k (+ k 1) None pylist-null))) @@ -154,31 +157,33 @@ ;;; REF (define-method (pylist-ref (o <py-list>) nin) (define N (slot-ref o 'n)) - (define n (if (< nin 0) (+ N nin) nin)) + (define n0 (int nin)) + (define n (if (< n0 0) (+ N n0) n0)) (if (and (>= n 0) (< n (slot-ref o 'n))) (vector-ref (slot-ref o 'vec) n) (raise IndexError))) (defpair (pylist-ref o n) - (list-ref o (if (< n 0) (+ (length o) n) n))) + (list-ref o (let ((n (int n))) (if (< n 0) (+ (length o) n) n)))) (define-method (pylist-ref (o <vector>) n) - (vector-ref o n)) + (vector-ref o (let ((n (int n))) (if (< n 0) (+ (vector-length o) n) n)))) ;;; SET (define-method (pylist-set! (o <py-list>) nin val) (define N (slot-ref o 'n)) - (define n (if (< nin 0) (+ N nin) nin)) + (define n0 (int nin)) + (define n (if (< n0 0) (+ N n0) n0)) (if (and (>= n 0) (< n (slot-ref o 'n))) (vector-set! (slot-ref o 'vec) n val) (raise IndexError))) (defpair (pylist-set! o n val) - (list-set! o n val)) + (list-set! o (let ((n (int n))) (if (< n 0) (+ (length o) n) n)) val)) (define-method (pylist-set! (o <vector>) n val) - (vector-set! o n val)) + (vector-set! o (let ((n (int n))) (if (< n 0) (+ (length o) n) n)) val)) ;;SLICE |