+ NormalVariableExpression(variable=variable),
+ )
+
+def normalize_function_call_expression(counter, expression):
+ prestatements = []
+
+ for argument in expression.argument_list:
+ counter, argument_prestatements, normalized_argument = normalize_expression(counter, argument)
+
+ for s in argument_prestatements:
+ prestatements.append(s)
+
+ variable = '${}'.format(counter)
+ prestatements.append(
+ NormalVariableInitializationStatement(
+ variable=variable,
+ expression=normalized_argument,
+ )
+ )
+ prestatements.append(
+ NormalPushStatement(
+ expression=NormalVariableExpression(
+ variable=variable,
+ ),
+ ),
+ )
+ counter += 1
+
+ counter, function_prestatements, function_expression = normalize_expression(
+ counter,
+ expression.function,
+ )
+
+ for ps in function_prestatements:
+ prestatements.append(ps)
+
+ if not isinstance(function_expression, NormalVariableExpression):
+ function_variable = '${}'.format(counter)
+
+ prestatements.append(
+ NormalVariableInitializationStatement(
+ variable=function_variable,
+ expression=function_expression,
+ )
+ )
+
+ function_expression = NormalVariableExpression(variable=function_variable)
+ counter += 1
+
+ result_variable = '${}'.format(counter)
+
+ prestatements.append(
+ NormalVariableInitializationStatement(
+ variable=result_variable,
+ expression=NormalFunctionCallExpression(
+ metadata=expression.metadata,
+ function_expression=function_expression,
+ argument_count=len(expression.argument_list),
+ ),
+ )