+def transform_function_definition_statement(accumulators, statement):
+ # TODO Allow defining the same function in different contexts
+ if any(fd.name == statement.name for fd in accumulators.function_definition_list):
+ raise Exception('A function with name "{}" already exists'.format(statement.name))
+
+ accumulators.function_definition_list.append(CFunctionDefinition(
+ name=statement.name,
+ statement_list=tuple(transform_statement(accumulators, s) for s in statement.statement_list)
+ ))
+
+ return CFunctionDeclaration(name=statement.name)
+