bugfix: no need for arrows to be new token kinds

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

View file

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

View file

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

View file

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