mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-03 11:42:33 +00:00
make parseEnum skip type aliases for enum type sym (#22727)
fixes #22726
(cherry picked from commit 51cb493b22)
This commit is contained in:
@@ -22,7 +22,8 @@ macro genEnumCaseStmt*(typ: typedesc, argSym: typed, default: typed,
|
||||
# a normalized string comparison to the `argSym` input.
|
||||
# string normalization is done using passed normalizer.
|
||||
let typ = typ.getTypeInst[1]
|
||||
let impl = typ.getImpl[2]
|
||||
let typSym = typ.getTypeImpl.getTypeInst # skip aliases etc to get type sym
|
||||
let impl = typSym.getImpl[2]
|
||||
expectKind impl, nnkEnumTy
|
||||
let normalizerNode = quote: `normalizer`
|
||||
expectKind normalizerNode, nnkSym
|
||||
|
||||
@@ -679,11 +679,22 @@ template main() =
|
||||
doAssert b == f2
|
||||
doAssert c == f3
|
||||
|
||||
block: # parseEnum TODO: merge above
|
||||
type MyEnum = enum enA, enB, enC, enuD, enE
|
||||
doAssert parseEnum[MyEnum]("enu_D") == enuD
|
||||
block:
|
||||
type MyEnum = enum enA, enB, enC, enuD, enE
|
||||
doAssert parseEnum[MyEnum]("enu_D") == enuD
|
||||
|
||||
doAssert parseEnum("invalid enum value", enC) == enC
|
||||
doAssert parseEnum("invalid enum value", enC) == enC
|
||||
|
||||
block: # issue #22726
|
||||
type SomeEnum = enum A, B, C
|
||||
|
||||
proc assignEnum(dest: var enum, s: string) =
|
||||
type ty = typeof(dest)
|
||||
dest = parseEnum[ty](s)
|
||||
|
||||
var v: SomeEnum
|
||||
v.assignEnum("A")
|
||||
doAssert v == A
|
||||
|
||||
block: # indentation
|
||||
doAssert 0 == indentation """
|
||||
|
||||
Reference in New Issue
Block a user