added strutils.parseEnum; fixes #95
This commit is contained in:
parent
c7fc519fa3
commit
3ef9f54cc1
4 changed files with 28 additions and 4 deletions
|
|
@ -378,6 +378,22 @@ proc parseBool*(s: string): bool =
|
||||||
of "y", "yes", "true", "1", "on": result = true
|
of "y", "yes", "true", "1", "on": result = true
|
||||||
of "n", "no", "false", "0", "off": result = false
|
of "n", "no", "false", "0", "off": result = false
|
||||||
else: raise newException(EInvalidValue, "cannot interpret as a bool: " & s)
|
else: raise newException(EInvalidValue, "cannot interpret as a bool: " & s)
|
||||||
|
|
||||||
|
proc parseEnum*[T: enum](s: string): T =
|
||||||
|
## parses an enum ``T``. Raises ``EInvalidValue`` for an invalid value in
|
||||||
|
## `s`. The comparison is done in a style insensitive way.
|
||||||
|
for e in low(T)..high(T):
|
||||||
|
if cmpIgnoreStyle(s, $e) == 0:
|
||||||
|
return e
|
||||||
|
raise newException(EInvalidValue, "invalid enum value: " & s)
|
||||||
|
|
||||||
|
proc parseEnum*[T: enum](s: string, default: T): T =
|
||||||
|
## parses an enum ``T``. Uses `default` for an invalid value in
|
||||||
|
## `s`. The comparison is done in a style insensitive way.
|
||||||
|
for e in low(T)..high(T):
|
||||||
|
if cmpIgnoreStyle(s, $e) == 0:
|
||||||
|
return e
|
||||||
|
result = default
|
||||||
|
|
||||||
proc repeatChar*(count: int, c: Char = ' '): string {.noSideEffect,
|
proc repeatChar*(count: int, c: Char = ' '): string {.noSideEffect,
|
||||||
rtl, extern: "nsuRepeatChar".} =
|
rtl, extern: "nsuRepeatChar".} =
|
||||||
|
|
@ -1105,5 +1121,8 @@ when isMainModule:
|
||||||
|
|
||||||
doAssert "-ld a-ldz -ld".replaceWord("-ld") == " a-ldz "
|
doAssert "-ld a-ldz -ld".replaceWord("-ld") == " a-ldz "
|
||||||
doAssert "-lda-ldz -ld abc".replaceWord("-ld") == "-lda-ldz abc"
|
doAssert "-lda-ldz -ld abc".replaceWord("-ld") == "-lda-ldz abc"
|
||||||
|
|
||||||
|
type TMyEnum = enum enA, enB, enC, enuD, enE
|
||||||
|
doAssert parseEnum[TMyEnum]("enu_D") == enuD
|
||||||
|
|
||||||
|
doAssert parseEnum("invalid enum value", enC) == enC
|
||||||
|
|
|
||||||
|
|
@ -2232,4 +2232,3 @@ template eval*(blk: stmt): stmt =
|
||||||
|
|
||||||
when defined(initDebugger):
|
when defined(initDebugger):
|
||||||
initDebugger()
|
initDebugger()
|
||||||
|
|
||||||
|
|
|
||||||
1
todo.txt
1
todo.txt
|
|
@ -1,6 +1,7 @@
|
||||||
version 0.9.0
|
version 0.9.0
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
- test and document AVR/embedded systems better
|
||||||
- make GC realtime capable: GC_step(ms: int)
|
- make GC realtime capable: GC_step(ms: int)
|
||||||
- ``=`` should be overloadable; requires specialization for ``=``
|
- ``=`` should be overloadable; requires specialization for ``=``
|
||||||
- fix remaining generics bugs
|
- fix remaining generics bugs
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ Bugfixes
|
||||||
|
|
||||||
- Fixed a bug where the compiler would "optimize away" valid constant parts of
|
- Fixed a bug where the compiler would "optimize away" valid constant parts of
|
||||||
a string concatenation.
|
a string concatenation.
|
||||||
|
- Fixed a bug concerning implicit type conversions in ``case`` statements.
|
||||||
|
|
||||||
|
|
||||||
Library Additions
|
Library Additions
|
||||||
|
|
@ -24,6 +25,9 @@ Library Additions
|
||||||
compile time as if was a macro.
|
compile time as if was a macro.
|
||||||
- Added ``macros.emit`` that can emit an arbitrary computed string as nimrod
|
- Added ``macros.emit`` that can emit an arbitrary computed string as nimrod
|
||||||
code during compilation.
|
code during compilation.
|
||||||
|
- Added ``strutils.parseEnum``.
|
||||||
|
- The stdlib can now be avoided to a point where C code generation for 16bit
|
||||||
|
micro controllers is feasible.
|
||||||
|
|
||||||
|
|
||||||
Changes affecting backwards compatibility
|
Changes affecting backwards compatibility
|
||||||
|
|
@ -33,7 +37,7 @@ Changes affecting backwards compatibility
|
||||||
The ``system``, ``os``, ``osproc`` and ``memfiles`` modules use the wide
|
The ``system``, ``os``, ``osproc`` and ``memfiles`` modules use the wide
|
||||||
string versions of the WinAPI. Use the ``-d:useWinAnsi`` switch to revert
|
string versions of the WinAPI. Use the ``-d:useWinAnsi`` switch to revert
|
||||||
back to the old behaviour which uses the Ansi string versions.
|
back to the old behaviour which uses the Ansi string versions.
|
||||||
- ``static`` is now a keyword.
|
- ``static`` and ``do`` are now keywords.
|
||||||
- Templates now participate in overloading resolution which can break code that
|
- Templates now participate in overloading resolution which can break code that
|
||||||
uses templates in subtle ways. Use the new ``immediate`` pragma for templates
|
uses templates in subtle ways. Use the new ``immediate`` pragma for templates
|
||||||
to get a template of old behaviour.
|
to get a template of old behaviour.
|
||||||
|
|
@ -56,6 +60,7 @@ Language Additions
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
- Added explicit ``static`` sections for enforced compile time evaluation.
|
- Added explicit ``static`` sections for enforced compile time evaluation.
|
||||||
|
- Added an alternative notation for lambdas with ``do``.
|
||||||
- ``addr`` is now treated like a prefix operator syntactically.
|
- ``addr`` is now treated like a prefix operator syntactically.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue