X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=c_generation.py;h=7fc416544f6775089843312f750dc367792003cc;hp=821048f7127c6d30e51d74170f949e957ae4f61c;hb=refs%2Fheads%2Fmaster;hpb=4efcfd00920263da31dc2bb216050df4041299e7 diff --git a/c_generation.py b/c_generation.py index 821048f..7fc4165 100644 --- a/c_generation.py +++ b/c_generation.py @@ -41,7 +41,7 @@ def generate_size_t_argument(argument): return '(size_t){}'.format(argument) def generate_string_argument(argument): - return argument + return argument[0] + ''.join('\\"' if ch == '"' else ch for ch in argument[1:-1]) + argument[-1] def generate_symbol_argument(argument): assert argument.startswith('sym(') and argument.endswith(')') @@ -52,14 +52,19 @@ def generate_argument(instruction): return { 'add': generate_null_argument_from(2), 'call': generate_size_t_argument, + 'close': generate_label_argument, + 'concat': generate_integer_argument, 'drop': generate_null_argument, 'end': generate_null_argument, 'eq': generate_null_argument_from(2), + 'field': generate_null_argument_from(2), + 'get': 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, + 'list': generate_integer_argument, 'lt': generate_null_argument_from(2), 'lte': generate_null_argument_from(2), 'mod': generate_null_argument_from(2), @@ -70,6 +75,9 @@ def generate_argument(instruction): 'push': generate_symbol_argument, 'push_integer': generate_integer_argument, 'push_string': generate_string_argument, + 'push_symbol': generate_symbol_argument, + 'return': generate_null_argument, + 'structure': generate_integer_argument, 'sub': generate_null_argument_from(2), }[instruction.instruction](instruction.argument)