summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/vmdeps.nim3
-rw-r--r--tests/macros/tmacrotypes.nim14
-rw-r--r--tests/macros/tnimnode_for_runtime.nim (renamed from tests/macros/tnimrodnode_for_runtime.nim)1
-rw-r--r--tests/macros/tsame_name_497.nim4
-rw-r--r--tests/macros/typesapi.nim17
-rw-r--r--tests/testament/specs.nim4
-rw-r--r--tests/testament/tester.nim15
7 files changed, 48 insertions, 10 deletions
diff --git a/compiler/vmdeps.nim b/compiler/vmdeps.nim
index c1a68dbcb..11d839c41 100644
--- a/compiler/vmdeps.nim
+++ b/compiler/vmdeps.nim
@@ -54,6 +54,7 @@ proc mapTypeToBracket(name: string; t: PType; info: TLineInfo): PNode =
     if t.sons[i] == nil:
       let void = atomicTypeX("void", t, info)
       void.typ = newType(tyEmpty, t.owner)
+      result.add void
     else:
       result.add mapTypeToAst(t.sons[i], info)
 
@@ -105,7 +106,7 @@ proc mapTypeToAst(t: PType, info: TLineInfo; allowRecursion=false): PNode =
   of tyPtr: result = mapTypeToBracket("ptr", t, info)
   of tyRef: result = mapTypeToBracket("ref", t, info)
   of tyVar: result = mapTypeToBracket("var", t, info)
-  of tySequence: result = mapTypeToBracket("sequence", t, info)
+  of tySequence: result = mapTypeToBracket("seq", t, info)
   of tyProc: result = mapTypeToBracket("proc", t, info)
   of tyOpenArray: result = mapTypeToBracket("openArray", t, info)
   of tyRange:
diff --git a/tests/macros/tmacrotypes.nim b/tests/macros/tmacrotypes.nim
index f19aa2ddb..991668930 100644
--- a/tests/macros/tmacrotypes.nim
+++ b/tests/macros/tmacrotypes.nim
@@ -1,16 +1,16 @@
 discard """
-  disabled: true
+  nimout: '''void
+int'''
 """
 
-import macros, typetraits
+import macros
 
-macro checkType(ex, expected: expr): stmt {.immediate.} =
-  var t = ex.typ
-  assert t.name == expected.strVal
+macro checkType(ex: stmt; expected: expr): stmt =
+  var t = ex.getType()
+  echo t
 
 proc voidProc = echo "hello"
-proc intProc(a, b): int = 10
+proc intProc(a: int, b: float): int = 10
 
 checkType(voidProc(), "void")
 checkType(intProc(10, 20.0), "int")
-checkType(noproc(10, 20.0), "Error Type")
diff --git a/tests/macros/tnimrodnode_for_runtime.nim b/tests/macros/tnimnode_for_runtime.nim
index e73c8430f..69c7aedd2 100644
--- a/tests/macros/tnimrodnode_for_runtime.nim
+++ b/tests/macros/tnimnode_for_runtime.nim
@@ -1,6 +1,5 @@
 discard """
   output: "bla"
-  disabled: true
 """
 
 import macros
diff --git a/tests/macros/tsame_name_497.nim b/tests/macros/tsame_name_497.nim
index e49f9f6d8..ed5d5c6d8 100644
--- a/tests/macros/tsame_name_497.nim
+++ b/tests/macros/tsame_name_497.nim
@@ -1,3 +1,7 @@
+discard """
+  disabled: true
+"""
+
 import macro_bug
 
 type TObj = object
