Skip to content

Commit 54d5d79

Browse files
committed
fixup: tuple had []=
1 parent 5ae1a16 commit 54d5d79

File tree

5 files changed

+29
-12
lines changed

5 files changed

+29
-12
lines changed

Objects/exceptionsImpl.nim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ proc fromBltinSyntaxError*(e: SyntaxError, fileName: PyStrObject): PyExceptionOb
8686
excpObj.traceBacks.add (PyObject fileName, PyObject nil, e.lineNo, e.colNo)
8787
excpObj
8888

89-
proc setString*(e: PyBaseExceptionObject, m: PyStrObject) = e.args[0] = m
89+
proc setString*(e: PyBaseExceptionObject, m: PyStrObject) =
90+
withSetItem e.args, acc: acc[0] = m
9091
proc setString*(e: PyBaseExceptionObject, m: string) =
9192
## `_PyErr_SetString`
9293
e.setString newPyStr m

Objects/listobject.nim

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,14 @@ template genMutableSequenceMethods*(mapper, unmapper, S, Ele, beforeAppend){.dir
6666

6767
`impl S Magic` iadd, [mutable: write]: self.extend other
6868

69+
70+
proc `[]=`*(self: `Py S Object`; i: int, v: Ele){.inline.} = self.items[i] = v
71+
proc `[]=`*(self: `Py S Object`; i: HSlice, v: seq[Ele]){.inline.} = self.items[i] = v
72+
6973
`impl S Magic` setitem, [mutable: write]:
7074
if arg1.ofPyIntObject:
7175
let idx = getIndex(PyIntObject(arg1), self.len)
72-
self.items[idx] = arg2.mapper
76+
self[idx] = arg2.mapper
7377
return pyNone
7478
if ofPySliceObject(arg1):
7579
let slice = PySliceObject(arg1)
@@ -82,7 +86,7 @@ template genMutableSequenceMethods*(mapper, unmapper, S, Ele, beforeAppend){.dir
8286
var ls: seq[Ele]
8387
pyForIn it, iterableToLoop:
8488
ls.add it.mapper
85-
self.items[nslice] = ls
89+
self[nslice] = ls
8690
else:
8791
let (iterable, nextMethod) = getIterableWithCheck(iterableToLoop)
8892
if iterable.isThrownException:
@@ -93,7 +97,7 @@ template genMutableSequenceMethods*(mapper, unmapper, S, Ele, beforeAppend){.dir
9397
break
9498
if it.isThrownException:
9599
return it
96-
self.items[i] = it.mapper
100+
self[i] = it.mapper
97101
return pyNone
98102
return newIndexTypeError(newPyAscii"list", arg1)
99103

Objects/tupleobjectImpl.nim

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,17 @@ proc hashCollection*[T: PyObject](self: T): Hash =
169169
self.privateHash = result
170170
self.setHash = true
171171

172-
proc hash*(self: PyTupleObject): Hash = self.hashCollection
172+
proc hash*(self: PyTupleObject): Hash = self.hashCollection
173+
proc clearhash(self: PyTupleObject){.inline.} =
174+
## used after `[]=` to self.items
175+
self.setHash = false
176+
template withSetitem*(self: PyTupleObject; acc; body) =
177+
## unstable.
178+
## take place of `PyTuple_SetItem`
179+
bind clearhash
180+
template acc: untyped = self.items
181+
body
182+
clearhash self
173183

174184
implTupleMagic hash:
175185
handleHashExc:

Python/bltinmodule/iterobjects.nim

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ proc next*(self): PyObject =
103103
if tuplesize == 0:
104104
return newStopIterError()
105105

106-
loopIter(self.ittuple, "zip"):
107-
res[i] = item
106+
res.withSetitem acc:
107+
loopIter(self.ittuple, "zip"):
108+
acc[i] = item
108109
return res
109110

110111

Python/sysmodule/infos.nim

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ template genInfo(pureNameId; qualname: string, docStr; fields; n; doIt){.dirty.}
3535
retIfExc maye
3636
let it{.inject.} = PyStructSequenceObject maye
3737

38-
var pos = 0
39-
template SetFlag(flag) =
40-
it[pos] = flag
41-
pos.inc
42-
doIt
38+
it.withSetItem acc:
39+
var pos = 0
40+
template SetFlag(flag) =
41+
acc[pos] = flag
42+
pos.inc
43+
doIt
4344
it
4445

4546
template genInfo(pureNameId; qualname: string, docStr; fields; doIt){.dirty.} =

0 commit comments

Comments
 (0)