summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semexprs.nim7
-rw-r--r--compiler/semgnrc.nim2
-rw-r--r--tests/generics/tmacroinjectedsym.nim2
3 files changed, 8 insertions, 3 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 1c197c5e2..14d154ef4 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -173,8 +173,10 @@ proc semOpenSym(c: PContext, n: PNode, s: PSym, flags: TExprFlags, expectedType:
   # enough to replace the original
   # for `nkOpenSymChoice`, the first found symbol must be non-overloadable,
   # since otherwise we have to use regular `nkOpenSymChoice` functionality
+  # but of the overloadable sym kinds, semExpr does not handle skModule, skMacro, skTemplate
+  # as overloaded in the case where `nkIdent` finds them first
   if s2 != nil and not c.isAmbiguous and
-      ((s == nil and s2.kind notin OverloadableSyms) or
+      ((s == nil and s2.kind notin OverloadableSyms-{skModule, skMacro, skTemplate}) or
         (s != nil and s2 != s)):
     # only consider symbols defined under current proc:
     var o = s2.owner
@@ -201,6 +203,9 @@ proc semOpenSym(c: PContext, n: PNode, s: PSym, flags: TExprFlags, expectedType:
           message(c.config, n.info, warnGenericsIgnoredInjection, msg)
           break
       o = o.owner
+  if s == nil:
+    # set symchoice node type back to None
+    n.typ = newTypeS(tyNone, c)
 
 proc inlineConst(c: PContext, n: PNode, s: PSym): PNode {.inline.} =
   result = copyTree(s.astdef)
diff --git a/compiler/semgnrc.nim b/compiler/semgnrc.nim
index e914cf00d..b5faac979 100644
--- a/compiler/semgnrc.nim
+++ b/compiler/semgnrc.nim
@@ -74,7 +74,7 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym,
       result = symChoice(c, n, s, scOpen)
       if canOpenSym(s):
         result.flags.incl nfOpenSym
-        if result.kind == nkSym: result.typ = nil
+        result.typ = nil
   case s.kind
   of skUnknown:
     # Introduced in this pass! Leave it as an identifier.
diff --git a/tests/generics/tmacroinjectedsym.nim b/tests/generics/tmacroinjectedsym.nim
index 5271a667f..a2771a9e8 100644
--- a/tests/generics/tmacroinjectedsym.nim
+++ b/tests/generics/tmacroinjectedsym.nim
@@ -171,4 +171,4 @@ block: # issue #23865
     let x = f().valueOr:
       return $error
     "ok"
-  doAssert g(int) == "error"
+  doAssert g(int) == "f"