summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xcompiler/semstmts.nim2
-rwxr-xr-xcompiler/sigmatch.nim12
-rw-r--r--tests/compile/tprocvars.nim6
3 files changed, 13 insertions, 7 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim
index 2d36015a7..2789c068b 100755
--- a/compiler/semstmts.nim
+++ b/compiler/semstmts.nim
@@ -1139,7 +1139,7 @@ proc semStmtList(c: PContext, n: PNode): PNode =
   # a statement list (s; e) has the type 'e':
   if result.kind == nkStmtList and result.len > 0:
     var lastStmt = lastSon(result)
-    if not ImplicitelyDiscardable(lastStmt):
+    if lastStmt.kind != nkNilLit and not ImplicitelyDiscardable(lastStmt):
       result.typ = lastStmt.typ
       #localError(lastStmt.info, errGenerated,
       #  "Last expression must be explicitly returned if it " &
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index cfae74119..8968e4e03 100755
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -279,24 +279,24 @@ proc procTypeRel(c: var TCandidate, f, a: PType): TTypeRelation =
         var m = typeRel(c, f.sons[0], a.sons[0])
         # Subtype is sufficient for return types!
         if m < isSubtype or inconsistentVarTypes(f.sons[0], a.sons[0]):
-          result = isNone
+          return isNone
         elif m == isSubtype: result = isConvertible
         else: result = minRel(m, result)
       else:
-        result = isNone
+        return isNone
     elif a.sons[0] != nil:
-      result = isNone
+      return isNone
     if tfNoSideEffect in f.flags and tfNoSideEffect notin a.flags:
-      result = isNone
+      return isNone
     elif tfThread in f.flags and a.flags * {tfThread, tfNoSideEffect} == {}:
       # noSideEffect implies ``tfThread``! XXX really?
-      result = isNone
+      return isNone
     elif f.callconv != a.callconv:
       # valid to pass a 'nimcall' thingie to 'closure':
       if f.callconv == ccClosure and a.callconv == ccDefault:
         result = isConvertible
       else:
-        result = isNone
+        return isNone
   else: nil
 
 proc matchTypeClass(c: var TCandidate, f, a: PType): TTypeRelation =
diff --git a/tests/compile/tprocvars.nim b/tests/compile/tprocvars.nim
new file mode 100644
index 000000000..dc7592526
--- /dev/null
+++ b/tests/compile/tprocvars.nim
@@ -0,0 +1,6 @@
+proc doSomething(v: Int, x: proc(v:Int):Int): Int = return x(v)
+proc doSomething(v: Int, x: proc(v:Int)) = x(v)
+
+
+echo doSomething(10, proc(v: Int): Int = return v div 2)
+