diff options
Diffstat (limited to 'compiler/semgnrc.nim')
-rw-r--r-- | compiler/semgnrc.nim | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/compiler/semgnrc.nim b/compiler/semgnrc.nim index 8efc8a94e..e3a8daf99 100644 --- a/compiler/semgnrc.nim +++ b/compiler/semgnrc.nim @@ -59,9 +59,6 @@ template isMixedIn(sym): bool = template canOpenSym(s): bool = {withinMixin, withinConcept} * flags == {withinMixin} and s.id notin ctx.toBind -proc newOpenSym*(n: PNode): PNode {.inline.} = - result = newTreeI(nkOpenSym, n.info, n) - proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym, ctx: var GenericCtx; flags: TSemGenericFlags, isAmbiguous: bool, @@ -77,8 +74,11 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym, else: result = symChoice(c, n, s, scOpen) if canOpenSym(s): - if genericsOpenSym in c.features: - result = newOpenSym(result) + if {openSym, genericsOpenSym} * c.features != {}: + if result.kind == nkSym: + result = newOpenSym(result) + else: + result.typ = nil else: result.flags.incl nfDisabledOpenSym result.typ = nil @@ -112,7 +112,7 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym, # we are in a generic context and `prepareNode` will be called result = newSymNodeTypeDesc(s, c.idgen, n.info) if canOpenSym(result.sym): - if genericsOpenSym in c.features: + if {openSym, genericsOpenSym} * c.features != {}: result = newOpenSym(result) else: result.flags.incl nfDisabledOpenSym @@ -122,7 +122,7 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym, else: result = newSymNodeTypeDesc(s, c.idgen, n.info) if canOpenSym(result.sym): - if genericsOpenSym in c.features: + if {openSym, genericsOpenSym} * c.features != {}: result = newOpenSym(result) else: result.flags.incl nfDisabledOpenSym @@ -141,7 +141,7 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym, return result = newSymNodeTypeDesc(s, c.idgen, n.info) if canOpenSym(result.sym): - if genericsOpenSym in c.features: + if {openSym, genericsOpenSym} * c.features != {}: result = newOpenSym(result) else: result.flags.incl nfDisabledOpenSym @@ -153,7 +153,7 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym, # we are in a generic context and `prepareNode` will be called result = newSymNodeTypeDesc(s, c.idgen, n.info) if canOpenSym(result.sym): - if genericsOpenSym in c.features: + if {openSym, genericsOpenSym} * c.features != {}: result = newOpenSym(result) else: result.flags.incl nfDisabledOpenSym @@ -164,7 +164,7 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym, else: result = newSymNode(s, n.info) if canOpenSym(result.sym): - if genericsOpenSym in c.features: + if {openSym, genericsOpenSym} * c.features != {}: result = newOpenSym(result) else: result.flags.incl nfDisabledOpenSym |