Merge pull request #11740 from nim-lang/araq-fixes-11723

fixes #11723
This commit is contained in:
Andreas Rumpf
2019-07-16 09:08:15 +02:00
committed by GitHub
2 changed files with 20 additions and 2 deletions

View File

@@ -415,7 +415,7 @@ proc parseStandardFormatSpecifier*(s: string; start = 0;
raise newException(ValueError,
"invalid format string, cannot parse: " & s[i..^1])
proc formatValue*(result: var string; value: SomeInteger; specifier: string) =
proc formatValue*[T: SomeInteger](result: var string; value: T; specifier: string) =
## Standard format implementation for ``SomeInteger``. It makes little
## sense to call this directly, but it is required to exist
## by the ``&`` macro.
@@ -509,7 +509,7 @@ proc formatValue*(result: var string; value: string; specifier: string) =
setLen(value, runeOffset(value, spec.precision))
result.add alignString(value, spec.minimumWidth, spec.align, spec.fill)
proc formatValue[T](result: var string; value: T; specifier: string) =
proc formatValue[T: not SomeInteger](result: var string; value: T; specifier: string) =
mixin `$`
formatValue(result, $value, specifier)

View File

@@ -115,3 +115,21 @@ proc print_object(animalAddr: AnimalRef) =
echo fmt"Received {animalAddr[]}"
print_object(AnimalRef(name: "Foo", species: "Bar"))
# bug #11723
let pos: Positive = 64
doAssert fmt"{pos:3}" == " 64"
doAssert fmt"{pos:3b}" == "1000000"
doAssert fmt"{pos:3d}" == " 64"
doAssert fmt"{pos:3o}" == "100"
doAssert fmt"{pos:3x}" == " 40"
doAssert fmt"{pos:3X}" == " 40"
let nat: Natural = 64
doAssert fmt"{nat:3}" == " 64"
doAssert fmt"{nat:3b}" == "1000000"
doAssert fmt"{nat:3d}" == " 64"
doAssert fmt"{nat:3o}" == "100"
doAssert fmt"{nat:3x}" == " 40"
doAssert fmt"{nat:3X}" == " 40"