mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 22:10:33 +00:00
fix is with type/typedesc crashing the compiler (#23967)
fixes #22850
The `is` operator checks the type of the left hand side, and if it's
generic or if it's a `typedesc` type with no base type, it leaves it to
be evaluated later. But `typedesc` types with no base type precisely
describe the default typeclass `type`/`typeclass`, so this condition is
removed. Maybe at some point this represented an unresolved generic
type?
(cherry picked from commit 995081b56a)
This commit is contained in:
@@ -612,8 +612,7 @@ proc semIs(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||
n[1] = makeTypeSymNode(c, lhsType, n[1].info)
|
||||
lhsType = n[1].typ
|
||||
else:
|
||||
if lhsType.base.kind == tyNone or
|
||||
(c.inGenericContext > 0 and lhsType.base.containsGenericType):
|
||||
if c.inGenericContext > 0 and lhsType.base.containsGenericType:
|
||||
# BUGFIX: don't evaluate this too early: ``T is void``
|
||||
return
|
||||
|
||||
|
||||
@@ -165,3 +165,7 @@ block: # previously tisop.nim
|
||||
doAssert f.y.typeof is float
|
||||
doAssert f.z.typeof is float
|
||||
p(A, f)
|
||||
|
||||
block: # issue #22850
|
||||
doAssert not (type is int)
|
||||
doAssert not (typedesc is int)
|
||||
|
||||
Reference in New Issue
Block a user