Skip to content

Commit ec82704

Browse files
committed
fixes #14 - tuple assignments in for loop
1 parent 59a5461 commit ec82704

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

custom_components/pyscript/eval.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -447,10 +447,8 @@ async def ast_if(self, arg):
447447

448448
async def ast_for(self, arg):
449449
"""Execute for statement."""
450-
loop_var = await self.aeval(arg.target)
451-
loop_iter = await self.aeval(arg.iter)
452-
for i in loop_iter:
453-
self.sym_table[loop_var] = i
450+
for loop_var in await self.aeval(arg.iter):
451+
await self.recurse_assign(arg.target, loop_var)
454452
for arg1 in arg.body:
455453
val = await self.aeval(arg1)
456454
if isinstance(val, EvalStopFlow):

tests/custom_components/pyscript/test_unit_eval.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,29 @@
180180
["from math import sqrt as sqroot\nsqroot(1024)", 32],
181181
[
182182
"""
183+
d = {"x": 1, "y": 2, "z": 3}
184+
s = []
185+
for k, v in d.items():
186+
s.append(f"{k}: {v}")
187+
s
188+
""",
189+
["x: 1", "y: 2", "z: 3"],
190+
],
191+
[
192+
"""
193+
d = {"x": 1, "y": 2, "z": 3}
194+
i = 0
195+
s = []
196+
k = [0, 0, 0]
197+
for k[i], v in d.items():
198+
s.append([k.copy(), v])
199+
i += 1
200+
s
201+
""",
202+
[[["x", 0, 0], 1], [["x", "y", 0], 2], [["x", "y", "z"], 3]],
203+
],
204+
[
205+
"""
183206
def foo(bar=6):
184207
if bar == 5:
185208
return

0 commit comments

Comments
 (0)