Esempio n. 1
0
def op_div(left, right):
    '''
    :param left:
    :type left: :class:`~ExprArg`
    :param right:
    :type right: :class:`~ExprArg`
    :returns: :class:`~IntArg` 
    Returns left / right.
    '''
    assert isinstance(left, ExprArg)
    assert isinstance(right, ExprArg)
    lval = left.getInts()
    lval = [SMTLib.createIf(c, e, SMTLib.SMT_IntConst(0)) for (e, c) in lval]
    lval = SMTLib.createSum(lval)
    rval = right.getInts()
    rval = [SMTLib.createIf(c, e, SMTLib.SMT_IntConst(0)) for (e, c) in rval]
    rval = SMTLib.createSum(rval)
    return IntArg(
        SMTLib.SMT_Divide(lval, rval) if (
            (not isinstance(lval, SMTLib.SMT_IntConst)) or (
                not isinstance(rval, SMTLib.SMT_IntConst))
        ) else SMTLib.SMT_IntDivide(lval, rval))