Generate structures
[fur] / crossplatform_ir_generation.py
index c6adb95..fad6222 100644 (file)
@@ -97,6 +97,14 @@ def generate_lambda_expression(counters, expression):
 
     return flatten(referenced_entry_list_list), instruction_list
 
+def generate_list_construct_expression(counters, expression):
+    referenced_entry_list = ()
+    instruction_list = (CIRInstruction(
+        instruction='list',
+        argument=2,
+    ),)
+    return referenced_entry_list, instruction_list
+
 def generate_string_literal_expression(counters, expression):
     referenced_entry_list = ()
     instruction_list = (CIRInstruction(
@@ -106,6 +114,15 @@ def generate_string_literal_expression(counters, expression):
 
     return referenced_entry_list, instruction_list
 
+def generate_structure_literal_expression(counters, expression):
+    referenced_entry_list = ()
+    instruction_list = (CIRInstruction(
+        instruction='structure',
+        argument=expression.field_count,
+    ),)
+
+    return referenced_entry_list, instruction_list
+
 def generate_symbol_expression(counters, expression):
     referenced_entry_list = ()
     instruction_list = (CIRInstruction(
@@ -115,6 +132,15 @@ def generate_symbol_expression(counters, expression):
 
     return referenced_entry_list, instruction_list
 
+def generate_symbol_literal_expression(counters, expression):
+    referenced_entry_list = ()
+    instruction_list = (CIRInstruction(
+        instruction='push_value',
+        argument=generate_symbol_literal(expression.symbol),
+    ),)
+
+    return referenced_entry_list, instruction_list
+
 def generate_variable_expression(counters, expression):
     referenced_entry_list = ()
     instruction_list = (CIRInstruction(
@@ -130,8 +156,11 @@ def generate_expression(counters, expression):
         conversion.CPSIfElseExpression: generate_if_else_expression,
         conversion.CPSIntegerLiteralExpression: generate_integer_literal_expression,
         conversion.CPSLambdaExpression: generate_lambda_expression,
+        conversion.CPSListConstructExpression: generate_list_construct_expression,
         conversion.CPSStringLiteralExpression: generate_string_literal_expression,
+        conversion.CPSStructureLiteralExpression: generate_structure_literal_expression,
         conversion.CPSSymbolExpression: generate_symbol_expression,
+        conversion.CPSSymbolLiteralExpression: generate_symbol_literal_expression,
         conversion.CPSVariableExpression: generate_variable_expression,
     }[type(expression)](counters, expression)