diff options
author | Araq <rumpf_a@web.de> | 2012-11-22 08:31:40 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-11-22 08:31:40 +0100 |
commit | f610d2d2217b757901929ed92725a1b682e1165c (patch) | |
tree | c3f684991eda6ba26613c44e190be3b0e20d382a | |
parent | 476f6fc8ee6b7a26c2ac04cb356837d35a6cb929 (diff) | |
download | Nim-f610d2d2217b757901929ed92725a1b682e1165c.tar.gz |
'iterator' as type description
-rwxr-xr-x | compiler/parser.nim | 6 | ||||
-rwxr-xr-x | doc/grammar.txt | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim index 680279bcf..59f7934e0 100755 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -731,7 +731,8 @@ proc parseProcExpr(p: var TParser, isExpr: bool): PNode = proc isExprStart(p: TParser): bool = case p.tok.tokType - of tkSymbol, tkAccent, tkOpr, tkNot, tkNil, tkCast, tkIf, tkProc, tkBind, + of tkSymbol, tkAccent, tkOpr, tkNot, tkNil, tkCast, tkIf, + tkProc, tkIterator, tkBind, tkParLe, tkBracketLe, tkCurlyLe, tkIntLit..tkCharLit, tkVar, tkRef, tkPtr, tkTuple, tkType, tkWhen, tkCase: result = true @@ -811,6 +812,9 @@ proc primary(p: var TParser, skipSuffix = false): PNode = proc parseTypeDesc(p: var TParser): PNode = if p.tok.toktype == tkProc: result = parseProcExpr(p, false) + elif p.tok.toktype == tkIterator: + result = parseProcExpr(p, false) + result.kind = nkIteratorTy else: result = parseExpr(p) proc parseExprStmt(p: var TParser): PNode = diff --git a/doc/grammar.txt b/doc/grammar.txt index 1e54d1116..2474b584e 100755 --- a/doc/grammar.txt +++ b/doc/grammar.txt @@ -70,7 +70,8 @@ exprOrType ::= lowestExpr | 'tuple' tupleDesc expr ::= exprOrType - | 'proc' paramList [pragma] ['=' stmt] + | 'proc' paramList [pragma] ['=' stmt] + | 'iterator' paramList [pragma] ['=' stmt] exprList ::= [expr (comma expr)* [comma]] @@ -79,6 +80,7 @@ qualifiedIdent ::= symbol ['.' symbol] typeDesc ::= exprOrType | 'proc' paramList [pragma] + | 'iterator' paramList [pragma] macroStmt ::= ':' [stmt] ('of' [exprList] ':' stmt |'elif' expr ':' stmt @@ -146,7 +148,7 @@ param ::= symbol (comma symbol)* (':' typeDesc ['=' expr] | '=' expr) paramList ::= ['(' [param (comma|semicolon param)*] optPar ')'] [':' typeDesc] genericConstraint ::= 'object' | 'tuple' | 'enum' | 'proc' | 'ref' | 'ptr' - | 'var' | 'distinct' | primary + | 'var' | 'distinct' | 'iterator' | primary genericConstraints ::= genericConstraint ( '|' optInd genericConstraint )* genericParam ::= symbol [':' genericConstraints] ['=' expr] |