summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-04-06 17:26:20 +0200
committerAraq <rumpf_a@web.de>2014-04-06 17:26:20 +0200
commitcf7e83ecc5be0a85d5e669c9c7d5b3753b075371 (patch)
tree0307cb3b55b7ad4cf05d8ec6cd5a239f682bf034
parent034af8354d56a1c2d426b460465b2faf3ff9d29e (diff)
downloadNim-cf7e83ecc5be0a85d5e669c9c7d5b3753b075371.tar.gz
fixes #913
-rw-r--r--compiler/nimrod.nimrod.cfg1
-rw-r--r--compiler/sigmatch.nim2
-rw-r--r--tests/typerel/tvarargsexpr.nim18
3 files changed, 21 insertions, 0 deletions
diff --git a/compiler/nimrod.nimrod.cfg b/compiler/nimrod.nimrod.cfg
index cc27d9f36..2c6e6f249 100644
--- a/compiler/nimrod.nimrod.cfg
+++ b/compiler/nimrod.nimrod.cfg
@@ -20,3 +20,4 @@ import:testability
 define:useStdoutAsStdmsg
 
 cs:partial
+#define:useNodeIds
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index b9fb0c957..b83c27d22 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -668,6 +668,8 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
         result = isNone
     else: discard
   of tyOpenArray, tyVarargs:
+    # varargs[expr] is special
+    if f.kind == tyVarargs and f.sons[0].kind == tyExpr: return
     case a.kind
     of tyOpenArray, tyVarargs:
       result = typeRel(c, base(f), base(a))
diff --git a/tests/typerel/tvarargsexpr.nim b/tests/typerel/tvarargsexpr.nim
new file mode 100644
index 000000000..fcb49af61
--- /dev/null
+++ b/tests/typerel/tvarargsexpr.nim
@@ -0,0 +1,18 @@
+discard """
+  output: '''success'''
+"""
+
+#bug #913
+
+import macros
+
+macro thirteen(args: varargs[expr]): expr = 
+  result = newIntLitNode(13)
+
+doAssert(13==thirteen([1,2])) # works
+doAssert(13==thirteen(1,2)) # works
+
+doAssert(13==thirteen(1,[2])) # does not work
+doAssert(13==thirteen([1], 2)) # does not work
+
+echo "success"