diff options
-rw-r--r-- | compiler/types.nim | 10 | ||||
-rw-r--r-- | tests/enum/tenum_self.nim | 11 |
2 files changed, 17 insertions, 4 deletions
diff --git a/compiler/types.nim b/compiler/types.nim index 7e56f5002..9875f5e1b 100644 --- a/compiler/types.nim +++ b/compiler/types.nim @@ -747,8 +747,9 @@ proc firstOrd*(conf: ConfigRef; t: PType): Int128 = if t.len > 0 and t[0] != nil: result = firstOrd(conf, t[0]) else: - assert(t.n[0].kind == nkSym) - result = toInt128(t.n[0].sym.position) + if t.n.len > 0: + assert(t.n[0].kind == nkSym) + result = toInt128(t.n[0].sym.position) of tyGenericInst, tyDistinct, tyTypeDesc, tyAlias, tySink, tyStatic, tyInferred, tyUserTypeClasses, tyLent: result = firstOrd(conf, lastSon(t)) @@ -804,8 +805,9 @@ proc lastOrd*(conf: ConfigRef; t: PType): Int128 = of tyUInt64: result = toInt128(0xFFFFFFFFFFFFFFFF'u64) of tyEnum: - assert(t.n[^1].kind == nkSym) - result = toInt128(t.n[^1].sym.position) + if t.n.len > 0: + assert(t.n[^1].kind == nkSym) + result = toInt128(t.n[^1].sym.position) of tyGenericInst, tyDistinct, tyTypeDesc, tyAlias, tySink, tyStatic, tyInferred, tyUserTypeClasses, tyLent: result = lastOrd(conf, lastSon(t)) diff --git a/tests/enum/tenum_self.nim b/tests/enum/tenum_self.nim new file mode 100644 index 000000000..27b1c3204 --- /dev/null +++ b/tests/enum/tenum_self.nim @@ -0,0 +1,11 @@ +discard """ + errormsg: "1 can't be converted to ErrorFoo" +""" + + +type + Foo = enum + Bar = 0.Foo + + ErrorFoo = enum + eBar = 1.ErrorFoo |