Ejemplo n.º 1
0
    def union((int1, int2)):
        if int1.unsigned == int2.unsigned:
            knowntype = rarithmetic.compute_restype(int1.knowntype, int2.knowntype)
        else:
            t1 = int1.knowntype
            if t1 is bool:
                t1 = int
            t2 = int2.knowntype
            if t2 is bool:
                t2 = int

            if t2 is int:
                if int2.nonneg == False:
                    raise UnionError(int1, int2, "RPython cannot prove that these " + \
                            "integers are of the same signedness")
                knowntype = t1
            elif t1 is int:
                if int1.nonneg == False:
                    raise UnionError(int1, int2, "RPython cannot prove that these " + \
                            "integers are of the same signedness")
                knowntype = t2
            else:
                raise UnionError(int1, int2)
        return SomeInteger(nonneg=int1.nonneg and int2.nonneg,
                           knowntype=knowntype)
Ejemplo n.º 2
0
    def union((int1, int2)):
        if int1.unsigned == int2.unsigned:
            knowntype = rarithmetic.compute_restype(int1.knowntype,
                                                    int2.knowntype)
        else:
            t1 = int1.knowntype
            if t1 is bool:
                t1 = int
            t2 = int2.knowntype
            if t2 is bool:
                t2 = int

            if t2 is int:
                if int2.nonneg == False:
                    raise UnionError(int1, int2, "RPython cannot prove that these " + \
                            "integers are of the same signedness")
                knowntype = t1
            elif t1 is int:
                if int1.nonneg == False:
                    raise UnionError(int1, int2, "RPython cannot prove that these " + \
                            "integers are of the same signedness")
                knowntype = t2
            else:
                raise UnionError(int1, int2)
        return SomeInteger(nonneg=int1.nonneg and int2.nonneg,
                           knowntype=knowntype)
Ejemplo n.º 3
0
    def union((int1, int2)):
        if int1.unsigned == int2.unsigned:
            knowntype = rarithmetic.compute_restype(int1.knowntype, int2.knowntype)
        else:
            t1 = int1.knowntype
            if t1 is bool:
                t1 = int
            t2 = int2.knowntype
            if t2 is bool:
                t2 = int

            if t2 is int:
                if int2.nonneg == False:
                    raise UnionError, "Merging %s and a possibly negative int is not allowed" % t1
                knowntype = t1
            elif t1 is int:
                if int1.nonneg == False:
                    raise UnionError, "Merging %s and a possibly negative int is not allowed" % t2
                knowntype = t2
            else:
                raise UnionError, "Merging these types (%s, %s) is not supported" % (t1, t2)
        return SomeInteger(nonneg=int1.nonneg and int2.nonneg,
                           knowntype=knowntype)
Ejemplo n.º 4
0
 def and_((int1, int2)):
     knowntype = rarithmetic.compute_restype(int1.knowntype, int2.knowntype)
     return SomeInteger(nonneg=int1.nonneg or int2.nonneg,
                        knowntype=knowntype)
Ejemplo n.º 5
0
 def sub((int1, int2)):
     knowntype = rarithmetic.compute_restype(int1.knowntype, int2.knowntype)
     return SomeInteger(knowntype=knowntype)
Ejemplo n.º 6
0
 def and_((int1, int2)):
     knowntype = rarithmetic.compute_restype(int1.knowntype, int2.knowntype)
     return SomeInteger(nonneg=int1.nonneg or int2.nonneg,
                        knowntype=knowntype)
Ejemplo n.º 7
0
 def sub((int1, int2)):
     knowntype = rarithmetic.compute_restype(int1.knowntype, int2.knowntype)
     return SomeInteger(knowntype=knowntype)