From 1eda325177ca4c6c280cfc7fcf67cacdfee65adb Mon Sep 17 00:00:00 2001 From: flywind <43030857+xflywind@users.noreply.github.com> Date: Tue, 24 Nov 2020 02:23:52 +0800 Subject: [PATCH] fix ropes format errors (#16106) [backport:1.0] * fix rope index * add testcase * fix ropes format (cherry picked from commit 0c6c4be0e783893cc21352fa686fb18c158d3e43) --- lib/pure/ropes.nim | 2 +- tests/stdlib/tropes.nim | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pure/ropes.nim b/lib/pure/ropes.nim index 0797bbe060..a39533e581 100644 --- a/lib/pure/ropes.nim +++ b/lib/pure/ropes.nim @@ -262,7 +262,7 @@ proc `%`*(frmt: string, args: openArray[Rope]): Rope {. while true: j = j * 10 + ord(frmt[i]) - ord('0') inc(i) - if frmt[i] notin {'0'..'9'}: break + if i >= frmt.len or frmt[i] notin {'0'..'9'}: break add(result, args[j-1]) of '{': inc(i) diff --git a/tests/stdlib/tropes.nim b/tests/stdlib/tropes.nim index 9678e26c35..0c95d5c5f6 100644 --- a/tests/stdlib/tropes.nim +++ b/tests/stdlib/tropes.nim @@ -64,3 +64,10 @@ block: inc i doAssert r[66] == '\0' + +block: + let r1 = "$1 $2 $3" % [rope("Nim"), rope("is"), rope("a great language")] + doAssert $r1 == "Nim is a great language" + + let r2 = "$# $# $#" % [rope("Nim"), rope("is"), rope("a great language")] + doAssert $r2 == "Nim is a great language"