Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
0
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)))
Ejemplo n.º 3
0
def emit_multiply_helper(emitter: EmitterInterface, dest: str, lst: str, num: str) -> None:
    temp = emitter.temp_name()
    emitter.emit_declaration('Py_ssize_t %s;' % temp)
    emitter.emit_lines(
        "%s = CPyTagged_AsSsize_t(%s);" % (temp, num),
        "if (%s == -1 && PyErr_Occurred())" % temp,
        "    CPyError_OutOfMemory();",
        "%s = PySequence_Repeat(%s, %s);" % (dest, lst, temp))
Ejemplo n.º 4
0
    def emit(emitter: EmitterInterface, args: List[str], dest: str) -> None:
        comma_args = ', '.join(args)
        comma_if_args = ', ' if comma_args else ''

        emitter.emit_line(
            template.format(args=args,
                            dest=dest,
                            comma_args=comma_args,
                            comma_if_args=comma_if_args,
                            num_args=len(args)))
Ejemplo n.º 5
0
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)))
    emitter.emit_line('if (likely(%s != NULL)) {' % dest)
    for i, arg in enumerate(args):
        emitter.emit_line('PyList_SET_ITEM(%s, %s, %s);' % (dest, i, arg))
    emitter.emit_line('}')
Ejemplo n.º 6
0
 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,
                                       comma_args=', '.join(args)))
     emitter.emit_lines('if (%s < 0)' % temp,
                        '    %s = %s;' % (dest, emitter.c_error_value(bool_rprimitive)),
                        'else',
                        '    %s = %s;' % (dest, temp))
Ejemplo n.º 7
0
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 = PyList_GET_SIZE(%s);' % (temp, args[0]))
    emitter.emit_line('%s = CPyTagged_ShortFromSsize_t(%s);' % (dest, temp))