diff options
author | Grzegorz Adam Hankiewicz <gradha@imap.cc> | 2013-07-16 01:11:20 +0200 |
---|---|---|
committer | Grzegorz Adam Hankiewicz <gradha@imap.cc> | 2013-07-16 01:11:20 +0200 |
commit | 67cea2b9b5328e636cc90c85050a0bd6b9811945 (patch) | |
tree | a6d912328fc0e54bcd3a0e9fd1c1ba5f5b93f4ba /lib/pure/parseutils.nim | |
parent | b5811cc73c88890d36a7fb1bdf586440fae1725f (diff) | |
download | Nim-67cea2b9b5328e636cc90c85050a0bd6b9811945.tar.gz |
Explains parseHex initialization quirk.
Diffstat (limited to 'lib/pure/parseutils.nim')
-rw-r--r-- | lib/pure/parseutils.nim | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/lib/pure/parseutils.nim b/lib/pure/parseutils.nim index 1c543e666..c11265bfd 100644 --- a/lib/pure/parseutils.nim +++ b/lib/pure/parseutils.nim @@ -27,8 +27,24 @@ proc toLower(c: char): char {.inline.} = proc parseHex*(s: string, number: var int, start = 0): int {. rtl, extern: "npuParseHex", noSideEffect.} = - ## parses a hexadecimal number and stores its value in ``number``. Returns - ## the number of the parsed characters or 0 in case of an error. + ## Parses a hexadecimal number and stores its value in ``number``. + ## + ## Returns the number of the parsed characters or 0 in case of an error. This + ## proc is sensitive to the already existing value of ``number`` and will + ## likely not do what you want unless you make sure ``number`` is zero. You + ## can use this feature to *chain* calls, though the result int will quickly + ## overflow. Example: + ## + ## .. code-block:: nimrod + ## var value = 0 + ## discard parseHex("0x38", value) + ## assert value == 56 + ## discard parseHex("0x34", value) + ## assert value == 56 * 256 + 52 + ## value = -1 + ## discard parseHex("0x38", value) + ## assert value == -200 + ## var i = start var foundDigit = false if s[i] == '0' and (s[i+1] == 'x' or s[i+1] == 'X'): inc(i, 2) @@ -383,6 +399,14 @@ iterator interpolatedFragments*(s: string): tuple[kind: TInterpolatedKind, when isMainModule: for k, v in interpolatedFragments("$test{} $this is ${an{ example}} "): echo "(", k, ", \"", v, "\")" + var value = 0 + discard parseHex("0x38", value) + assert value == 56 + discard parseHex("0x34", value) + assert value == 56 * 256 + 52 + value = -1 + discard parseHex("0x38", value) + assert value == -200 {.pop.} |