X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=c_generation.py;h=0e66abb82d8883fe1b52c167e339bd9b2b99e2a9;hp=78a80b1d311403d6c4775d63080c3fbb3241c369;hb=5e3bb8aa55a25e2ced307e06f6579c027749ff0e;hpb=40cd5f86db884963c917943377ca4e6e8f419f8e diff --git a/c_generation.py b/c_generation.py index 78a80b1..0e66abb 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(')') @@ -53,14 +53,17 @@ def generate_argument(instruction): '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), + '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), @@ -71,7 +74,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)