diff options
author | Araq <rumpf_a@web.de> | 2014-01-13 01:22:03 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-01-13 01:22:03 +0100 |
commit | 51ee524109cf7e3e86c676bc1676063a01bfd979 (patch) | |
tree | 0f611cc00834f0452a3f8ed1729c7b62f676f237 /compiler/parser.nim | |
parent | 4045d7829b0ab9c8749aa701515a53c279db9958 (diff) | |
parent | 1280c56f386111b542c8f0effdd3e5cbc5e84622 (diff) | |
download | Nim-51ee524109cf7e3e86c676bc1676063a01bfd979.tar.gz |
Merge branch 'devel' of https://github.com/Araq/Nimrod into devel
Diffstat (limited to 'compiler/parser.nim')
-rw-r--r-- | compiler/parser.nim | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim index b3a4e6963..e7a15c8ab 100644 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -965,14 +965,18 @@ proc primary(p: var TParser, mode: TPrimaryMode): PNode = of tkTuple: result = parseTuple(p, mode == pmTypeDef) of tkProc: result = parseProcExpr(p, mode notin {pmTypeDesc, pmTypeDef}) of tkIterator: - if mode in {pmTypeDesc, pmTypeDef}: - result = parseProcExpr(p, false) - result.kind = nkIteratorTy + when true: + if mode in {pmTypeDesc, pmTypeDef}: + result = parseProcExpr(p, false) + result.kind = nkIteratorTy + else: + # no anon iterators for now: + parMessage(p, errExprExpected, p.tok) + getTok(p) # we must consume a token here to prevend endless loops! + result = ast.emptyNode else: - # no anon iterators for now: - parMessage(p, errExprExpected, p.tok) - getTok(p) # we must consume a token here to prevend endless loops! - result = ast.emptyNode + result = parseProcExpr(p, mode notin {pmTypeDesc, pmTypeDef}) + result.kind = nkIteratorTy of tkEnum: if mode == pmTypeDef: result = parseEnum(p) @@ -995,9 +999,13 @@ proc primary(p: var TParser, mode: TPrimaryMode): PNode = getTokNoInd(p) addSon(result, primary(p, pmNormal)) of tkStatic: - result = newNodeP(nkStaticExpr, p) + let info = parLineInfo(p) getTokNoInd(p) - addSon(result, primary(p, pmNormal)) + let next = primary(p, pmNormal) + if next.kind == nkBracket and next.sonsLen == 1: + result = newNode(nkStaticTy, info, @[next.sons[0]]) + else: + result = newNode(nkStaticExpr, info, @[next]) of tkBind: result = newNodeP(nkBind, p) getTok(p) |