diff options
author | Araq <rumpf_a@web.de> | 2015-11-26 11:58:46 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-11-26 17:46:05 +0100 |
commit | 5fe71db6d9a1a057cff6564dd24b874301f813f6 (patch) | |
tree | cba9fe8d24283c0abefc3778e70b662d3d385ff9 | |
parent | 25e2e3faecd067eee06d6185c1c991ab84985940 (diff) | |
download | Nim-5fe71db6d9a1a057cff6564dd24b874301f813f6.tar.gz |
'out T' is an alias for 'var T'
-rw-r--r-- | compiler/parser.nim | 9 | ||||
-rw-r--r-- | doc/grammar.txt | 15 |
2 files changed, 14 insertions, 10 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim index dbf9706ea..11dd6788a 100644 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -991,7 +991,7 @@ proc isExprStart(p: TParser): bool = of tkSymbol, tkAccent, tkOpr, tkNot, tkNil, tkCast, tkIf, tkProc, tkIterator, tkBind, tkAddr, tkParLe, tkBracketLe, tkCurlyLe, tkIntLit..tkCharLit, tkVar, tkRef, tkPtr, - tkTuple, tkObject, tkType, tkWhen, tkCase: + tkTuple, tkObject, tkType, tkWhen, tkCase, tkOut: result = true else: result = false @@ -1038,7 +1038,7 @@ proc parseObject(p: var TParser): PNode proc parseTypeClass(p: var TParser): PNode proc primary(p: var TParser, mode: TPrimaryMode): PNode = - #| typeKeyw = 'var' | 'ref' | 'ptr' | 'shared' | 'tuple' + #| typeKeyw = 'var' | 'out' | 'ref' | 'ptr' | 'shared' | 'tuple' #| | 'proc' | 'iterator' | 'distinct' | 'object' | 'enum' #| primary = typeKeyw typeDescK #| / prefixOperator* identOrLiteral primarySuffix* @@ -1112,6 +1112,7 @@ proc primary(p: var TParser, mode: TPrimaryMode): PNode = optInd(p, result) addSon(result, primary(p, pmNormal)) of tkVar: result = parseTypeDescKAux(p, nkVarTy, mode) + of tkOut: result = parseTypeDescKAux(p, nkVarTy, mode) of tkRef: result = parseTypeDescKAux(p, nkRefTy, mode) of tkPtr: result = parseTypeDescKAux(p, nkPtrTy, mode) of tkDistinct: result = parseTypeDescKAux(p, nkDistinctTy, mode) @@ -1763,7 +1764,7 @@ proc parseObject(p: var TParser): PNode = addSon(result, parseObjectPart(p)) proc parseTypeClassParam(p: var TParser): PNode = - if p.tok.tokType == tkVar: + if p.tok.tokType in {tkOut, tkVar}: result = newNodeP(nkVarTy, p) getTok(p) result.addSon(p.parseSymbol) @@ -1771,7 +1772,7 @@ proc parseTypeClassParam(p: var TParser): PNode = result = p.parseSymbol proc parseTypeClass(p: var TParser): PNode = - #| typeClassParam = ('var')? symbol + #| typeClassParam = ('var' | 'out')? symbol #| typeClass = typeClassParam ^* ',' (pragma)? ('of' typeDesc ^* ',')? #| &IND{>} stmt result = newNodeP(nkTypeClassTy, p) diff --git a/doc/grammar.txt b/doc/grammar.txt index 72dc6c974..d967bf938 100644 --- a/doc/grammar.txt +++ b/doc/grammar.txt @@ -35,10 +35,13 @@ castExpr = 'cast' '[' optInd typeDesc optPar ']' '(' optInd expr optPar ')' parKeyw = 'discard' | 'include' | 'if' | 'while' | 'case' | 'try' | 'finally' | 'except' | 'for' | 'block' | 'const' | 'let' | 'when' | 'var' | 'mixin' -par = '(' optInd (&parKeyw complexOrSimpleStmt ^+ ';' - | simpleExpr ('=' expr (';' complexOrSimpleStmt ^+ ';' )? )? - | (':' expr)? (',' (exprColonEqExpr comma?)*)? )? - optPar ')' +par = '(' optInd + ( &parKeyw complexOrSimpleStmt ^+ ';' + | ';' complexOrSimpleStmt ^+ ';' + | pragmaStmt + | simpleExpr ( ('=' expr (';' complexOrSimpleStmt ^+ ';' )? ) + | (':' expr (',' exprColonEqExpr ^+ ',' )? ) ) ) + optPar ')' literal = | INT_LIT | INT8_LIT | INT16_LIT | INT32_LIT | INT64_LIT | UINT_LIT | UINT8_LIT | UINT16_LIT | UINT32_LIT | UINT64_LIT | FLOAT_LIT | FLOAT32_LIT | FLOAT64_LIT @@ -86,7 +89,7 @@ expr = (ifExpr | caseExpr | tryExpr) / simpleExpr -typeKeyw = 'var' | 'ref' | 'ptr' | 'shared' | 'tuple' +typeKeyw = 'var' | 'out' | 'ref' | 'ptr' | 'shared' | 'tuple' | 'proc' | 'iterator' | 'distinct' | 'object' | 'enum' primary = typeKeyw typeDescK / prefixOperator* identOrLiteral primarySuffix* @@ -165,7 +168,7 @@ objectCase = 'case' identWithPragma ':' typeDesc ':'? COMMENT? objectPart = IND{>} objectPart^+IND{=} DED / objectWhen / objectCase / 'nil' / 'discard' / declColonEquals object = 'object' pragma? ('of' typeDesc)? COMMENT? objectPart -typeClassParam = ('var')? symbol +typeClassParam = ('var' | 'out')? symbol typeClass = typeClassParam ^* ',' (pragma)? ('of' typeDesc ^* ',')? &IND{>} stmt typeDef = identWithPragma genericParamList? '=' optInd typeDefAux |