Skip to content

Commit d5e93e2

Browse files
committed
fix(py): list(dict) was on .keys() over .items()
1 parent 7457d84 commit d5e93e2

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

Objects/listobject.nim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import ./sliceobjectImpl
88
import ./hash
99
import iterobject
1010
import ./tupleobject
11+
import ./dictobject
1112
import ../Utils/[utils, compat]
1213

1314
declarePyType List(reprLock, mutable, tpToken):
@@ -27,7 +28,7 @@ genSequenceMagics "list",
2728
implListMagic, implListMethod,
2829
ofPyListObject, PyListObject,
2930
newPyListSimple, [mutable: read], [reprLockWithMsg"[...]", mutable: read],
30-
lsSeqToStr
31+
lsSeqToStr, initWithDictUsingPairs=true
3132

3233
implListMagic setitem, [mutable: write]:
3334
if arg1.ofPyIntObject:

Objects/tupleobject.nim

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ proc newPyTuple*(items: seq[PyObject]): PyTupleObject =
1919
# shallow copy
2020
result.items = items
2121

22+
proc newPyTuple*(items: openArray[PyObject]): PyTupleObject{.inline.} =
23+
newPyTuple @items
2224

2325
template genCollectMagics*(items,
2426
implNameMagic, newPyNameSimple,
@@ -59,7 +61,7 @@ template genSequenceMagics*(nameStr,
5961
implNameMagic, implNameMethod;
6062
ofPyNameObject, PyNameObject,
6163
newPyNameSimple; mutRead, mutReadRepr;
62-
seqToStr): untyped{.dirty.} =
64+
seqToStr; initWithDictUsingPairs=false): untyped{.dirty.} =
6365

6466
bind genCollectMagics
6567
genCollectMagics items,
@@ -102,8 +104,14 @@ template genSequenceMagics*(nameStr,
102104
if self.items.len != 0:
103105
self.items.setLen(0)
104106
if args.len == 1:
105-
pyForIn i, args[0]:
106-
self.items.add i
107+
let arg = args[0]
108+
template loop(a) =
109+
pyForIn i, a:
110+
self.items.add i
111+
when initWithDictUsingPairs:
112+
if arg.ofPyDictObject: loop tpMethod(Dict, items)(arg)
113+
else: loop arg
114+
else: loop arg
107115
pyNone
108116

109117

0 commit comments

Comments
 (0)