summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2013-08-19 01:29:22 +0300
committerZahary Karadjov <zahary@gmail.com>2013-08-19 01:29:22 +0300
commitea54aa386c670f113fe4151da41dd2f4f95312cf (patch)
tree10aea26ec8b3743afdf5bde567acc68b77707327
parent19eeb3556e091e541a78b02a389fb608cd382c6c (diff)
downloadNim-ea54aa386c670f113fe4151da41dd2f4f95312cf.tar.gz
Revert "Revert "allow keyword params for the `[]` and `{}` operators""
This reverts commit b7ea4a7e65ddf10bf3e425e59bc57e9f9c57e916.
-rw-r--r--compiler/parser.nim20
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