Type fixes

master
Mark 2022-10-21 19:39:45 -07:00
parent b5d97cf5c6
commit ee744b5245
Signed by: Mark
GPG Key ID: AD62BB059C2AAEE4
2 changed files with 11 additions and 13 deletions

View File

@ -10,10 +10,6 @@ from runstatus import ReduceStatus
from runstatus import CommandStatus from runstatus import CommandStatus
class Runner: class Runner:
def __init__(self): def __init__(self):
self.macro_table = {} self.macro_table = {}
@ -43,7 +39,7 @@ class Runner:
i = 0 i = 0
macro_expansions = 0 macro_expansions = 0
while i < self.reduction_limit: while (self.reduction_limit is None) or (i < self.reduction_limit):
r = expr.reduce(self.macro_table) r = expr.reduce(self.macro_table)
expr = r.output expr = r.output
@ -64,7 +60,7 @@ class Runner:
return ReduceStatus( return ReduceStatus(
reduction_count = i - macro_expansions, reduction_count = i - macro_expansions,
stop_reason = StopReason.MAX_EXCEEDED, stop_reason = StopReason.MAX_EXCEEDED,
result = r.output result = r.output # type: ignore
) )
@ -89,9 +85,11 @@ class Runner:
return self.exec_command(e.name) return self.exec_command(e.name)
# If this line is a plain expression, reduce it. # If this line is a plain expression, reduce it.
else: elif isinstance(e, tokens.LambdaToken):
e.bind_variables() e.bind_variables()
return self.reduce_expression(e) return self.reduce_expression(e)
else:
raise TypeError(f"I don't know what to do with a {type(e)}")
def run_lines(self, lines: list[str]): def run_lines(self, lines: list[str]):

View File

@ -302,9 +302,9 @@ class lambda_func(LambdaToken):
# Bind variables inside this function. # Bind variables inside this function.
if isinstance(self.output, macro): if isinstance(self.output, macro) and placeholder is not None:
if self.output == placeholder: if self.output == placeholder:
self.output = val self.output = val # type: ignore
elif isinstance(self.output, lambda_func): elif isinstance(self.output, lambda_func):
self.output.bind_variables(placeholder, val) self.output.bind_variables(placeholder, val)
elif isinstance(self.output, lambda_apply): elif isinstance(self.output, lambda_apply):
@ -345,7 +345,7 @@ class lambda_func(LambdaToken):
calling_self = False calling_self = False
if bound_var is None: if bound_var is None:
calling_self = True calling_self = True
bound_var = self.input bound_var = self.input # type: ignore
new_out = self.output new_out = self.output
if isinstance(self.output, bound_variable): if isinstance(self.output, bound_variable):
if self.output == bound_var: if self.output == bound_var:
@ -353,7 +353,7 @@ class lambda_func(LambdaToken):
elif isinstance(self.output, lambda_func): elif isinstance(self.output, lambda_func):
new_out = self.output.apply(val, bound_var = bound_var) new_out = self.output.apply(val, bound_var = bound_var)
elif isinstance(self.output, lambda_apply): elif isinstance(self.output, lambda_apply):
new_out = self.output.sub_bound_var(val, bound_var = bound_var) new_out = self.output.sub_bound_var(val, bound_var = bound_var) # type: ignore
# If we're applying THIS function, # If we're applying THIS function,
# just give the output # just give the output
@ -430,7 +430,7 @@ class lambda_apply(LambdaToken):
# everything below should still work as expected. # everything below should still work as expected.
if isinstance(self.fn, macro) and placeholder is not None: if isinstance(self.fn, macro) and placeholder is not None:
if self.fn == placeholder: if self.fn == placeholder:
self.fn = val self.fn = val # type: ignore
elif isinstance(self.fn, lambda_func): elif isinstance(self.fn, lambda_func):
self.fn.bind_variables(placeholder, val) self.fn.bind_variables(placeholder, val)
elif isinstance(self.fn, lambda_apply): elif isinstance(self.fn, lambda_apply):
@ -438,7 +438,7 @@ class lambda_apply(LambdaToken):
if isinstance(self.arg, macro) and placeholder is not None: if isinstance(self.arg, macro) and placeholder is not None:
if self.arg == placeholder: if self.arg == placeholder:
self.arg = val self.arg = val # type: ignore
elif isinstance(self.arg, lambda_func): elif isinstance(self.arg, lambda_func):
self.arg.bind_variables(placeholder, val) self.arg.bind_variables(placeholder, val)
elif isinstance(self.arg, lambda_apply): elif isinstance(self.arg, lambda_apply):