Skip to content

Commit ed4e04e

Browse files
committed
cleanup
1 parent 7ffb357 commit ed4e04e

File tree

4 files changed

+14
-24
lines changed

4 files changed

+14
-24
lines changed

edg/core/Builder.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@ class Builder:
1414
def __init__(self) -> None:
1515
self.stack: List[BaseBlock] = []
1616

17-
def push_element(self, elt: BaseBlock) -> None:
18-
self.stack.append(elt)
17+
def push_element(self, elt: BaseBlock) -> Optional[BaseBlock]:
18+
"""Pushes a new element onto the context stack, returning the previous top element.
19+
Ignores if the element is already on top of the stack."""
20+
prev_elt = self.get_enclosing_block()
21+
if not self.stack or self.stack[-1] is not elt: # prevent double-pushing
22+
self.stack.append(elt)
23+
return prev_elt
1924

2025
def pop_to(self, elt: Optional[BaseBlock]) -> None:
21-
self.stack.pop()
22-
assert self.get_enclosing_block() is elt
26+
while (elt is None and self.stack) or (elt is not None and self.stack[-1] is not elt):
27+
self.stack.pop()
2328

2429
def get_enclosing_block(self) -> Optional[BaseBlock]:
2530
if not self.stack:

edg/core/HierarchyBlock.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,7 @@ def remap_arg(arg_name: str, arg_type: Type[ConstraintExpr], arg_value: Any) ->
181181

182182
return arg_type()._bind(InitParamBinding(self, typed_arg_value))
183183

184-
if builder.get_enclosing_block() is not self:
185-
# test needed to make sure we don't double-push in nested super().__init__ calls
186-
# create wrapper ConstraintExpr in new object scope
187-
builder_prev = (True, builder.get_enclosing_block())
188-
builder.push_element(self)
189-
else:
190-
builder_prev = (False, None) # dummy value for try/finally
191-
184+
builder_prev = builder.push_element(self)
192185
try:
193186
# rebuild args and kwargs by traversing the args list
194187
new_args: List[Any] = []
@@ -228,8 +221,7 @@ def remap_arg(arg_name: str, arg_type: Type[ConstraintExpr], arg_value: Any) ->
228221

229222
orig_init(self, *new_args, **new_kwargs)
230223
finally:
231-
if builder_prev[0]:
232-
builder.pop_to(builder_prev[1])
224+
builder.pop_to(builder_prev)
233225

234226
new_cls.__init__ = functools.update_wrapper(wrapped_init, orig_init)
235227

edg/core/Link.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,11 @@ def __new__(cls, *args: Any, **kwargs: Any) -> Any:
2020
if '__init__' in new_cls.__dict__:
2121
orig_init = new_cls.__dict__['__init__']
2222
def wrapped_init(self, *args, **kwargs) -> None:
23-
if builder.get_enclosing_block() is not self:
24-
# test needed to make sure we don't double-push in nested super().__init__ calls
25-
# create wrapper ConstraintExpr in new object scope
26-
builder_prev = (True, builder.get_enclosing_block())
27-
builder.push_element(self)
28-
else:
29-
builder_prev = (False, None) # dummy value for try/finally
30-
23+
builder_prev = builder.push_element(self)
3124
try:
3225
orig_init(self, *args, **kwargs)
3326
finally:
34-
if builder_prev[0]:
35-
builder.pop_to(builder_prev[1])
27+
builder.pop_to(builder_prev)
3628

3729
new_cls.__init__ = functools.update_wrapper(wrapped_init, orig_init)
3830

edg/core/Ports.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
if TYPE_CHECKING:
1616
from .Blocks import BaseBlock
17+
from .Link import Link
1718
from .PortBlocks import PortBridge, PortAdapter
1819

1920

0 commit comments

Comments
 (0)