diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2017-03-02 12:23:35 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-03-02 12:23:35 +0100 |
commit | 3e7b04683c7912cc49d05444187ca3bde7bc18aa (patch) | |
tree | 7fd4c7c12e0b51f381b81d9c9ce2b4387c5514e8 | |
parent | ee13c8014bfb6a3100b8e0d3150b755ba36b44e4 (diff) | |
download | Nim-3e7b04683c7912cc49d05444187ca3bde7bc18aa.tar.gz |
make tests green again
-rw-r--r-- | compiler/semgnrc.nim | 8 | ||||
-rw-r--r-- | compiler/semtempl.nim | 4 | ||||
-rw-r--r-- | compiler/suggest.nim | 7 | ||||
-rw-r--r-- | tools/nimsuggest/tester.nim | 22 |
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: |