summary refs log tree commit diff stats
path: root/compiler/parser.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/parser.nim')
-rwxr-xr-xcompiler/parser.nim41
1 files changed, 17 insertions, 24 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim
index b579d20be..c7e9cbac7 100755
--- a/compiler/parser.nim
+++ b/compiler/parser.nim
@@ -123,7 +123,8 @@ proc newIntNodeP(kind: TNodeKind, intVal: BiggestInt, p: TParser): PNode =
   result = newNodeP(kind, p)
   result.intVal = intVal
 
-proc newFloatNodeP(kind: TNodeKind, floatVal: BiggestFloat, p: TParser): PNode = 
+proc newFloatNodeP(kind: TNodeKind, floatVal: BiggestFloat, 
+                   p: TParser): PNode =
   result = newNodeP(kind, p)
   result.floatVal = floatVal
 
@@ -147,16 +148,18 @@ proc getPrecedence(tok: PToken): int =
   case tok.tokType
   of tkOpr: 
     case tok.ident.s[0]
-    of '$', '^': result = 7
-    of '*', '%', '/', '\\': result = 6
-    of '+', '-', '~', '|': result = 5
-    of '&': result = 4
-    of '=', '<', '>', '!': result = 3
-    else: result = 0
-  of tkDiv, tkMod, tkShl, tkShr: result = 6
-  of tkIn, tkNotIn, tkIs, tkIsNot: result = 3
-  of tkAnd: result = 2
-  of tkOr, tkXor: result = 1
+    of '$', '^': result = 9
+    of '*', '%', '/', '\\': result = 8
+    of '+', '-', '~', '|': result = 7
+    of '&': result = 6
+    of '=', '<', '>', '!': result = 4
+    of '.': result = 5
+    else: result = 1
+  of tkDiv, tkMod, tkShl, tkShr: result = 8
+  of tkIn, tkNotIn, tkIs, tkIsNot, tkNot: result = 4
+  of tkDotDot: result = 5
+  of tkAnd: result = 3
+  of tkOr, tkXor: result = 2
   else: result = - 10
   
 proc isOperator(tok: PToken): bool = 
@@ -202,7 +205,7 @@ proc parseSymbol(p: var TParser): PNode =
       addSon(result, newIdentNodeP(getIdent("()"), p))
       getTok(p)
       eat(p, tkParRi)
-    of tokKeywordLow..tokKeywordHigh, tkSymbol, tkOpr: 
+    of tokKeywordLow..tokKeywordHigh, tkSymbol, tkOpr, tkDotDot: 
       var id = p.tok.ident
       getTok(p)
       if p.tok.tokType == tkEquals: 
@@ -494,7 +497,7 @@ proc identOrLiteral(p: var TParser): PNode =
 
 proc primary(p: var TParser): PNode = 
   # prefix operator?
-  if (p.tok.tokType == tkNot) or (p.tok.tokType == tkOpr): 
+  if isOperator(p.tok):
     result = newNodeP(nkPrefix, p)
     var a = newIdentNodeP(p.tok.ident, p)
     addSon(result, a)
@@ -553,18 +556,8 @@ proc lowestExprAux(p: var TParser, v: var PNode, limit: int): PToken =
     opPrec = getPrecedence(nextop)
   result = op                 # return first untreated operator
   
-proc otherExpr(p: var TParser): PNode = 
-  discard lowestExprAux(p, result, - 1)
-
 proc lowestExpr(p: var TParser): PNode = 
-  result = otherExpr(p)
-  while p.tok.tokType == tkDotDot:
-    getTok(p)
-    optInd(p, result)
-    var a = result
-    result = newNodeP(nkRange, p)
-    addSon(result, a)
-    addSon(result, otherExpr(p))
+  discard lowestExprAux(p, result, - 1)
 
 proc parseIfExpr(p: var TParser): PNode = 
   result = newNodeP(nkIfExpr, p)