diff --git a/tests/macros/typesapi.nim b/tests/macros/typesapi.nim
new file mode 100644
index 000000000..670b39c9e
--- /dev/null
+++ b/tests/macros/typesapi.nim
@@ -0,0 +1,17 @@
+discard """
+  nimout: '''proc (x: int): string => typeDesc[proc[string, int]]
+proc (x: int): void => typeDesc[proc[void, int]]
+proc (x: int) => typeDesc[proc[void, int]]'''
+"""
+
+#2211
+
+import macros
+
+macro showType(t:stmt): stmt =
+  let ty = t.getType
+  echo t.repr, " => ", ty.repr
+
+showType(proc(x:int): string)
+showType(proc(x:int): void)
+showType(proc(x:int))
diff --git a/tests/testament/specs.nim b/tests/testament/specs.nim
index e079eed62..2a8a4ea24 100644
--- a/tests/testament/specs.nim
+++ b/tests/testament/specs.nim
@@ -48,6 +48,7 @@ type
     err*: TResultEnum
     substr*, sortoutput*: bool
     targets*: set[TTarget]
+    nimout*: string
 
 const
   targetToExt*: array[TTarget, string] = ["c", "cpp", "m", "js"]
@@ -94,6 +95,7 @@ proc parseSpec*(filename: string): TSpec =
   result.file = filename
   result.msg = ""
   result.outp = ""
+  result.nimout = ""
   result.ccodeCheck = ""
   result.cmd = cmdTemplate
   parseSpecAux:
@@ -124,6 +126,8 @@ proc parseSpec*(filename: string): TSpec =
     of "errormsg":
       result.msg = e.value
       result.action = actionReject
+    of "nimout":
+      result.nimout = e.value
     of "disabled":
       if parseCfgBool(e.value): result.err = reIgnored
     of "cmd": result.cmd = e.value
diff --git a/tests/testament/tester.nim b/tests/testament/tester.nim
index 45643be10..881a41ce6 100644
--- a/tests/testament/tester.nim
+++ b/tests/testament/tester.nim
@@ -64,7 +64,9 @@ proc callCompiler(cmdTemplate, filename, options: string,
   var suc = ""
   var err = ""
   var x = newStringOfCap(120)
+  result.nimout = ""
   while outp.readLine(x.TaintedString) or running(p):
+    result.nimout.add(x & "\n")
     if x =~ pegOfInterest:
       # `err` should contain the last error/warning message
       err = x
@@ -112,7 +114,9 @@ proc addResult(r: var TResults, test: TTest,
                           expected = expected,
                           given = given)
   r.data.addf("$#\t$#\t$#\t$#", name, expected, given, $success)
-  if success notin {reSuccess, reIgnored}:
+  if success == reIgnored:
+    styledEcho styleBright, name, fgYellow, " [", $success, "]"
+  elif success != reSuccess:
     styledEcho styleBright, name, fgRed, " [", $success, "]"
     echo"Expected:"
     styledEcho styleBright, expected
@@ -151,6 +155,13 @@ proc codegenCheck(test: TTest, check: string, given: var TSpec) =
     except IOError:
       given.err = reCodeNotFound
 
+proc nimoutCheck(test: TTest; expectedNimout: string; given: var TSpec) =
+  if expectedNimout.len > 0:
+    let exp = expectedNimout.strip.replace("\C\L", "\L")
+    let giv = given.nimout.strip.replace("\C\L", "\L")
+    if exp notin giv:
+      given.err = reMsgsDiffer
+
 proc makeDeterministic(s: string): string =
   var x = splitLines(s)
   sort(x, system.cmp)
@@ -172,6 +183,7 @@ proc testSpec(r: var TResults, test: TTest) =
                                test.target)
       if given.err == reSuccess:
         codegenCheck(test, expected.ccodeCheck, given)
+        nimoutCheck(test, expected.nimout, given)
       r.addResult(test, "", given.msg, given.err)
       if given.err == reSuccess: inc(r.passed)
     of actionRun:
@@ -205,6 +217,7 @@ proc testSpec(r: var TResults, test: TTest) =
                 given.err = reOutputsDiffer
             if given.err == reSuccess:
               codeGenCheck(test, expected.ccodeCheck, given)
+              nimoutCheck(test, expected.nimout, given)
             if given.err == reSuccess: inc(r.passed)
             r.addResult(test, expected.outp, buf.string, given.err)
         else: