File tree Expand file tree Collapse file tree 1 file changed +10
-2
lines changed
Expand file tree Collapse file tree 1 file changed +10
-2
lines changed Original file line number Diff line number Diff line change @@ -574,6 +574,9 @@ template formatValue(result: var string; value: cstring; specifier: string) =
574574 result .add value
575575
576576proc strformatImpl (f: string ; openChar, closeChar: char ): NimNode =
577+ template missingCloseChar =
578+ error (" invalid format string: missing closing character '" & closeChar & " '" )
579+
577580 if openChar == ':' or closeChar == ':' :
578581 error " openChar and closeChar must not be ':'"
579582 var i = 0
@@ -618,6 +621,8 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
618621 let start = i
619622 inc i
620623 i += f.skipWhitespace (i)
624+ if i == f.len:
625+ missingCloseChar
621626 if f[i] == closeChar or f[i] == ':' :
622627 result .add newCall (bindSym " add" , res, newLit (subexpr & f[start ..< i]))
623628 else :
@@ -627,6 +632,9 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
627632 subexpr.add f[i]
628633 inc i
629634
635+ if i == f.len:
636+ missingCloseChar
637+
630638 var x: NimNode
631639 try :
632640 x = parseExpr (subexpr)
@@ -639,10 +647,10 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
639647 while i < f.len and f[i] != closeChar:
640648 options.add f[i]
641649 inc i
650+ if i == f.len:
651+ missingCloseChar
642652 if f[i] == closeChar:
643653 inc i
644- else :
645- doAssert false , " invalid format string: missing '}'"
646654 result .add newCall (formatSym, res, x, newLit (options))
647655 elif f[i] == closeChar:
648656 if i< f.len- 1 and f[i+ 1 ] == closeChar:
You can’t perform that action at this time.
0 commit comments