Fix to int to biggest int (#12066)
* fix to(Biggest)Int * kill toFloat magics as well
This commit is contained in:
parent
eff0837ff4
commit
d564130a3b
10 changed files with 43 additions and 64 deletions
|
|
@ -374,18 +374,6 @@ typedef char* NCSTRING;
|
|||
# define NIM_IMAN 0
|
||||
#endif
|
||||
|
||||
static N_INLINE(NI, float64ToInt32)(double x) {
|
||||
/* nowadays no hack necessary anymore */
|
||||
return x >= 0 ? (NI)(x+0.5) : (NI)(x-0.5);
|
||||
}
|
||||
|
||||
static N_INLINE(NI32, float32ToInt32)(float x) {
|
||||
/* nowadays no hack necessary anymore */
|
||||
return x >= 0 ? (NI32)(x+0.5) : (NI32)(x-0.5);
|
||||
}
|
||||
|
||||
#define float64ToInt64(x) ((NI64) (x))
|
||||
|
||||
#define NIM_STRLIT_FLAG ((NU)(1) << ((NIM_INTBITS) - 2)) /* This has to be the same as system.strlitFlag! */
|
||||
|
||||
#define STRING_LITERAL(name, str, length) \
|
||||
|
|
|
|||
|
|
@ -1132,57 +1132,57 @@ proc chr*(u: range[0..255]): char {.magic: "Chr", noSideEffect.}
|
|||
# built-in operators
|
||||
|
||||
when defined(nimNoZeroExtendMagic):
|
||||
proc ze*(x: int8): int =
|
||||
proc ze*(x: int8): int {.deprecated.} =
|
||||
## zero extends a smaller integer type to ``int``. This treats `x` as
|
||||
## unsigned.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
|
||||
cast[int](uint(cast[uint8](x)))
|
||||
|
||||
proc ze*(x: int16): int =
|
||||
proc ze*(x: int16): int {.deprecated.} =
|
||||
## zero extends a smaller integer type to ``int``. This treats `x` as
|
||||
## unsigned.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
cast[int](uint(cast[uint16](x)))
|
||||
|
||||
proc ze64*(x: int8): int64 =
|
||||
proc ze64*(x: int8): int64 {.deprecated.} =
|
||||
## zero extends a smaller integer type to ``int64``. This treats `x` as
|
||||
## unsigned.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
cast[int64](uint64(cast[uint8](x)))
|
||||
|
||||
proc ze64*(x: int16): int64 =
|
||||
proc ze64*(x: int16): int64 {.deprecated.} =
|
||||
## zero extends a smaller integer type to ``int64``. This treats `x` as
|
||||
## unsigned.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
cast[int64](uint64(cast[uint16](x)))
|
||||
|
||||
proc ze64*(x: int32): int64 =
|
||||
proc ze64*(x: int32): int64 {.deprecated.} =
|
||||
## zero extends a smaller integer type to ``int64``. This treats `x` as
|
||||
## unsigned.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
cast[int64](uint64(cast[uint32](x)))
|
||||
|
||||
proc ze64*(x: int): int64 =
|
||||
proc ze64*(x: int): int64 {.deprecated.} =
|
||||
## zero extends a smaller integer type to ``int64``. This treats `x` as
|
||||
## unsigned. Does nothing if the size of an ``int`` is the same as ``int64``.
|
||||
## (This is the case on 64 bit processors.)
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
cast[int64](uint64(cast[uint](x)))
|
||||
|
||||
proc toU8*(x: int): int8 =
|
||||
proc toU8*(x: int): int8 {.deprecated.} =
|
||||
## treats `x` as unsigned and converts it to a byte by taking the last 8 bits
|
||||
## from `x`.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
cast[int8](x)
|
||||
|
||||
proc toU16*(x: int): int16 =
|
||||
proc toU16*(x: int): int16 {.deprecated.} =
|
||||
## treats `x` as unsigned and converts it to an ``int16`` by taking the last
|
||||
## 16 bits from `x`.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
cast[int16](x)
|
||||
|
||||
proc toU32*(x: int64): int32 =
|
||||
proc toU32*(x: int64): int32 {.deprecated.} =
|
||||
## treats `x` as unsigned and converts it to an ``int32`` by taking the
|
||||
## last 32 bits from `x`.
|
||||
## **Deprecated since version 0.19.9**: Use unsigned integers instead.
|
||||
|
|
@ -2281,8 +2281,7 @@ type # these work for most platforms:
|
|||
PInt64* = ptr int64 ## An alias for ``ptr int64``.
|
||||
PInt32* = ptr int32 ## An alias for ``ptr int32``.
|
||||
|
||||
proc toFloat*(i: int): float {.
|
||||
magic: "ToFloat", noSideEffect, importc: "toFloat".}
|
||||
proc toFloat*(i: int): float {.noSideEffect, inline.} =
|
||||
## Converts an integer `i` into a ``float``.
|
||||
##
|
||||
## If the conversion fails, `ValueError` is raised.
|
||||
|
|
@ -2294,13 +2293,13 @@ proc toFloat*(i: int): float {.
|
|||
## b = 3.7
|
||||
##
|
||||
## echo a.toFloat + b # => 5.7
|
||||
float(i)
|
||||
|
||||
proc toBiggestFloat*(i: BiggestInt): BiggestFloat {.
|
||||
magic: "ToBiggestFloat", noSideEffect, importc: "toBiggestFloat".}
|
||||
proc toBiggestFloat*(i: BiggestInt): BiggestFloat {.noSideEffect, inline.} =
|
||||
## Same as `toFloat <#toFloat,int>`_ but for ``BiggestInt`` to ``BiggestFloat``.
|
||||
BiggestFloat(i)
|
||||
|
||||
proc toInt*(f: float): int {.
|
||||
magic: "ToInt", noSideEffect, importc: "toInt".}
|
||||
proc toInt*(f: float): int {.noSideEffect.} =
|
||||
## Converts a floating point number `f` into an ``int``.
|
||||
##
|
||||
## Conversion rounds `f` half away from 0, see
|
||||
|
|
@ -2314,10 +2313,11 @@ proc toInt*(f: float): int {.
|
|||
## doAssert toInt(0.49) == 0
|
||||
## doAssert toInt(0.5) == 1
|
||||
## doAssert toInt(-0.5) == -1 # rounding is symmetrical
|
||||
if f >= 0: int(f+0.5) else: int(f-0.5)
|
||||
|
||||
proc toBiggestInt*(f: BiggestFloat): BiggestInt {.
|
||||
magic: "ToBiggestInt", noSideEffect, importc: "toBiggestInt".}
|
||||
proc toBiggestInt*(f: BiggestFloat): BiggestInt {.noSideEffect.} =
|
||||
## Same as `toInt <#toInt,float>`_ but for ``BiggestFloat`` to ``BiggestInt``.
|
||||
if f >= 0: BiggestInt(f+0.5) else: BiggestInt(f-0.5)
|
||||
|
||||
proc addQuitProc*(quitProc: proc() {.noconv.}) {.
|
||||
importc: "atexit", header: "<stdlib.h>".}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue