5 CPSBuiltinExpression = collections.namedtuple(
6 'CPSBuiltinExpression',
12 CPSFunctionCallExpression = collections.namedtuple(
13 'CPSFunctionCallExpression',
16 'function_expression',
21 CPSIntegerLiteralExpression = collections.namedtuple(
22 'CPSIntegerLiteralExpression',
28 CPSLambdaExpression = collections.namedtuple(
29 'CPSLambdaExpression',
37 CPSListConstructExpression = collections.namedtuple(
38 'CPSListConstructExpression',
44 CPSStringLiteralExpression = collections.namedtuple(
45 'CPSStringLiteralExpression',
51 CPSStructureLiteralExpression = collections.namedtuple(
52 'CPSStructureLiteralExpression',
58 CPSSymbolExpression = collections.namedtuple(
59 'CPSSymbolExpression',
65 CPSSymbolLiteralExpression = collections.namedtuple(
66 'CPSSymbolLiteralExpression',
72 CPSVariableExpression = collections.namedtuple(
73 'CPSVariableExpression',
79 CPSArrayVariableInitializationStatement = collections.namedtuple(
80 'CPSArrayVariableInitializationStatement',
87 CPSAssignmentStatement = collections.namedtuple(
88 'CPSAssignmentStatement',
95 CPSExpressionStatement = collections.namedtuple(
96 'CPSExpressionStatement',
102 CPSIfElseExpression = collections.namedtuple(
103 'CPSIfElseExpression',
105 'condition_expression',
107 'else_statement_list',
111 CPSPushStatement = collections.namedtuple(
118 CPSVariableInitializationStatement = collections.namedtuple(
119 'CPSVariableInitializationStatement',
126 CPSSymbolArrayVariableInitializationStatement = collections.namedtuple(
127 'CPSSymbolArrayVariableInitializationStatement',
134 CPSProgram = collections.namedtuple(
141 def convert_builtin_expression(expression):
142 return CPSBuiltinExpression(symbol=expression.symbol)
144 def convert_function_call_expression(expression):
145 return CPSFunctionCallExpression(
146 metadata=expression.metadata,
147 function_expression=convert_expression(expression.function_expression),
148 argument_count=expression.argument_count,
151 def convert_integer_literal_expression(expression):
152 return CPSIntegerLiteralExpression(integer=expression.integer)
154 def convert_lambda_expression(expression):
155 return CPSLambdaExpression(
156 name=expression.name,
157 argument_name_list=expression.argument_name_list,
158 statement_list=tuple(convert_statement(s) for s in expression.statement_list),
161 def convert_list_construct_expression(expression):
162 return CPSListConstructExpression(allocate=expression.allocate)
164 def convert_string_literal_expression(expression):
165 return CPSStringLiteralExpression(string=expression.string)
167 def convert_structure_literal_expression(expression):
168 return CPSStructureLiteralExpression(
169 field_count=expression.field_count,
172 def convert_symbol_expression(expression):
173 return CPSSymbolExpression(symbol=expression.symbol)
175 def convert_symbol_literal_expression(expression):
176 return CPSSymbolLiteralExpression(symbol=expression.symbol)
178 def convert_variable_expression(expression):
179 return CPSVariableExpression(variable=expression.variable)
181 def convert_expression(expression):
183 normalization.NormalBuiltinExpression: convert_builtin_expression,
184 normalization.NormalFunctionCallExpression: convert_function_call_expression,
185 normalization.NormalIfElseExpression: convert_if_else_expression,
186 normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
187 normalization.NormalLambdaExpression: convert_lambda_expression,
188 normalization.NormalListConstructExpression: convert_list_construct_expression,
189 normalization.NormalStringLiteralExpression: convert_string_literal_expression,
190 normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
191 normalization.NormalSymbolExpression: convert_symbol_expression,
192 normalization.NormalSymbolLiteralExpression: convert_symbol_literal_expression,
193 normalization.NormalVariableExpression: convert_variable_expression,
194 }[type(expression)](expression)
196 def convert_assignment_statement(statement):
197 return CPSAssignmentStatement(
198 target=statement.target,
199 expression=convert_expression(statement.expression),
202 def convert_expression_statement(statement):
203 return CPSExpressionStatement(
204 expression=convert_expression(statement.expression),
207 def convert_if_else_expression(statement):
208 if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list)
209 else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list)
211 return CPSIfElseExpression(
212 condition_expression=convert_expression(statement.condition_expression),
213 if_statement_list=if_statement_list,
214 else_statement_list=else_statement_list,
217 def convert_push_statement(statement):
218 return CPSPushStatement(
219 expression=convert_expression(statement.expression),
222 def convert_variable_initialization_statement(statement):
223 return CPSVariableInitializationStatement(
224 variable=statement.variable,
225 expression=convert_expression(statement.expression),
228 def convert_statement(statement):
230 normalization.NormalAssignmentStatement: convert_assignment_statement,
231 normalization.NormalExpressionStatement: convert_expression_statement,
232 normalization.NormalPushStatement: convert_push_statement,
233 normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement,
234 }[type(statement)](statement)
236 def convert_statement_list(statement_list):
237 return tuple(convert_statement(s) for s in statement_list)
240 def convert(program):
242 statement_list=convert_statement_list(program.statement_list),