bugfix: no need for arrows to be new token kinds
This commit is contained in:
parent
4cf64238b6
commit
375c95d3ad
3 changed files with 10 additions and 8 deletions
|
|
@ -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"]
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue