summaryrefslogtreecommitdiff
path: root/modules/language/python/list.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-09-11 20:49:02 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-09-11 20:49:02 +0200
commitc75be2215da7dcc993ca8450bafcbab609132871 (patch)
tree02dd34ba28787b8d98ad50433c41339639d60cfc /modules/language/python/list.scm
parentf75533465dbe70b153c75c85297422964b1a598d (diff)
final hhtp code
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r--modules/language/python/list.scm17
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