Skip to content

Commit 07e2049

Browse files
committed
[GR-13170] Kwargs are ignored during creating dict.
PullRequest: graalpython/336
2 parents 90ba46d + 43153f5 commit 07e2049

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_dict.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,12 @@ def __len__(self):
176176
assert set(d.keys()) == key_set, "unexpected keys: %s" % str(d.keys())
177177
assert set(d.values()) == { 97, 98, 99, 100 }, "unexpected values: %s" % str(d.values())
178178

179+
def test_init_kwargs():
180+
kwargs = {'ONE':'one', 'TWO' : 'two'}
181+
d = dict([(1,11),(2,22)], **kwargs)
182+
assert len(d) == 4, "invalid length, expected 4 but was %d" % len(d)
183+
assert set(d.keys()) == {1,2,'ONE','TWO'}, "unexpected keys: %s" % str(d.keys())
184+
assert set(d.values()) == { 11, 22, 'one', 'two' }, "unexpected values: %s" % str(d.values())
179185

180186
def test_custom_key_object0():
181187
class CollisionKey:

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/HashingStorageNodes.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ private SetItemNode getSetItemNode() {
359359

360360
@Specialization(guards = {"!isNoValue(iterable)", "!isPDict(iterable)", "!hasKeysAttribute(iterable)"})
361361
@TruffleBoundary
362-
public HashingStorage doSequence(PythonObject iterable, @SuppressWarnings("unused") PKeyword[] kwargs,
362+
public HashingStorage doSequence(PythonObject iterable, PKeyword[] kwargs,
363363
@Cached("create()") GetIteratorNode getIterator,
364364
@Cached("create()") FastConstructListNode createListNode,
365365
@Cached("create(__GETITEM__)") LookupAndCallBinaryNode getItemNode,
@@ -400,12 +400,14 @@ public HashingStorage doSequence(PythonObject iterable, @SuppressWarnings("unuse
400400
}
401401
}
402402

403-
HashingStorage storage = PDict.createNewStorage(isStringKey, elements.size());
403+
HashingStorage storage = PDict.createNewStorage(isStringKey, elements.size() + kwargs.length);
404404
for (int j = 0; j < elements.size(); j++) {
405405
PSequence element = elements.get(j);
406406
storage = getSetItemNode().execute(storage, getItemNode.executeObject(element, 0), getItemNode.executeObject(element, 1));
407407
}
408-
408+
if (kwargs.length > 0) {
409+
storage.addAll(new KeywordsStorage(kwargs));
410+
}
409411
return storage;
410412
}
411413

0 commit comments

Comments
 (0)