Start implementing functions
[fur] / conversion.py
index fd469fa..29a40d7 100644 (file)
@@ -2,6 +2,13 @@ import collections
 
 import normalization
 
+CPSBuiltinExpression = collections.namedtuple(
+    'CPSBuiltinExpression',
+    (
+        'symbol',
+    ),
+)
+
 CPSFunctionCallExpression = collections.namedtuple(
     'CPSFunctionCallExpression',
     (
@@ -21,6 +28,7 @@ CPSIntegerLiteralExpression = collections.namedtuple(
 CPSLambdaExpression = collections.namedtuple(
     'CPSLambdaExpression',
     (
+        'name',
         'argument_name_list',
         'statement_list',
     ),
@@ -44,8 +52,6 @@ CPSStructureLiteralExpression = collections.namedtuple(
     'CPSStructureLiteralExpression',
     (
         'field_count',
-        'symbol_list_variable',
-        'value_list_variable',
     ),
 )
 
@@ -56,6 +62,13 @@ CPSSymbolExpression = collections.namedtuple(
     ),
 )
 
+CPSSymbolLiteralExpression = collections.namedtuple(
+    'CPSSymbolLiteralExpression',
+    (
+        'symbol',
+    ),
+)
+
 CPSVariableExpression = collections.namedtuple(
     'CPSVariableExpression',
     (
@@ -86,17 +99,8 @@ CPSExpressionStatement = collections.namedtuple(
     ),
 )
 
-CPSFunctionDefinitionStatement = collections.namedtuple(
-    'CPSFunctionDefinitionStatement',
-    (
-        'name',
-        'argument_name_list',
-        'statement_list',
-    )
-)
-
-CPSIfElseStatement = collections.namedtuple(
-    'CPSIfElseStatement',
+CPSIfElseExpression = collections.namedtuple(
+    'CPSIfElseExpression',
     (
         'condition_expression',
         'if_statement_list',
@@ -104,14 +108,6 @@ CPSIfElseStatement = collections.namedtuple(
     ),
 )
 
-CPSListAppendStatement = collections.namedtuple(
-    'CPSListAppendStatement',
-    (
-        'list_expression',
-        'item_expression',
-    ),
-)
-
 CPSPushStatement = collections.namedtuple(
     'CPSPushStatement',
     (
@@ -135,14 +131,6 @@ CPSSymbolArrayVariableInitializationStatement = collections.namedtuple(
     ),
 )
 
-CPSVariableReassignmentStatement = collections.namedtuple(
-    'CPSVariableReassignmentStatement',
-    (
-        'variable',
-        'expression',
-    ),
-)
-
 CPSProgram = collections.namedtuple(
     'CPSProgram',
     (
@@ -150,6 +138,9 @@ CPSProgram = collections.namedtuple(
     ),
 )
 
+def convert_builtin_expression(expression):
+    return CPSBuiltinExpression(symbol=expression.symbol)
+
 def convert_function_call_expression(expression):
     return CPSFunctionCallExpression(
         metadata=expression.metadata,
@@ -162,6 +153,7 @@ def convert_integer_literal_expression(expression):
 
 def convert_lambda_expression(expression):
     return CPSLambdaExpression(
+        name=expression.name,
         argument_name_list=expression.argument_name_list,
         statement_list=tuple(convert_statement(s) for s in expression.statement_list),
     )
@@ -175,34 +167,32 @@ def convert_string_literal_expression(expression):
 def convert_structure_literal_expression(expression):
     return CPSStructureLiteralExpression(
         field_count=expression.field_count,
-        symbol_list_variable=expression.symbol_list_variable,
-        value_list_variable=expression.value_list_variable,
     )
 
 def convert_symbol_expression(expression):
     return CPSSymbolExpression(symbol=expression.symbol)
 
+def convert_symbol_literal_expression(expression):
+    return CPSSymbolLiteralExpression(symbol=expression.symbol)
+
 def convert_variable_expression(expression):
     return CPSVariableExpression(variable=expression.variable)
 
 def convert_expression(expression):
     return {
+        normalization.NormalBuiltinExpression: convert_builtin_expression,
         normalization.NormalFunctionCallExpression: convert_function_call_expression,
+        normalization.NormalIfElseExpression: convert_if_else_expression,
         normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
         normalization.NormalLambdaExpression: convert_lambda_expression,
         normalization.NormalListConstructExpression: convert_list_construct_expression,
         normalization.NormalStringLiteralExpression: convert_string_literal_expression,
         normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
         normalization.NormalSymbolExpression: convert_symbol_expression,
+        normalization.NormalSymbolLiteralExpression: convert_symbol_literal_expression,
         normalization.NormalVariableExpression: convert_variable_expression,
     }[type(expression)](expression)
 
-def convert_array_variable_initialization_statement(statement):
-    return CPSArrayVariableInitializationStatement(
-        variable=statement.variable,
-        items=tuple(convert_expression(e) for e in statement.items),
-    )
-
 def convert_assignment_statement(statement):
     return CPSAssignmentStatement(
         target=statement.target,
@@ -214,27 +204,16 @@ def convert_expression_statement(statement):
         expression=convert_expression(statement.expression),
     )
 
-def convert_function_definition_statement(statement):
-    return CPSFunctionDefinitionStatement(
-        name=statement.name,
-        argument_name_list=statement.argument_name_list,
-        statement_list=tuple(convert_statement(s) for s in statement.statement_list),
-    )
+def convert_if_else_expression(statement):
+    if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list)
+    else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list)
 
-def convert_if_else_statement(statement):
-    return CPSIfElseStatement(
+    return CPSIfElseExpression(
         condition_expression=convert_expression(statement.condition_expression),
-        if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list),
-        else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list),
+        if_statement_list=if_statement_list,
+        else_statement_list=else_statement_list,
     )
 
-def convert_list_append_statement(statement):
-    return CPSListAppendStatement(
-        list_expression=convert_expression(statement.list_expression),
-        item_expression=convert_expression(statement.item_expression),
-    )
-
-
 def convert_push_statement(statement):
     return CPSPushStatement(
         expression=convert_expression(statement.expression),
@@ -246,33 +225,19 @@ def convert_variable_initialization_statement(statement):
         expression=convert_expression(statement.expression),
     )
 
-def convert_variable_reassignment_statement(statement):
-    return CPSVariableReassignmentStatement(
-        variable=statement.variable,
-        expression=convert_expression(statement.expression),
-    )
-
-def convert_symbol_array_variable_initialization_statement(statement):
-    return CPSSymbolArrayVariableInitializationStatement(
-        variable=statement.variable,
-        symbol_list=statement.symbol_list,
-    )
-
 def convert_statement(statement):
     return {
-        normalization.NormalArrayVariableInitializationStatement: convert_array_variable_initialization_statement,
         normalization.NormalAssignmentStatement: convert_assignment_statement,
         normalization.NormalExpressionStatement: convert_expression_statement,
-        normalization.NormalFunctionDefinitionStatement: convert_function_definition_statement,
-        normalization.NormalIfElseStatement: convert_if_else_statement,
-        normalization.NormalListAppendStatement: convert_list_append_statement,
         normalization.NormalPushStatement: convert_push_statement,
         normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement,
-        normalization.NormalVariableReassignmentStatement: convert_variable_reassignment_statement,
-        normalization.NormalSymbolArrayVariableInitializationStatement: convert_symbol_array_variable_initialization_statement,
     }[type(statement)](statement)
 
+def convert_statement_list(statement_list):
+    return tuple(convert_statement(s) for s in statement_list)
+
+
 def convert(program):
     return CPSProgram(
-        statement_list=tuple(convert_statement(s) for s in program.statement_list),
+        statement_list=convert_statement_list(program.statement_list),
     )