mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +00:00
Continue bool conversion fixing (#13751)
* continue fixing #13744 * improve style * improve test Co-authored-by: cooldome <ariabushenko@bk.ru>
This commit is contained in:
@@ -147,7 +147,9 @@ proc checkConvertible(c: PContext, targetTyp: PType, src: PNode): TConvStatus =
|
||||
result = checkConversionBetweenObjects(d.skipTypes(abstractInst), s.skipTypes(abstractInst), pointers)
|
||||
elif (targetBaseTyp.kind in IntegralTypes) and
|
||||
(srcBaseTyp.kind in IntegralTypes):
|
||||
if targetTyp.isOrdinalType:
|
||||
if targetTyp.kind == tyBool:
|
||||
discard "convOk"
|
||||
elif targetTyp.isOrdinalType:
|
||||
if src.kind in nkCharLit..nkUInt64Lit and
|
||||
src.getInt notin firstOrd(c.config, targetTyp)..lastOrd(c.config, targetTyp):
|
||||
result = convNotInRange
|
||||
|
||||
@@ -433,6 +433,15 @@ proc foldConv(n, a: PNode; g: ModuleGraph; check = false): PNode =
|
||||
# echo high(int64)
|
||||
# writeStackTrace()
|
||||
case dstTyp.kind
|
||||
of tyBool:
|
||||
case srcTyp.kind
|
||||
of tyFloat..tyFloat64:
|
||||
result = newIntNodeT(int(getFloat(a) != 0.0), n, g)
|
||||
of tyChar, tyUInt..tyUInt64, tyInt..tyInt64:
|
||||
result = newIntNodeT(int(a.getOrdValue != 0), n, g)
|
||||
else:
|
||||
result = a
|
||||
result.typ = n.typ
|
||||
of tyInt..tyInt64, tyUInt..tyUInt64:
|
||||
case srcTyp.kind
|
||||
of tyFloat..tyFloat64:
|
||||
|
||||
@@ -52,5 +52,12 @@ proc test_conv_to_bool =
|
||||
|
||||
|
||||
static:
|
||||
doAssert(bool(0) == false)
|
||||
doAssert(bool(-1) == true)
|
||||
doAssert(bool(2) == true)
|
||||
doAssert(bool(NaN) == true)
|
||||
doAssert(bool(0.0) == false)
|
||||
doAssert(bool(-0.0) == false)
|
||||
test_conv_to_bool()
|
||||
test_conv_to_bool()
|
||||
test_conv_to_bool()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user