Make stuctures and lists work
[fur] / crossplatform_ir_generation.py
index 09079cd..f9c7fa9 100644 (file)
@@ -36,7 +36,49 @@ def generate_string_literal(string):
 def generate_symbol_literal(symbol):
     return 'sym({})'.format(symbol)
 
+def generate_instruction_name_from_builtin(builtin):
+    try:
+        return {
+            # Environment operations
+            '__get__': 'get',
+
+            # Integer operations
+            '__add__': 'add',
+            '__integer_divide__': 'idiv',
+            '__modular_divide__': 'mod',
+            '__multiply__': 'mul',
+            '__negate__': 'neg',
+            '__subtract__': 'sub',
+
+            # Boolean operations
+            '__eq__': 'eq',
+            '__neq__': 'neq',
+            '__lt__': 'lt',
+            '__lte__': 'lte',
+            '__gt__': 'gt',
+            '__gte__': 'gte',
+
+            # String operations
+            '__concat__': 'concat',
+        }[builtin]
+
+    except KeyError:
+        import ipdb; ipdb.set_trace()
+
 def generate_function_call_expression(counters, expression):
+    if isinstance(expression.function_expression, conversion.CPSBuiltinExpression):
+        return (
+            (),
+            (
+                CIRInstruction(
+                    instruction=generate_instruction_name_from_builtin(
+                        expression.function_expression.symbol,
+                    ),
+                    argument=expression.argument_count,
+                ),
+            )
+        )
+
     referenced_entry_list, instruction_list = generate_expression(
         counters,
         expression.function_expression,