fix #20148 implicit compile time conversion int to ranged float cause… (#20698)

fix #20148 implicit compile time conversion int to ranged float causes compiler fatal error

(cherry picked from commit a51ed90c5d)
This commit is contained in:
Bung
2022-10-30 00:04:05 +08:00
committed by narimiran
parent b2b226bb28
commit fe1e09a881
2 changed files with 12 additions and 1 deletions

View File

@@ -450,9 +450,12 @@ proc opConv(c: PCtx; dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType):
else: int(src.intVal != 0)
of tyFloat..tyFloat64:
dest.ensureKind(rkFloat)
case skipTypes(srctyp, abstractRange).kind
let srcKind = skipTypes(srctyp, abstractRange).kind
case srcKind
of tyInt..tyInt64, tyUInt..tyUInt64, tyEnum, tyBool, tyChar:
dest.floatVal = toBiggestFloat(src.intVal)
elif src.kind == rkInt:
dest.floatVal = toBiggestFloat(src.intVal)
else:
dest.floatVal = src.floatVal
of tyObject:

View File

@@ -0,0 +1,8 @@
type Percent = range[0.0 .. 1.0]
# type Percent = float # using unlimited `float` works fine
proc initColor*(alpha: Percent): bool =
echo alpha
const moduleInstanceStyle = initColor(1)
# let moduleInstanceStyle = initColor(1) # using runtime conversion works fine