Example #1
0
def check_unary_arith(in_type, op):#{{{
    in_impli_cls = casts.findImplicitCastTypes(in_type.__class__)
    out_impli_cls = in_impli_cls
    
    out_impli_cls = [ocls for ocls in out_impli_cls \
                            if issubclass(ocls,rtypes.TypeNumber)]
    if(not out_impli_cls):
        return False
  
    out_impli_cls = rtypes.mostSpecializedTypesCls(out_impli_cls)
    assert len(out_impli_cls) == 1, "Multiple output types for " + \
    "arithmetic operation found: " + str(out_impli_cls)
    out_cls = out_impli_cls[0]
    
    return out_cls(in_type.has_missing)#}}}
Example #2
0
def castImplicitCommonTypeDual(type1, type2):
    if(type1 == type2):
        return type1

    in1_impli_cls = findImplicitCastTypes(type1.__class__)
    in2_impli_cls = findImplicitCastTypes(type2.__class__)
    out_impli_cls = in1_impli_cls & in2_impli_cls

    while out_impli_cls:
        out_cls = rtypes.mostSpecializedTypesCls(out_impli_cls)
        assert len(out_cls) == 1, \
            "Multiple implicit common types found"
        out_cls = out_cls[0]
        res = out_cls.commonType(type1, type2)
        if(not res is False):
            break
        out_impli_cls.discard(out_cls)
    return res