Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 6 additions & 33 deletions custom_components/pyscript/eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -1385,16 +1385,7 @@ async def recurse_assign(self, lhs, val):
val_idx += 1
elif isinstance(lhs, ast.Subscript):
var = await self.aeval(lhs.value)
if isinstance(lhs.slice, ast.Index):
ind = await self.aeval(lhs.slice.value)
var[ind] = val
elif isinstance(lhs.slice, ast.Slice):
lower = await self.aeval(lhs.slice.lower) if lhs.slice.lower else None
upper = await self.aeval(lhs.slice.upper) if lhs.slice.upper else None
step = await self.aeval(lhs.slice.step) if lhs.slice.step else None
var[slice(lower, upper, step)] = val
else:
var[await self.aeval(lhs.slice)] = val
var[await self.aeval(lhs.slice)] = val
else:
var_name = await self.aeval(lhs)
if isinstance(var_name, EvalAttrSet):
Expand Down Expand Up @@ -1455,21 +1446,7 @@ async def ast_delete(self, arg):
for arg1 in arg.targets:
if isinstance(arg1, ast.Subscript):
var = await self.aeval(arg1.value)
if isinstance(arg1.slice, ast.Index):
ind = await self.aeval(arg1.slice.value)
for elt in ind if isinstance(ind, list) else [ind]:
del var[elt]
elif isinstance(arg1.slice, ast.Slice):
lower, upper, step = None, None, None
if arg1.slice.lower:
lower = await self.aeval(arg1.slice.lower)
if arg1.slice.upper:
upper = await self.aeval(arg1.slice.upper)
if arg1.slice.step:
step = await self.aeval(arg1.slice.step)
del var[slice(lower, upper, step)]
else:
del var[await self.aeval(arg1.slice)]
del var[await self.aeval(arg1.slice)]
elif isinstance(arg1, ast.Name):
if self.curr_func and arg1.id in self.curr_func.global_names:
if arg1.id in self.global_sym_table:
Expand Down Expand Up @@ -1857,13 +1834,6 @@ async def ast_subscript(self, arg):
"""Evaluate subscript."""
var = await self.aeval(arg.value)
if isinstance(arg.ctx, ast.Load):
if isinstance(arg.slice, ast.Index):
return var[await self.aeval(arg.slice)]
if isinstance(arg.slice, ast.Slice):
lower = (await self.aeval(arg.slice.lower)) if arg.slice.lower else None
upper = (await self.aeval(arg.slice.upper)) if arg.slice.upper else None
step = (await self.aeval(arg.slice.step)) if arg.slice.step else None
return var[slice(lower, upper, step)]
return var[await self.aeval(arg.slice)]
return None

Expand All @@ -1873,7 +1843,10 @@ async def ast_index(self, arg):

async def ast_slice(self, arg):
"""Evaluate slice."""
return await self.aeval(arg.value)
lower = (await self.aeval(arg.lower)) if arg.lower else None
upper = (await self.aeval(arg.upper)) if arg.upper else None
step = (await self.aeval(arg.step)) if arg.step else None
return slice(lower, upper, step)

async def ast_call(self, arg):
"""Evaluate function call."""
Expand Down
6 changes: 6 additions & 0 deletions tests/test_unit_eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@
["[0, 1, 2, 3, 4, 5, 6, 7, 8][:4:]", [0, 1, 2, 3]],
["[0, 1, 2, 3, 4, 5, 6, 7, 8][::2]", [0, 2, 4, 6, 8]],
["[0, 1, 2, 3, 4, 5, 6, 7, 8][::]", [0, 1, 2, 3, 4, 5, 6, 7, 8]],
["[0, 1, 2, 3, 4][4:1:-1]", [4, 3, 2]],
["a = 1; b = 6; c = 2; [0, 1, 2, 3, 4, 5, 6][a:b:c]", [1, 3, 5]],
["z = [0, 1, 2, 3, 4, 5, 6, 7, 8]; z[1:5:2] = [6, 8]; z", [0, 6, 2, 8, 4, 5, 6, 7, 8]],
["z = [0, 1, 2, 3, 4, 5, 6, 7, 8]; z[1:5] = [10, 11]; z", [0, 10, 11, 5, 6, 7, 8]],
["z = [0, 1, 2, 3, 4, 5, 6, 7, 8]; z[1::3] = [10, 11, 12]; z", [0, 10, 2, 3, 11, 5, 6, 12, 8]],
Expand All @@ -121,6 +123,10 @@
["z = [0, 1, 2, 3, 4, 5, 6, 7, 8]; z[:6:2] = [10, 11, 12]; z", [10, 1, 11, 3, 12, 5, 6, 7, 8]],
["z = [0, 1, 2, 3, 4, 5, 6, 7, 8]; z[:4:] = [10, 11, 12, 13]; z", [10, 11, 12, 13, 4, 5, 6, 7, 8]],
["z = [0, 1, 2, 3, 4, 5, 6, 7, 8]; z[::2] = [10, 11, 12, 13, 14]; z", [10, 1, 11, 3, 12, 5, 13, 7, 14]],
["x = [0, 1, 2, 3, 4]; x[1:4] = [9, 8]; x", [0, 9, 8, 4]],
["x = [0, 1, 2, 3, 4, 5]; x[::2] = [9, 8, 7]; x", [9, 1, 8, 3, 7, 5]],
["x = [0, 1, 2, 3, 4, 5]; del x[1:5:2]; x", [0, 2, 4, 5]],
["x = [0, 1, 2, 3, 4]; del x[::-2]; x", [1, 3]],
[
"z = [0, 1, 2, 3, 4, 5, 6, 7, 8]; z[::] = [10, 11, 12, 13, 14, 15, 16, 17]; z",
[10, 11, 12, 13, 14, 15, 16, 17],
Expand Down
Loading