diff options
Diffstat (limited to 'rod')
-rwxr-xr-x | rod/options.nim | 2 | ||||
-rwxr-xr-x | rod/pbraces.nim | 27 | ||||
-rwxr-xr-x | rod/pnimsyn.nim | 27 | ||||
-rwxr-xr-x | rod/rnimsyn.nim | 2 | ||||
-rwxr-xr-x | rod/scanner.nim | 21 |
5 files changed, 50 insertions, 29 deletions
diff --git a/rod/options.nim b/rod/options.nim index 1503770c3..16ff536bd 100755 --- a/rod/options.nim +++ b/rod/options.nim @@ -128,7 +128,7 @@ proc addImplicitMod(filename: string) = gImplicitMods[length] = filename proc getPrefixDir(): string = - result = SplitPath(getApplicationDir()).head + result = SplitPath(getAppDir()).head proc shortenDir(dir: string): string = # returns the interesting part of a dir diff --git a/rod/pbraces.nim b/rod/pbraces.nim index 4a5f85b85..dc1ddb292 100755 --- a/rod/pbraces.nim +++ b/rod/pbraces.nim @@ -163,12 +163,28 @@ proc parseAddr(p: var TParser): PNode = addSon(result, parseExpr(p)) optPar(p) eat(p, tkParRi) + +proc parseGStrLit(p: var TParser, a: PNode): PNode = + case p.tok.tokType + of tkGStrLit: + result = newNodeP(nkCallStrLit, p) + addSon(result, a) + addSon(result, newStrNodeP(nkRStrLit, p.tok.literal, p)) + getTok(p) + of tkGTripleStrLit: + result = newNodeP(nkCallStrLit, p) + addSon(result, a) + addSon(result, newStrNodeP(nkTripleStrLit, p.tok.literal, p)) + getTok(p) + else: + result = a proc identOrLiteral(p: var TParser): PNode = case p.tok.tokType of tkSymbol: result = newIdentNodeP(p.tok.ident, p) getTok(p) + result = parseGStrLit(p, result) of tkAccent: result = accExpr(p) # literals of tkIntLit: @@ -212,16 +228,6 @@ proc identOrLiteral(p: var TParser): PNode = of tkTripleStrLit: result = newStrNodeP(nkTripleStrLit, p.tok.literal, p) getTok(p) - of tkCallRStrLit: - result = newNodeP(nkCallStrLit, p) - addSon(result, newIdentNodeP(p.tok.ident, p)) - addSon(result, newStrNodeP(nkRStrLit, p.tok.literal, p)) - getTok(p) - of tkCallTripleStrLit: - result = newNodeP(nkCallStrLit, p) - addSon(result, newIdentNodeP(p.tok.ident, p)) - addSon(result, newStrNodeP(nkTripleStrLit, p.tok.literal, p)) - getTok(p) of tkCharLit: result = newIntNodeP(nkCharLit, ord(p.tok.literal[0]), p) getTok(p) @@ -279,6 +285,7 @@ proc primary(p: var TParser): PNode = getTok(p) # skip '.' optInd(p, result) addSon(result, parseSymbol(p)) + result = parseGStrLit(p, result) of tkHat: a = result result = newNodeP(nkDerefExpr, p) diff --git a/rod/pnimsyn.nim b/rod/pnimsyn.nim index fe80fe0c4..113f47d34 100755 --- a/rod/pnimsyn.nim +++ b/rod/pnimsyn.nim @@ -394,11 +394,27 @@ proc setBaseFlags(n: PNode, base: TNumericalBase) = of base8: incl(n.flags, nfBase8) of base16: incl(n.flags, nfBase16) +proc parseGStrLit(p: var TParser, a: PNode): PNode = + case p.tok.tokType + of tkGStrLit: + result = newNodeP(nkCallStrLit, p) + addSon(result, a) + addSon(result, newStrNodeP(nkRStrLit, p.tok.literal, p)) + getTok(p) + of tkGTripleStrLit: + result = newNodeP(nkCallStrLit, p) + addSon(result, a) + addSon(result, newStrNodeP(nkTripleStrLit, p.tok.literal, p)) + getTok(p) + else: + result = a + proc identOrLiteral(p: var TParser): PNode = case p.tok.tokType of tkSymbol: result = newIdentNodeP(p.tok.ident, p) getTok(p) + result = parseGStrLit(p, result) of tkAccent: result = accExpr(p) # literals of tkIntLit: @@ -442,16 +458,6 @@ proc identOrLiteral(p: var TParser): PNode = of tkTripleStrLit: result = newStrNodeP(nkTripleStrLit, p.tok.literal, p) getTok(p) - of tkCallRStrLit: - result = newNodeP(nkCallStrLit, p) - addSon(result, newIdentNodeP(p.tok.ident, p)) - addSon(result, newStrNodeP(nkRStrLit, p.tok.literal, p)) - getTok(p) - of tkCallTripleStrLit: - result = newNodeP(nkCallStrLit, p) - addSon(result, newIdentNodeP(p.tok.ident, p)) - addSon(result, newStrNodeP(nkTripleStrLit, p.tok.literal, p)) - getTok(p) of tkCharLit: result = newIntNodeP(nkCharLit, ord(p.tok.literal[0]), p) getTok(p) @@ -509,6 +515,7 @@ proc primary(p: var TParser): PNode = getTok(p) # skip '.' optInd(p, result) addSon(result, parseSymbol(p)) + result = parseGStrLit(p, result) of tkHat: a = result result = newNodeP(nkDerefExpr, p) diff --git a/rod/rnimsyn.nim b/rod/rnimsyn.nim index d0c7dc9e3..9424c4519 100755 --- a/rod/rnimsyn.nim +++ b/rod/rnimsyn.nim @@ -684,7 +684,7 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) = if n.sons[1].kind == nkRStrLit: put(g, tkRStrLit, '\"' & replace(n[1].strVal, "\"", "\"\"") & '\"') else: - gsub(g, n.sons[0]) + gsub(g, n.sons[1]) of nkHiddenStdConv, nkHiddenSubConv, nkHiddenCallConv: gsub(g, n.sons[0]) of nkCast: put(g, tkCast, "cast") diff --git a/rod/scanner.nim b/rod/scanner.nim index 348c5c73d..f40b8769d 100755 --- a/rod/scanner.nim +++ b/rod/scanner.nim @@ -58,7 +58,7 @@ type tkYield, #[[[end]]] tkIntLit, tkInt8Lit, tkInt16Lit, tkInt32Lit, tkInt64Lit, tkFloatLit, tkFloat32Lit, tkFloat64Lit, tkStrLit, tkRStrLit, tkTripleStrLit, - tkCallRStrLit, tkCallTripleStrLit, tkCharLit, tkParLe, tkParRi, tkBracketLe, + tkGStrLit, tkGTripleStrLit, tkCharLit, tkParLe, tkParRi, tkBracketLe, tkBracketRi, tkCurlyLe, tkCurlyRi, tkBracketDotLe, tkBracketDotRi, # [. and .] tkCurlyDotLe, tkCurlyDotRi, # {. and .} @@ -91,7 +91,7 @@ const "yield", #[[[end]]] "tkIntLit", "tkInt8Lit", "tkInt16Lit", "tkInt32Lit", "tkInt64Lit", "tkFloatLit", "tkFloat32Lit", "tkFloat64Lit", "tkStrLit", "tkRStrLit", - "tkTripleStrLit", "tkCallRStrLit", "tkCallTripleStrLit", "tkCharLit", "(", + "tkTripleStrLit", "tkGStrLit", "tkGTripleStrLit", "tkCharLit", "(", ")", "[", "]", "{", "}", "[.", ".]", "{.", ".}", "(.", ".)", ",", ";", ":", "=", ".", "..", "^", "tkOpr", "tkComment", "`", "[new indentation]", "[same indentation]", "[dedentation]", "tkSpaces", "tkInfixOpr", @@ -587,10 +587,11 @@ proc getSymbol(L: var TLexer, tok: var TToken) = tok.tokType = tkSymbol else: tok.tokType = TTokType(tok.ident.id + ord(tkSymbol)) - if buf[pos] == '\"': - getString(L, tok, true) - if tok.tokType == tkRStrLit: tok.tokType = tkCallRStrLit - else: tok.tokType = tkCallTripleStrLit + when false: + if buf[pos] == '\"': + getString(L, tok, true) + if tok.tokType == tkRStrLit: tok.tokType = tkCallRStrLit + else: tok.tokType = tkCallTripleStrLit proc getOperator(L: var TLexer, tok: var TToken) = var pos = L.bufpos @@ -770,7 +771,13 @@ proc rawGetTok(L: var TLexer, tok: var TToken) = tok.tokType = tkAccent Inc(L.bufpos) of '\"': - getString(L, tok, false) + # check for extended raw string literal: + var rawMode = L.bufpos > 0 and L.buf[L.bufpos-1] in SymChars + getString(L, tok, rawMode) + if rawMode: + # tkRStrLit -> tkGStrLit + # tkTripleStrLit -> tkGTripleStrLit + inc(tok.tokType, 2) of '\'': tok.tokType = tkCharLit getCharacter(L, tok) |