summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semcall.nim7
-rw-r--r--compiler/semexprs.nim1
-rw-r--r--tests/compile/tcompiles.nim31
3 files changed, 17 insertions, 22 deletions
diff --git a/compiler/semcall.nim b/compiler/semcall.nim
index c7f4e4387..8c20d0faa 100644
--- a/compiler/semcall.nim
+++ b/compiler/semcall.nim
@@ -134,9 +134,8 @@ proc resolveOverloads(c: PContext, n, orig: PNode,
       return
     elif result.state != csMatch:
       if nfExprCall in n.flags:
-        if c.inCompilesContext > 0 or gErrorCounter == 0:
-          LocalError(n.info, errExprXCannotBeCalled,
-                     renderTree(n, {renderNoComments}))
+        LocalError(n.info, errExprXCannotBeCalled,
+                   renderTree(n, {renderNoComments}))
       else:
         errors = @[]
         pickBest(f)
@@ -217,7 +216,7 @@ proc semOverloadedCall(c: PContext, n, nOrig: PNode,
                        filter: TSymKinds): PNode =
   var r = resolveOverloads(c, n, nOrig, filter)
   if r.state == csMatch: result = semResolvedCall(c, n, r)
-  else: result = errorNode(c, n)
+  # else: result = errorNode(c, n)
     
 proc explicitGenericInstError(n: PNode): PNode =
   LocalError(n.info, errCannotInstantiateX, renderTree(n))
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index a688efc5b..aedd2364d 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -738,6 +738,7 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode =
       nOrig.sons[0] = prc
       n.flags.incl nfExprCall
       result = semOverloadedCallAnalyseEffects(c, n, nOrig, flags)
+      if result == nil: return errorNode(c, n)
   #result = afterCallActions(c, result, nOrig, flags)
   fixAbstractType(c, result)
   analyseIfAddressTakenInCall(c, result)
diff --git a/tests/compile/tcompiles.nim b/tests/compile/tcompiles.nim
index 1a1d947b1..d0fccdaff 100644
--- a/tests/compile/tcompiles.nim
+++ b/tests/compile/tcompiles.nim
@@ -1,31 +1,26 @@
-discard """
-  output: '''obj has '==': false
-int has '==': true
-false
-true
-true
-no'''
-"""
-
 # test the new 'compiles' feature:
 
 template supports(opr, x: expr): bool {.immediate.} =
   compiles(opr(x)) or compiles(opr(x, x))
 
+template ok(x: expr): stmt =
+  static: assert(x)
+
+template no(x: expr): stmt =
+  static: assert(not x)
+
 type
   TObj = object
 
 var
   myObj {.compileTime.}: TObj
 
-echo "obj has '==': ", supports(`==`, myObj)
-echo "int has '==': ", supports(`==`, 45)
+ok supports(`==`, myObj)
+ok supports(`==`, 45)
+
+no supports(`++`, 34)
+ok supports(`not`, true)
+ok supports(`+`, 34)
 
-echo supports(`++`, 34)
-echo supports(`not`, true)
-echo supports(`+`, 34)
+no compiles(4+5.0 * "hallo")
 
-when compiles(4+5.0 * "hallo"):
-  echo "yes"
-else:
-  echo "no"