diff options
author | Zahary Karadjov <zahary@gmail.com> | 2013-08-19 01:29:22 +0300 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2013-08-19 01:29:22 +0300 |
commit | ea54aa386c670f113fe4151da41dd2f4f95312cf (patch) | |
tree | 10aea26ec8b3743afdf5bde567acc68b77707327 | |
parent | 19eeb3556e091e541a78b02a389fb608cd382c6c (diff) | |
download | Nim-ea54aa386c670f113fe4151da41dd2f4f95312cf.tar.gz |
Revert "Revert "allow keyword params for the `[]` and `{}` operators""
This reverts commit b7ea4a7e65ddf10bf3e425e59bc57e9f9c57e916.
-rw-r--r-- | compiler/parser.nim | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim index a92dde74f..699a50c62 100644 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -627,6 +627,13 @@ proc identOrLiteral(p: var TParser, mode: TPrimaryMode): PNode = getTok(p) # we must consume a token here to prevend endless loops! result = ast.emptyNode +proc namedParams(p: var TParser, callee: PNode, + kind: TNodeKind, endTok: TTokType): PNode = + let a = callee + result = newNodeP(kind, p) + addSon(result, a) + exprColonEqExprListAux(p, endTok, result) + proc primarySuffix(p: var TParser, r: PNode): PNode = #| primarySuffix = '(' (exprColonEqExpr comma?)* ')' doBlocks? #| | doBlocks @@ -636,11 +643,8 @@ proc primarySuffix(p: var TParser, r: PNode): PNode = result = r while p.tok.indent < 0: case p.tok.tokType - of tkParLe: - var a = result - result = newNodeP(nkCall, p) - addSon(result, a) - exprColonEqExprListAux(p, tkParRi, result) + of tkParLe: + result = namedParams(p, result, nkCall, tkParRi) if result.len > 1 and result.sons[1].kind == nkExprColonExpr: result.kind = nkObjConstr else: @@ -653,10 +657,10 @@ proc primarySuffix(p: var TParser, r: PNode): PNode = of tkDot: result = dotExpr(p, result) result = parseGStrLit(p, result) - of tkBracketLe: - result = indexExprList(p, result, nkBracketExpr, tkBracketRi) + of tkBracketLe: + result = namedParams(p, result, nkBracketExpr, tkBracketRi) of tkCurlyLe: - result = indexExprList(p, result, nkCurlyExpr, tkCurlyRi) + result = namedParams(p, result, nkCurlyExpr, tkCurlyRi) else: break proc primary(p: var TParser, mode: TPrimaryMode): PNode |