Name cleanup
parent
73b803a1b0
commit
ecbb8661ce
23
lamb/node.py
23
lamb/node.py
|
@ -36,7 +36,6 @@ class ReductionError(Exception):
|
||||||
def __init__(self, msg: str):
|
def __init__(self, msg: str):
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
|
|
||||||
|
|
||||||
class TreeWalker:
|
class TreeWalker:
|
||||||
"""
|
"""
|
||||||
An iterator that walks the "outline" of a tree
|
An iterator that walks the "outline" of a tree
|
||||||
|
@ -348,7 +347,6 @@ class History(ExpandableEndNode):
|
||||||
def copy(self):
|
def copy(self):
|
||||||
return History(runner = self.runner)
|
return History(runner = self.runner)
|
||||||
|
|
||||||
|
|
||||||
bound_counter = 0
|
bound_counter = 0
|
||||||
class Bound(EndNode):
|
class Bound(EndNode):
|
||||||
def __init__(self, name: str, *, forced_id = None, runner = None):
|
def __init__(self, name: str, *, forced_id = None, runner = None):
|
||||||
|
@ -590,7 +588,6 @@ def call_func(fn: Func, arg: Node):
|
||||||
n.parent.set_side(n.parent_side, clone(arg)) # type: ignore
|
n.parent.set_side(n.parent_side, clone(arg)) # type: ignore
|
||||||
return fn.left
|
return fn.left
|
||||||
|
|
||||||
|
|
||||||
# Do a single reduction step
|
# Do a single reduction step
|
||||||
def reduce(node: Node) -> tuple[ReductionType, Node]:
|
def reduce(node: Node) -> tuple[ReductionType, Node]:
|
||||||
if not isinstance(node, Node):
|
if not isinstance(node, Node):
|
||||||
|
@ -617,12 +614,19 @@ def reduce(node: Node) -> tuple[ReductionType, Node]:
|
||||||
return ReductionType.NOTHING, out
|
return ReductionType.NOTHING, out
|
||||||
|
|
||||||
|
|
||||||
|
def expand(node: Node, *, force_all = False) -> tuple[int, Node]:
|
||||||
|
"""
|
||||||
|
Expands expandable nodes in the given tree.
|
||||||
|
|
||||||
|
If force_all is false, this only expands
|
||||||
|
ExpandableEndnodes that have "always_expand" set to True.
|
||||||
|
|
||||||
|
If force_all is True, this expands ALL
|
||||||
|
ExpandableEndnodes.
|
||||||
|
"""
|
||||||
|
|
||||||
# Expand all expandable end nodes.
|
|
||||||
def finalize_macros(node: Node, *, force = False) -> tuple[int, Node]:
|
|
||||||
if not isinstance(node, Node):
|
if not isinstance(node, Node):
|
||||||
raise TypeError(f"I can't reduce a {type(node)}")
|
raise TypeError(f"I don't know what to do with a {type(node)}")
|
||||||
|
|
||||||
|
|
||||||
out = clone(node)
|
out = clone(node)
|
||||||
ptr = out
|
ptr = out
|
||||||
|
@ -632,7 +636,7 @@ def finalize_macros(node: Node, *, force = False) -> tuple[int, Node]:
|
||||||
while True:
|
while True:
|
||||||
if (
|
if (
|
||||||
isinstance(ptr, ExpandableEndNode) and
|
isinstance(ptr, ExpandableEndNode) and
|
||||||
(force or ptr.always_expand)
|
(force_all or ptr.always_expand)
|
||||||
):
|
):
|
||||||
if ptr.parent is None:
|
if ptr.parent is None:
|
||||||
ptr = ptr.expand()[1]
|
ptr = ptr.expand()[1]
|
||||||
|
@ -649,6 +653,7 @@ def finalize_macros(node: Node, *, force = False) -> tuple[int, Node]:
|
||||||
macro_expansions += 1
|
macro_expansions += 1
|
||||||
|
|
||||||
|
|
||||||
|
# Tree walk logic
|
||||||
if isinstance(ptr, EndNode):
|
if isinstance(ptr, EndNode):
|
||||||
from_side, ptr = ptr.go_up()
|
from_side, ptr = ptr.go_up()
|
||||||
elif isinstance(ptr, Func):
|
elif isinstance(ptr, Func):
|
||||||
|
@ -666,4 +671,4 @@ def finalize_macros(node: Node, *, force = False) -> tuple[int, Node]:
|
||||||
if ptr is node.parent:
|
if ptr is node.parent:
|
||||||
break
|
break
|
||||||
|
|
||||||
return macro_expansions, out # type: ignore
|
return macro_expansions, out
|
|
@ -136,8 +136,8 @@ class Runner:
|
||||||
("class:warn", "All macros will be expanded"),
|
("class:warn", "All macros will be expanded"),
|
||||||
("class:warn", "\n")
|
("class:warn", "\n")
|
||||||
]
|
]
|
||||||
m, node = lamb.node.finalize_macros(node, force = True)
|
m, node = lamb.node.expand(node, force_all = only_macro)
|
||||||
macro_expansions += m
|
macro_expansions += m
|
||||||
|
|
||||||
|
|
||||||
for i in status["free_variables"]:
|
for i in status["free_variables"]:
|
||||||
|
@ -173,12 +173,8 @@ class Runner:
|
||||||
if red_type == lamb.node.ReductionType.FUNCTION_APPLY:
|
if red_type == lamb.node.ReductionType.FUNCTION_APPLY:
|
||||||
macro_expansions += 1
|
macro_expansions += 1
|
||||||
|
|
||||||
# Expand all remaining macros
|
|
||||||
m, node = lamb.node.finalize_macros(node, force = only_macro)
|
|
||||||
macro_expansions += m
|
|
||||||
|
|
||||||
if k >= self.iter_update:
|
if k >= self.iter_update:
|
||||||
# Clear reduction counter
|
# Clear reduction counter if it was printed
|
||||||
print(" " * round(14 + math.log10(k)), end = "\r")
|
print(" " * round(14 + math.log10(k)), end = "\r")
|
||||||
|
|
||||||
out_text += [
|
out_text += [
|
||||||
|
@ -202,7 +198,7 @@ class Runner:
|
||||||
("class:text", str(node)), # type: ignore
|
("class:text", str(node)), # type: ignore
|
||||||
]
|
]
|
||||||
|
|
||||||
self.history.append(lamb.node.finalize_macros(node, force = True)[1])
|
self.history.append(lamb.node.expand(node, force_all = True)[1])
|
||||||
|
|
||||||
|
|
||||||
printf(
|
printf(
|
||||||
|
|
Reference in New Issue