bugfix: no need for arrows to be new token kinds

This commit is contained in:
Araq
2012-02-12 18:56:36 +01:00
parent 4cf64238b6
commit 375c95d3ad
3 changed files with 10 additions and 8 deletions

View File

@@ -50,7 +50,7 @@ type
tkCurlyDotLe, tkCurlyDotRi, # {. and .}
tkParDotLe, tkParDotRi, # (. and .)
tkComma, tkSemiColon,
tkColon, tkColonColon, tkEquals, tkLeArrow, tkRiArrow, tkDot, tkDotDot,
tkColon, tkColonColon, tkEquals, tkDot, tkDotDot,
tkOpr, tkComment, tkAccent, tkInd, tkSad,
tkDed, # pseudo token types used by the source renderers:
tkSpaces, tkInfixOpr, tkPrefixOpr, tkPostfixOpr,
@@ -78,7 +78,7 @@ const
"tkTripleStrLit", "tkGStrLit", "tkGTripleStrLit", "tkCharLit", "(",
")", "[", "]", "{", "}", "[.", ".]", "{.", ".}", "(.", ".)",
",", ";",
":", "::", "=", "<-", "->", ".", "..",
":", "::", "=", ".", "..",
"tkOpr", "tkComment", "`", "[new indentation]",
"[same indentation]", "[dedentation]", "tkSpaces", "tkInfixOpr",
"tkPrefixOpr", "tkPostfixOpr"]

View File

@@ -147,7 +147,7 @@ proc parseExpr(p: var TParser): PNode
proc parseStmt(p: var TParser): PNode
proc parseTypeDesc(p: var TParser): PNode
proc parseDoBlocks(p: var TParser, call: PNode)
proc parseParamList(p: var TParser, resTypeTok = tkColon): PNode
proc parseParamList(p: var TParser, retColon = true): PNode
proc IsLeftAssociative(tok: TToken): bool {.inline.} =
result = tok.tokType != tkOpr or tok.ident.s[0] != '^'
@@ -601,7 +601,7 @@ proc parseTuple(p: var TParser): PNode =
optPar(p)
eat(p, tkBracketRi)
proc parseParamList(p: var TParser, resTypeTok = tkColon): PNode =
proc parseParamList(p: var TParser, retColon = true): PNode =
var a: PNode
result = newNodeP(nkFormalParams, p)
addSon(result, ast.emptyNode) # return type
@@ -623,7 +623,9 @@ proc parseParamList(p: var TParser, resTypeTok = tkColon): PNode =
optInd(p, a)
optPar(p)
eat(p, tkParRi)
if p.tok.tokType == resTypeTok:
let b = if retColon: p.tok.tokType == tkColon
else: p.tok.tokType == tkOpr and IdentEq(p.tok.ident, "->")
if b:
getTok(p)
optInd(p, result)
result.sons[0] = parseTypeDesc(p)
@@ -635,7 +637,7 @@ proc optPragmas(p: var TParser): PNode =
proc parseDoBlock(p: var TParser): PNode =
var info = parLineInfo(p)
getTok(p)
var params = parseParamList(p, tkRiArrow)
var params = parseParamList(p, retColon=false)
var pragmas = optPragmas(p)
eat(p, tkColon)
result = newNodeI(nkDo, info)

View File

@@ -33,7 +33,7 @@ type
wShl, wShr, wTemplate, wTry, wTuple, wType, wVar, wWhen, wWhile, wWith,
wWithout, wXor, wYield,
wColon, wColonColon, wEquals, wLeArraw, wRiArrow, wDot, wDotDot,
wColon, wColonColon, wEquals, wDot, wDotDot,
wStar, wMinus,
wMagic, wThread, wFinal, wProfiler, wObjChecks,
wImportCpp, wImportObjC,
@@ -79,7 +79,7 @@ const
"try", "tuple", "type", "var", "when", "while", "with", "without", "xor",
"yield",
":", "::", "=", "<-", "->", ".", "..",
":", "::", "=", ".", "..",
"*", "-",
"magic", "thread", "final", "profiler", "objchecks",