X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=crossplatform_ir_generation.py;fp=crossplatform_ir_generation.py;h=089b0766bc1dc9d6133803e5e96adfebde23e091;hp=09079cd361159140cc99afc0bbc508fa757f85cc;hb=b7a244b6319f5c770582283097f6184e5a6ec192;hpb=c45c61444aae3df328e4dc84acf7e31e58a1f64e diff --git a/crossplatform_ir_generation.py b/crossplatform_ir_generation.py index 09079cd..089b076 100644 --- a/crossplatform_ir_generation.py +++ b/crossplatform_ir_generation.py @@ -36,7 +36,33 @@ def generate_string_literal(string): def generate_symbol_literal(symbol): return 'sym({})'.format(symbol) +def generate_instruction_name_from_builtin(builtin): + try: + return { + '__add__': 'add', + '__subtract__': 'sub', + '__multiply__': 'mul', + '__integer_divide__': 'idiv', + '__modular_divide__': 'mod', + }[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,