summary refs log tree commit diff stats
path: root/lib/pure/subexes.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pure/subexes.nim')
-rw-r--r--lib/pure/subexes.nim11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/pure/subexes.nim b/lib/pure/subexes.nim
index 7ab5d1ad3..3e5e36b38 100644
--- a/lib/pure/subexes.nim
+++ b/lib/pure/subexes.nim
@@ -297,7 +297,7 @@ proc subex*(s: string): TSubex =
   ## no syntax checking but this may change in later versions.
   result = TSubex(s)
 
-proc addf*(s: var string, formatstr: TSubex, a: openarray[string]) {.
+proc addf*(s: var string, formatstr: TSubex, a: varargs[string, `$`]) {.
            noSideEffect, rtl, extern: "nfrmtAddf".} =
   ## The same as ``add(s, formatstr % a)``, but more efficient.
   var p: TFormatParser
@@ -326,6 +326,15 @@ proc `%` *(formatstr: TSubex, a: string): string {.noSideEffect,
   result = newStringOfCap(formatstr.string.len + a.len)
   addf(result, formatstr, [a])
 
+proc format*(formatstr: TSubex, a: varargs[string, `$`]): string {.noSideEffect,
+  rtl, extern: "nfrmtFormatVarargs".} =
+  ## The `substitution`:idx: operator performs string substitutions in
+  ## `formatstr` and returns a modified `formatstr`. This is often called
+  ## `string interpolation`:idx:.
+  ##
+  result = newStringOfCap(formatstr.string.len + a.len shl 4)
+  addf(result, formatstr, a)
+
 {.pop.}
 
 when isMainModule: