return (counter, (), thing)
def normalize_function_call_expression(counter, expression):
+ assert isinstance(expression, parsing.FurFunctionCallExpression)
+
prestatements = []
arguments = []
for argument in expression.arguments:
+ counter, argument_prestatements, normalized_argument = normalize_expression(counter, argument)
+
+ for s in argument_prestatements:
+ prestatements.append(s)
+
variable = '${}'.format(counter)
prestatements.append(NormalVariableAssignmentStatement(
variable=variable,
- expression=argument, # TODO Normalize each argument
+ expression=normalized_argument,
))
arguments.append(NormalVariableExpression(
variable=variable,
),
)
+def normalize_expression(counter, expression):
+ return {
+ parsing.FurFunctionCallExpression: normalize_function_call_expression,
+ parsing.FurInfixExpression: fake_normalization, # TODO This should not be faked
+ parsing.FurIntegerLiteralExpression: fake_normalization,
+ parsing.FurNegationExpression: fake_normalization,
+ parsing.FurStringLiteralExpression: fake_normalization,
+ parsing.FurSymbolExpression: fake_normalization,
+ }[type(expression)](counter, expression)
+
def normalize_expression_statement(counter, statement):
counter, prestatements, normalized = {
parsing.FurFunctionCallExpression: normalize_function_call_expression,