Skip to content

strformat regression with Positive and Natural #11723

@johnnovak

Description

@johnnovak

Problem

strformat causes compilation errors when a Natural or Positive type is attempted to be formatted with the integer presentation types present in the format string. It still works fine for plain integers.

Example

import strformat

let num = 64
echo fmt"{num:3}"   # compiles & works
echo fmt"{num:3b}"  # compiles & works
echo fmt"{num:3d}"  # compiles & works
echo fmt"{num:3o}"  # compiles & works
echo fmt"{num:3x}"  # compiles & works
echo fmt"{num:3X}"  # compiles & works

let pos: Positive = 64
echo fmt"{pos:3}"   # compiles & works
#echo fmt"{pos:3b}"  # doesn't compile
#echo fmt"{pos:3d}"  # doesn't compile
#echo fmt"{pos:3o}"  # doesn't compile
#echo fmt"{pos:3x}"  # doesn't compile
#echo fmt"{pos:3X}"  # doesn't compile

let nat: Natural = 64
echo fmt"{nat:3}"   # compiles & works
#echo fmt"{nat:3b}"  # doesn't compile
#echo fmt"{nat:3d}"  # doesn't compile
#echo fmt"{nat:3o}"  # doesn't compile
#echo fmt"{nat:3x}"  # doesn't compile
#echo fmt"{nat:3X}"  # doesn't compile

Error message

The error message is along these lines in all cases:

C:\dev\nim-0.20.0\lib\pure\strformat.nim(514) formatValue
C:\dev\nim-0.20.0\lib\pure\strformat.nim(504) formatValue
Error: unhandled exception: invalid type in format string for string, expected 's', but got x [ValueError]

Additional Information

  • Nim version:
Nim Compiler Version 0.20.0 [Windows: amd64]
Compiled at 2019-06-06
Copyright (c) 2006-2019 by Andreas Rumpf

git hash: e7471cebae2a404f3e4239f199f5a0c422484aac
active boot switches: -d:release
  • This was working perfectly fine on pre-0.20.0 releases.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions