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',
+
+ # Structure operations
+ '__field__': 'field',
+ }[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,