mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-02 09:58:01 +00:00
@@ -574,6 +574,9 @@ template formatValue(result: var string; value: cstring; specifier: string) =
|
||||
result.add value
|
||||
|
||||
proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
|
||||
template missingCloseChar =
|
||||
error("invalid format string: missing closing character '" & closeChar & "'")
|
||||
|
||||
if openChar == ':' or closeChar == ':':
|
||||
error "openChar and closeChar must not be ':'"
|
||||
var i = 0
|
||||
@@ -618,6 +621,8 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
|
||||
let start = i
|
||||
inc i
|
||||
i += f.skipWhitespace(i)
|
||||
if i == f.len:
|
||||
missingCloseChar
|
||||
if f[i] == closeChar or f[i] == ':':
|
||||
result.add newCall(bindSym"add", res, newLit(subexpr & f[start ..< i]))
|
||||
else:
|
||||
@@ -627,6 +632,9 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
|
||||
subexpr.add f[i]
|
||||
inc i
|
||||
|
||||
if i == f.len:
|
||||
missingCloseChar
|
||||
|
||||
var x: NimNode
|
||||
try:
|
||||
x = parseExpr(subexpr)
|
||||
@@ -639,10 +647,10 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
|
||||
while i < f.len and f[i] != closeChar:
|
||||
options.add f[i]
|
||||
inc i
|
||||
if i == f.len:
|
||||
missingCloseChar
|
||||
if f[i] == closeChar:
|
||||
inc i
|
||||
else:
|
||||
doAssert false, "invalid format string: missing '}'"
|
||||
result.add newCall(formatSym, res, x, newLit(options))
|
||||
elif f[i] == closeChar:
|
||||
if i<f.len-1 and f[i+1] == closeChar:
|
||||
|
||||
Reference in New Issue
Block a user