@@ -44,7 +44,15 @@ func `[]=`*[T](self: var PyList[T], s: BackwardsIndex, x: T) =
44
44
proc list*[T](iter: Iterable[T]): PyList[T] # front decl
45
45
func `[]=`*[T](self: var PyList[T], s: HSlice, x: Iterable[T]) =
46
46
self[s] = list(x)
47
+
48
+
49
+ func normSlice(s: PySlice, le: int ): PySlice =
50
+ template norm(idx: int ): untyped =
51
+ (if idx < 0: le+idx else: idx)
52
+ slice(s.start.norm, s.stop.norm, s.step)
53
+
47
54
func `[]=`*[T](self: var PyList[T], s: PySlice, x: Sequence[T]) =
55
+ let s = normSlice(s, self.len)
48
56
if s.step == 1:
49
57
self[s.toNimSlice] = x
50
58
return
@@ -63,12 +71,17 @@ func `[]=`*[T](self: var PyList[T], s: PySlice,
63
71
for i in x: sequ.add i
64
72
self[s] = sequ
65
73
74
+ func append*[T](self: var PyList[T], x: T) = self.asSeq.add x
75
+ func `+=`*[T](self: var PyList[T], ls: openArray [T]) = self.asSeq.add ls
76
+ func `+=`*[T](self: var PyList[T], ls: PyList[T]) = self += ls.asSeq
77
+
66
78
func `[]`*[T](self: PyList[T], s: HSlice): PyList[T] =
67
79
newPyList system.`[]`(self.asSeq, s)
68
80
func `[]`*[T](self: PyList[T], s: BackwardsIndex): T =
69
81
system.`[]`(self.asSeq, s)
70
82
# PySlice1 is handled by: converter -> Slice
71
83
func `[]`*[T](self: PyList[T], s: PySlice): PyList[T] =
84
+ let s = normSlice(s, self.len)
72
85
if s.step == 1:
73
86
return self[s.toNimSlice]
74
87
result = newPyList[T]()
@@ -79,10 +92,6 @@ func `[]`*[T](self: PyList[T], s: PySlice): PyList[T] =
79
92
80
93
func reverse*(self: var PyList) = reverse(self.asSeq)
81
94
82
- func append*[T](self: var PyList[T], x: T) = self.asSeq.add x
83
- func `+=`*[T](self: var PyList[T], ls: openArray [T]) = self.asSeq.add ls
84
- func `+=`*[T](self: var PyList[T], ls: PyList[T]) = self += ls.asSeq
85
-
86
95
func pop*[T](self: var PyList[T]): T{.discardable.} = self.asSeq.pop()
87
96
func pop*[T](self: var PyList[T], index: int ): T{.discardable.} =
88
97
## `index` can be negative to index backwards.
0 commit comments