Start implementing functions
[fur] / c_generation.py
index a1e4e59..78a80b1 100644 (file)
@@ -22,6 +22,9 @@ def generate_integer_argument(argument):
     assert isinstance(argument, int)
     return '(int32_t){}'.format(argument)
 
+def generate_label_argument(argument):
+    return 'LABEL_{}'.format(argument)
+
 def generate_null_argument(argument):
     assert argument is None
     return 'NULL'
@@ -49,12 +52,15 @@ def generate_argument(instruction):
         return {
             'add': generate_null_argument_from(2),
             'call': generate_size_t_argument,
+            'close': generate_label_argument,
             'drop': generate_null_argument,
             'end': generate_null_argument,
             'eq': generate_null_argument_from(2),
             'gt': generate_null_argument_from(2),
             'gte': generate_null_argument_from(2),
             'idiv': generate_null_argument_from(2),
+            'jump': generate_label_argument,
+            'jump_if_false': generate_label_argument,
             'lt': generate_null_argument_from(2),
             'lte': generate_null_argument_from(2),
             'mod': generate_null_argument_from(2),
@@ -65,6 +71,7 @@ def generate_argument(instruction):
             'push': generate_symbol_argument,
             'push_integer': generate_integer_argument,
             'push_string': generate_string_argument,
+            'return': generate_null_argument,
             'sub': generate_null_argument_from(2),
         }[instruction.instruction](instruction.argument)