diff options
author | Araq <rumpf_a@web.de> | 2015-10-25 02:35:18 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-10-25 02:35:18 +0200 |
commit | cd7b5ae1eb999434aebdf81aeecae754457cacb5 (patch) | |
tree | 10d469e46cb876e63f78241c67fec86c36e9bbe8 /compiler | |
parent | c1c76a20e6e988377cc4d757ca0eedcfcbbaa537 (diff) | |
download | Nim-cd7b5ae1eb999434aebdf81aeecae754457cacb5.tar.gz |
fixes #1799 properly
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/parser.nim | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim index 074e13a93..dbf9706ea 100644 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -123,6 +123,9 @@ proc rawSkipComment(p: var TParser, node: PNode) = getTok(p) proc skipComment(p: var TParser, node: PNode) = + if p.tok.indent < 0: rawSkipComment(p, node) + +proc flexComment(p: var TParser, node: PNode) = if p.tok.indent < 0 or realInd(p): rawSkipComment(p, node) proc skipInd(p: var TParser) = @@ -892,7 +895,8 @@ proc parseTuple(p: var TParser, indentAllowed = false): PNode = case p.tok.tokType of tkSymbol, tkAccent: var a = parseIdentColonEquals(p, {}) - skipComment(p, a) + if p.tok.indent < 0 or p.tok.indent >= p.currInd: + rawSkipComment(p, a) addSon(result, a) of tkEof: break else: @@ -1608,7 +1612,7 @@ proc parseEnum(p: var TParser): PNode = getTok(p) addSon(result, ast.emptyNode) optInd(p, result) - rawSkipComment(p, result) + flexComment(p, result) while true: var a = parseSymbol(p) if a.kind == nkEmpty: return @@ -1622,12 +1626,14 @@ proc parseEnum(p: var TParser): PNode = a = newNodeP(nkEnumFieldDef, p) addSon(a, b) addSon(a, parseExpr(p)) - skipComment(p, a) + if p.tok.indent < 0 or p.tok.indent >= p.currInd: + rawSkipComment(p, a) if p.tok.tokType == tkComma and p.tok.indent < 0: getTok(p) rawSkipComment(p, a) else: - skipComment(p, a) + if p.tok.indent < 0 or p.tok.indent >= p.currInd: + rawSkipComment(p, a) addSon(result, a) if p.tok.indent >= 0 and p.tok.indent <= p.currInd or p.tok.tokType == tkEof: @@ -1648,7 +1654,7 @@ proc parseObjectWhen(p: var TParser): PNode = addSon(branch, parseExpr(p)) colcom(p, branch) addSon(branch, parseObjectPart(p)) - skipComment(p, branch) + flexComment(p, branch) addSon(result, branch) if p.tok.tokType != tkElif: break if p.tok.tokType == tkElse and sameInd(p): @@ -1656,7 +1662,7 @@ proc parseObjectWhen(p: var TParser): PNode = eat(p, tkElse) colcom(p, branch) addSon(branch, parseObjectPart(p)) - skipComment(p, branch) + flexComment(p, branch) addSon(result, branch) proc parseObjectCase(p: var TParser): PNode = @@ -1676,7 +1682,7 @@ proc parseObjectCase(p: var TParser): PNode = addSon(a, ast.emptyNode) addSon(result, a) if p.tok.tokType == tkColon: getTok(p) - skipComment(p, result) + flexComment(p, result) var wasIndented = false let oldInd = p.currInd if realInd(p): @@ -1725,7 +1731,8 @@ proc parseObjectPart(p: var TParser): PNode = result = parseObjectCase(p) of tkSymbol, tkAccent: result = parseIdentColonEquals(p, {withPragma}) - skipComment(p, result) + if p.tok.indent < 0 or p.tok.indent >= p.currInd: + rawSkipComment(p, result) of tkNil, tkDiscard: result = newNodeP(nkNilLit, p) getTok(p) |