summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semtypinst.nim6
-rw-r--r--compiler/sigmatch.nim3
2 files changed, 7 insertions, 2 deletions
diff --git a/compiler/semtypinst.nim b/compiler/semtypinst.nim
index 945667a81..7c8ee0789 100644
--- a/compiler/semtypinst.nim
+++ b/compiler/semtypinst.nim
@@ -81,6 +81,7 @@ type
     info*: TLineInfo
     allowMetaTypes*: bool     # allow types such as seq[Number]
                               # i.e. the result contains unresolved generics
+    fromStaticExpr*: bool
     skipTypedesc*: bool       # whether we should skip typeDescs
     isReturnType*: bool
     owner*: PSym              # where this instantiation comes from
@@ -238,6 +239,8 @@ proc replaceTypeVarsN(cl: var TReplTypeVars, n: PNode; start=0): PNode =
       assert result.kind notin nkCallKinds
   else:
     if n.len > 0:
+      if n.kind in nkCallKinds and n[0].kind == nkIdent and cl.fromStaticExpr:
+        localError(cl.c.config, n.info, "An unresolved call in staticExpr: '" & renderTree(n) & "'")
       newSons(result, n.len)
       if start > 0:
         result[0] = n[0]
@@ -660,10 +663,11 @@ proc initTypeVars*(p: PContext, typeMap: LayeredIdTable, info: TLineInfo;
   result.owner = owner
 
 proc replaceTypesInBody*(p: PContext, pt: TIdTable, n: PNode;
-                         owner: PSym, allowMetaTypes = false): PNode =
+                         owner: PSym, allowMetaTypes = false, fromStaticExpr = false): PNode =
   var typeMap = initLayeredTypeMap(pt)
   var cl = initTypeVars(p, typeMap, n.info, owner)
   cl.allowMetaTypes = allowMetaTypes
+  cl.fromStaticExpr = fromStaticExpr
   pushInfoContext(p.config, n.info)
   result = replaceTypeVarsN(cl, n)
   popInfoContext(p.config)
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index 591a7c2a2..61ccaaf90 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -807,7 +807,8 @@ proc tryResolvingStaticExpr(c: var TCandidate, n: PNode,
   # N is bound to a concrete value during the matching of the first param.
   # This proc is used to evaluate such static expressions.
   let instantiated = replaceTypesInBody(c.c, c.bindings, n, nil,
-                                        allowMetaTypes = allowUnresolved)
+                                        allowMetaTypes = allowUnresolved,
+                                        fromStaticExpr = true)
   result = c.c.semExpr(c.c, instantiated)
 
 proc inferStaticParam*(c: var TCandidate, lhs: PNode, rhs: BiggestInt): bool =