Fixed crash (and now recognises correctly) {**d, "b": "b"}["b"]

This commit is contained in:
Claude
2018-09-22 22:18:17 +02:00
committed by Dave Halter
parent b9127147e4
commit 6bc79b4933
2 changed files with 22 additions and 6 deletions

View File

@@ -351,13 +351,19 @@ class SequenceLiteralContext(Sequence):
kv = []
iterator = iter(array_node.children)
for key in iterator:
op = next(iterator, None)
if op is None or op == ',':
kv.append(key) # A set.
else:
assert op == ':' # A dict.
kv.append((key, next(iterator)))
if key == "**":
# dict with pep 448 double-star unpacking
# for now ignoring the values imported by **
next(iterator)
next(iterator, None) # Possible comma.
else:
op = next(iterator, None)
if op is None or op == ',':
kv.append(key) # A set.
else:
assert op == ':' # A dict.
kv.append((key, next(iterator)))
next(iterator, None) # Possible comma.
return kv
else:
return [array_node]

View File

@@ -137,5 +137,15 @@ set_t2.c
# -----------------
# python >= 3.5
d = {'a': 3}
#? dict()
{**d}
#? str()
{**d, "b": "b"}["b"]
# Should resolve to int() but jedi is not smart enough yet
# Here to make sure it doesn't result in crash though
#? str()
{**d, "b": "b"}["a"]