summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-03-02 12:23:35 +0100
committerAndreas Rumpf <rumpf_a@web.de>2017-03-02 12:23:35 +0100
commit3e7b04683c7912cc49d05444187ca3bde7bc18aa (patch)
tree7fd4c7c12e0b51f381b81d9c9ce2b4387c5514e8
parentee13c8014bfb6a3100b8e0d3150b755ba36b44e4 (diff)
downloadNim-3e7b04683c7912cc49d05444187ca3bde7bc18aa.tar.gz
make tests green again
-rw-r--r--compiler/semgnrc.nim8
-rw-r--r--compiler/semtempl.nim4
-rw-r--r--compiler/suggest.nim7
-rw-r--r--tools/nimsuggest/tester.nim22
4 files changed, 30 insertions, 11 deletions
diff --git a/compiler/semgnrc.nim b/compiler/semgnrc.nim
index 9c05ab2f9..47a094f9d 100644
--- a/compiler/semgnrc.nim
+++ b/compiler/semgnrc.nim
@@ -161,6 +161,10 @@ proc addTempDecl(c: PContext; n: PNode; kind: TSymKind) =
 proc semGenericStmt(c: PContext, n: PNode,
                     flags: TSemGenericFlags, ctx: var GenericCtx): PNode =
   result = n
+
+  when defined(nimsuggest):
+    if withinTypeDesc in flags: inc c.inTypeContext
+
   #if gCmd == cmdIdeTools: suggestStmt(c, n)
   semIdeForTemplateOrGenericCheck(n, ctx.cursorInBody)
 
@@ -458,6 +462,10 @@ proc semGenericStmt(c: PContext, n: PNode,
     for i in countup(0, sonsLen(n) - 1):
       result.sons[i] = semGenericStmt(c, n.sons[i], flags, ctx)
 
+  when defined(nimsuggest):
+    if withinTypeDesc in flags: dec c.inTypeContext
+
+
 proc semGenericStmt(c: PContext, n: PNode): PNode =
   var ctx: GenericCtx
   ctx.toMixin = initIntset()
diff --git a/compiler/semtempl.nim b/compiler/semtempl.nim
index d7134402f..f809b6a50 100644
--- a/compiler/semtempl.nim
+++ b/compiler/semtempl.nim
@@ -289,7 +289,11 @@ proc semTemplSomeDecl(c: var TemplCtx, n: PNode, symKind: TSymKind; start=0) =
     if (a.kind != nkIdentDefs) and (a.kind != nkVarTuple): illFormedAst(a)
     checkMinSonsLen(a, 3)
     var L = sonsLen(a)
+    when defined(nimsuggest):
+      inc c.c.inTypeContext
     a.sons[L-2] = semTemplBody(c, a.sons[L-2])
+    when defined(nimsuggest):
+      dec c.c.inTypeContext
     a.sons[L-1] = semTemplBody(c, a.sons[L-1])
     for j in countup(0, L-3):
       addLocalDecl(c, a.sons[j], symKind)
diff --git a/compiler/suggest.nim b/compiler/suggest.nim
index e2aeb414e..41d61c12a 100644
--- a/compiler/suggest.nim
+++ b/compiler/suggest.nim
@@ -161,6 +161,8 @@ proc filterSym(s: PSym; prefix: PNode): bool {.inline.} =
       if n.len > 0:
         result = prefixMatch(s, n[0])
     else: discard
+    if result:
+      echo "indeed a prefix match ", n
   if s.kind != skModule:
     result = prefix.isNil or prefixMatch(s, prefix)
 
@@ -471,7 +473,10 @@ proc suggestExpr*(c: PContext, node: PNode) =
     if n == nil: n = node
     if n.kind == nkDotExpr:
       var obj = safeSemExpr(c, n.sons[0])
-      let prefix = if n.len == 2: n[1] else: nil
+      # it can happen that errnously we have collected the fieldname
+      # of the next line, so we check the 'field' is actually on the same
+      # line as the object to prevent this from happening:
+      let prefix = if n.len == 2 and n[1].info.line == n[0].info.line: n[1] else: nil
       suggestFieldAccess(c, obj, prefix, outputs)
 
       #if optIdeDebug in gGlobalOptions:
diff --git a/tools/nimsuggest/tester.nim b/tools/nimsuggest/tester.nim
index 451af32f5..a80c0b3d7 100644
--- a/tools/nimsuggest/tester.nim
+++ b/tools/nimsuggest/tester.nim
@@ -212,8 +212,8 @@ proc doReport(filename, answer, resp: string; report: var string) =
     var hasDiff = false
     for i in 0..min(resp.len-1, answer.len-1):
       if resp[i] != answer[i]:
-        report.add "\n  Expected:  " & resp.substr(i)
-        report.add "\n  But got:   " & answer.substr(i)
+        report.add "\n  Expected:  " & resp.substr(i, i+200)
+        report.add "\n  But got:   " & answer.substr(i, i+200)
         hasDiff = true
         break
     if not hasDiff:
@@ -233,15 +233,17 @@ proc runEpcTest(filename: string): int =
   let outp = p.outputStream
   let inp = p.inputStream
   var report = ""
-  #var a = newStringOfCap(120)
   try:
     # read the port number:
-    #discard outp.readLine(a)
-    var i = 0
-    while not osproc.hasData(p) and i < 100:
-      os.sleep(50)
-      inc i
-    let a = outp.readAll().strip()
+    when defined(posix):
+      var a = newStringOfCap(120)
+      discard outp.readLine(a)
+    else:
+      var i = 0
+      while not osproc.hasData(p) and i < 100:
+        os.sleep(50)
+        inc i
+      let a = outp.readAll().strip()
     let port = parseInt(a)
     var socket = newSocket()
     socket.connect("localhost", Port(port))
@@ -298,7 +300,7 @@ proc runTest(filename: string): int =
 proc main() =
   var failures = 0
   when false:
-    let x = getAppDir() / "tests/twithin_macro.nim"
+    let x = getAppDir() / "tests/tdot1.nim"
     let xx = expandFilename x
     failures += runEpcTest(xx)
   else: