fixed dot operator recursive loop & macro suggest (#16922)

* basic stability improvements; refs nimsuggest
* fixed dot operator recursive loop & macro suggest
* hacky fix for run away dot operator sem check

Committing this mostly to make the issue more clear. Perhaps get better
feedback.

* semExprWithType seems like a better place to check
* fixed error messages const case expressions
* Clean-up test
* stopped the dot operator madness

No longer get infinite recursion when seming broken code with a dot
operator macro like in jsffi.

Co-authored-by: Araq <rumpf_a@web.de>
This commit is contained in:
Saem Ghani 2021-02-15 00:51:05 -08:00 • committed by GitHub
commit 260a5dacb7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 51 additions and 24 deletions

View file

@ -2,13 +2,14 @@ discard """
cmd: "nim check $file"
errormsg: ""
nimout: '''
t10734.nim(18, 1) Error: invalid indentation
t10734.nim(18, 6) Error: invalid indentation
t10734.nim(19, 7) Error: expression expected, but found '[EOF]'
t10734.nim(17, 5) Error: 'proc' is not a concrete type; for a callback without parameters use 'proc()'
t10734.nim(18, 6) Error: undeclared identifier: 'p'
t10734.nim(18, 6) Error: 'p' cannot be assigned to
t10734.nim(16, 3) Hint: 'T' is declared but not used [XDeclaredButNotUsed]
t10734.nim(19, 1) Error: invalid indentation
t10734.nim(19, 6) Error: invalid indentation
t10734.nim(20, 7) Error: expression expected, but found '[EOF]'
t10734.nim(18, 5) Error: 'proc' is not a concrete type; for a callback without parameters use 'proc()'
t10734.nim(19, 6) Error: undeclared identifier: 'p'
t10734.nim(19, 6) Error: expression 'p' has no type (or is ambiguous)
t10734.nim(19, 6) Error: 'p' cannot be assigned to
t10734.nim(17, 3) Hint: 'T' is declared but not used [XDeclaredButNotUsed]
'''
"""

View file

@ -1,4 +1,20 @@
discard """
output: '''
test1
test2
'''
"""
import jsffi
type
C = object
props: int
var c: C
when compiles(c.props):
echo "test"
echo "test1"
when not compiles(d.props):
echo "test2"