diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2017-01-26 23:23:40 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-01-26 23:23:40 +0100 |
commit | 0b93db5a7cf85ae9b736538de7c2c880203a34a9 (patch) | |
tree | 934db1ea36078e1a12dba3ba9ef8f14fc1f33207 | |
parent | ca0b16fd337d15abd2ea873a06dbca85777d886e (diff) | |
download | Nim-0b93db5a7cf85ae9b736538de7c2c880203a34a9.tar.gz |
fixes nimsuggest issue #44
-rw-r--r-- | compiler/suggest.nim | 8 | ||||
-rw-r--r-- | tools/nimsuggest/tests/tno_deref.nim | 14 |
2 files changed, 19 insertions, 3 deletions
diff --git a/compiler/suggest.nim b/compiler/suggest.nim index 958dfe50e..f3c03d680 100644 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -268,6 +268,7 @@ proc suggestFieldAccess(c: PContext, n: PNode, outputs: var int) = t = t.sons[0] suggestOperations(c, n, typ, outputs) else: + let orig = skipTypes(typ, {tyGenericInst, tyAlias}) typ = skipTypes(typ, {tyGenericInst, tyVar, tyPtr, tyRef, tyAlias}) if typ.kind == tyObject: var t = typ @@ -275,11 +276,10 @@ proc suggestFieldAccess(c: PContext, n: PNode, outputs: var int) = suggestObject(c, t.n, outputs) if t.sons[0] == nil: break t = skipTypes(t.sons[0], skipPtrs) - suggestOperations(c, n, typ, outputs) elif typ.kind == tyTuple and typ.n != nil: suggestSymList(c, typ.n, outputs) - suggestOperations(c, n, typ, outputs) - else: + suggestOperations(c, n, orig, outputs) + if typ != orig: suggestOperations(c, n, typ, outputs) type @@ -331,6 +331,8 @@ when defined(nimsuggest): info.fileIndex + info.line.int64 shl 32 + info.col.int64 shl 48 proc addNoDup(s: PSym; info: TLineInfo) = + # ensure nothing gets too slow: + if s.allUsages.len > 500: return let infoAsInt = info.infoToInt for infoB in s.allUsages: if infoB.infoToInt == infoAsInt: return diff --git a/tools/nimsuggest/tests/tno_deref.nim b/tools/nimsuggest/tests/tno_deref.nim new file mode 100644 index 000000000..0f8ba3bd8 --- /dev/null +++ b/tools/nimsuggest/tests/tno_deref.nim @@ -0,0 +1,14 @@ + +var x: ptr int + +proc foo(y: ptr int) = + discard + +x.#[!]# + +discard """ +$nimsuggest --tester $file +>sug $1 +sug;;skProc;;tno_deref.foo;;proc (y: ptr int)*;;$file;;4;;5;;"";;100 +* +""" |