def emit(emitter: EmitterInterface, args: List[str], dest: str) -> None: temp = emitter.temp_name() emitter.emit_declaration('int %s;' % temp) emitter.emit_lines( '%s = PyUnicode_Compare(%s, %s);' % (temp, args[0], args[1]), 'if (%s == -1 && PyErr_Occurred())' % temp, ' %s = 2;' % dest, 'else', ' %s = (%s %s);' % (dest, temp, comparison))
def emit_new(emitter: EmitterInterface, args: List[str], dest: str) -> None: # TODO: This would be better split into multiple smaller ops. emitter.emit_line('%s = PyList_New(%d); ' % (dest, len(args))) for arg in args: emitter.emit_line('Py_INCREF(%s);' % arg) emitter.emit_line('if (%s != NULL) {' % dest) for i, arg in enumerate(args): emitter.emit_line('PyList_SET_ITEM(%s, %s, %s);' % (dest, i, arg)) emitter.emit_line('}')
def emit(emitter: EmitterInterface, args: List[str], dest: str) -> None: comma_args = ', '.join(args) pre_comma_args = ', ' + comma_args if comma_args else '' emitter.emit_line( template.format(args=args, dest=dest, comma_args=comma_args, pre_comma_args=pre_comma_args, num_args=len(args)))
def emit(emitter: EmitterInterface, args: List[str], dest: str) -> None: temp = emitter.temp_name() emitter.emit_line(template.format(args=args, dest='int %s' % temp)) emitter.emit_lines( 'if (%s < 0)' % temp, ' %s = %s;' % (dest, emitter.c_error_value(bool_rprimitive)), 'else', ' %s = %s;' % (dest, temp))
def emit_len(emitter: EmitterInterface, args: List[str], dest: str) -> None: temp = emitter.temp_name() emitter.emit_declaration('long long %s;' % temp) emitter.emit_line('%s = PyList_GET_SIZE(%s);' % (temp, args[0])) emitter.emit_line('%s = CPyTagged_ShortFromLongLong(%s);' % (dest, temp))
def emit_len(emitter: EmitterInterface, args: List[str], dest: str) -> None: temp = emitter.temp_name() emitter.emit_declaration('Py_ssize_t %s;' % temp) emitter.emit_line('%s = PyTuple_GET_SIZE(%s);' % (temp, args[0])) emitter.emit_line('%s = CPyTagged_ShortFromSsize_t(%s);' % (dest, temp))
def emit_none(emitter: EmitterInterface, args: List[str], dest: str) -> None: emitter.emit_lines('{} = Py_None;'.format(dest), 'Py_INCREF({});'.format(dest))
def emit_new_dict(emitter: EmitterInterface, args: List[str], dest: str) -> None: if not args: emitter.emit_line('%s = PyDict_New();' % (dest,)) return emitter.emit_line('%s = CPyDict_Build(%s, %s);' % (dest, len(args) // 2, ', '.join(args)))
def emit(emitter: EmitterInterface, args: List[str], dest: str) -> None: emitter.emit_line( template.format(args=args, dest=dest, comma_args=', '.join(args)))