Exemple #1
0
def _COMPARE_OP(op, arg0, arg1):
    result = llfalse
    slow = 0
    ret_val = llpy_null
    if (arg0 != llpy_null) and (arg1 != llpy_null):
        if _PyInt_CheckExact(arg0) and _PyInt_CheckExact(arg1):
            arg0_l = PyInt_AsLong(arg0)
            arg1_l = PyInt_AsLong(arg1)
            if op == PyCmp_LT:
                result = arg0 < arg1
            elif op == PyCmp_LE:
                result = arg0 <= arg1
            elif op == PyCmp_EQ:
                result = arg0 == arg1
            elif op == PyCmp_NE:
                result = arg0 != arg1
            elif op == PyCmp_GT:
                result = arg0 > arg1
            elif op == PyCmp_GE:
                result = arg0 >= arg1
            elif op == PyCmp_IS:
                result = arg0 == arg1
            elif op == PyCmp_IS_NOT:
                result = arg0 != arg1
            else:
                slow = 1
        else:
            slow = 1
        if slow != 0:
            ret_val = _cmp_outcome(op, arg0, arg1)
        else:
            ret_val = PyBool_FromLong(lc_long(result))
    _DECREF(arg0)
    _DECREF(arg1)
    return ret_val
Exemple #2
0
def _cmp_outcome(op, arg0, arg1):
    result = llfalse
    result_i = lc_int(0)
    if op == PyCmp_IS:
        result = arg0 == arg1
    elif op == PyCmp_IS_NOT:
        result = arg0 != arg1
    elif op == PyCmp_IN:
        result_i = PySequence_Contains(arg1, arg0)
        if result_i < 0:
            return llpy_null
        result = li1(result_i)
    elif op == PyCmp_NOT_IN:
        result_i = PySequence_Contains(arg1, arg0)
        if result_i < 0:
            return llpy_null
        result = ~li1(result_i)
    elif op == PyCmp_EXC_MATCH:
        # XXX: Generate warnings
        result = li1(PyErr_GivenExceptionMatches(arg0, arg1))
    else:
        return PyObject_RichCompare(arg0, arg1, op)
    return PyBool_FromLong(lc_long(result))