Example #1
0
 def dehomogenize(self, w_vector, hint):
     if type(hint) is W_Fixnum and can_encode_int32(hint.value):
         new_strategy = FlonumTaggedVectorStrategy.singleton
         w_vector.set_strategy(new_strategy)
         w_vector.set_len(0)
     else:
         VectorStrategy.dehomogenize(self, w_vector, hint)
Example #2
0
 def dehomogenize(self, w_vector, hint):
     if type(hint) is W_Fixnum and can_encode_int32(hint.value):
         new_strategy = FlonumTaggedVectorStrategy.singleton
         w_vector.set_strategy(new_strategy)
         w_vector.set_len(0)
     else:
         VectorStrategy.dehomogenize(self, w_vector, hint)
Example #3
0
def fn_encode_nan(f1, i2):
    from rpython.rlib.longlong2float import can_encode_float, can_encode_int32
    from rpython.rlib.longlong2float import encode_int32_into_longlong_nan
    from rpython.rlib.longlong2float import decode_int32_from_longlong_nan
    from rpython.rlib.longlong2float import is_int32_from_longlong_nan
    assert can_encode_float(f1)
    assert can_encode_int32(i2)
    l1 = float2longlong(f1)
    l2 = encode_int32_into_longlong_nan(i2)
    assert not is_int32_from_longlong_nan(l1)
    assert is_int32_from_longlong_nan(l2)
    f1b = longlong2float(l1)
    assert f1b == f1 or (math.isnan(f1b) and math.isnan(f1))
    assert decode_int32_from_longlong_nan(l2) == i2
    return 42
def fn_encode_nan(f1, i2):
    from rpython.rlib.longlong2float import can_encode_float, can_encode_int32
    from rpython.rlib.longlong2float import encode_int32_into_longlong_nan
    from rpython.rlib.longlong2float import decode_int32_from_longlong_nan
    from rpython.rlib.longlong2float import is_int32_from_longlong_nan
    from rpython.rlib.rfloat import isnan
    assert can_encode_float(f1)
    assert can_encode_int32(i2)
    l1 = float2longlong(f1)
    l2 = encode_int32_into_longlong_nan(i2)
    assert not is_int32_from_longlong_nan(l1)
    assert is_int32_from_longlong_nan(l2)
    f1b = longlong2float(l1)
    assert f1b == f1 or (isnan(f1b) and isnan(f1))
    assert decode_int32_from_longlong_nan(l2) == i2
    return 42
Example #5
0
 def dehomogenize(self, w_vector, hint):
     val = self._storage(w_vector)[0]
     len = w_vector.length()
     hinttype = type(hint)
     valtype = type(val)
     if not len:
         newstrategy = ObjectVectorStrategy.singleton
     elif hinttype is valtype:
         if valtype is W_Fixnum:
             newstrategy = FixnumVectorStrategy.singleton
         elif valtype is W_Flonum:
             newstrategy = FlonumVectorStrategy.singleton
         else:
             newstrategy = ObjectVectorStrategy.singleton
     elif hinttype is W_Flonum and valtype is W_Fixnum and can_encode_int32(val.value):
         newstrategy = FlonumTaggedVectorStrategy.singleton
     else:
         newstrategy = ObjectVectorStrategy.singleton
     storage = newstrategy.create_storage_for_element(val, len)
     w_vector.set_strategy(newstrategy)
     w_vector.set_storage(storage)
Example #6
0
 def dehomogenize(self, w_vector, hint):
     val = self._storage(w_vector)[0]
     len = w_vector.length()
     hinttype = type(hint)
     valtype = type(val)
     if not len:
         newstrategy = ObjectVectorStrategy.singleton
     elif hinttype is valtype:
         if valtype is W_Fixnum:
             newstrategy = FixnumVectorStrategy.singleton
         elif valtype is W_Flonum:
             newstrategy = FlonumVectorStrategy.singleton
         else:
             newstrategy = ObjectVectorStrategy.singleton
     elif hinttype is W_Flonum and valtype is W_Fixnum and can_encode_int32(
             val.value):
         newstrategy = FlonumTaggedVectorStrategy.singleton
     else:
         newstrategy = ObjectVectorStrategy.singleton
     storage = newstrategy.create_storage_for_element(val, len)
     w_vector.set_strategy(newstrategy)
     w_vector.set_storage(storage)
Example #7
0
 def is_correct_type(self, w_vector, w_obj):
     if isinstance(w_obj, W_Fixnum) and can_encode_int32(w_obj.value):
         return True
     return isinstance(w_obj, W_Flonum)
Example #8
0
 def is_correct_type(self, w_vector, w_obj):
     if isinstance(w_obj, W_Fixnum) and can_encode_int32(w_obj.value):
         return True
     return isinstance(w_obj, W_Flonum)