diff options
-rw-r--r-- | lib/pure/parseutils.nim | 4 | ||||
-rw-r--r-- | lib/pure/strutils.nim | 14 | ||||
-rw-r--r-- | tests/manyloc/standalone/barebone.nim | 3 |
3 files changed, 13 insertions, 8 deletions
diff --git a/lib/pure/parseutils.nim b/lib/pure/parseutils.nim index 9844201fe..2c677fdc2 100644 --- a/lib/pure/parseutils.nim +++ b/lib/pure/parseutils.nim @@ -295,7 +295,7 @@ iterator interpolatedFragments*(s: string): tuple[kind: InterpolatedKind, dec nesting of '\0': raise newException(ValueError, - "Expected closing '}': " & s[i..s.len]) + "Expected closing '}': " & substr(s, i, s.high)) else: discard inc j inc i, 2 # skip ${ @@ -311,7 +311,7 @@ iterator interpolatedFragments*(s: string): tuple[kind: InterpolatedKind, kind = ikDollar else: raise newException(ValueError, - "Unable to parse a varible name at " & s[i..s.len]) + "Unable to parse a varible name at " & substr(s, i, s.high)) else: while j < s.len and s[j] != '$': inc j kind = ikStr diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 4f449cb0e..e17d99dc2 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -1042,18 +1042,20 @@ proc unescape*(s: string, prefix = "\"", suffix = "\""): string {.noSideEffect, ## ValueError exception will be raised. result = newStringOfCap(s.len) var i = 0 - if s[0 .. prefix.len-1] != prefix: + if not s.startsWith(prefix): raise newException(ValueError, "String does not start with a prefix of: " & prefix) - i.inc() + inc(i) while true: if i == s.len-suffix.len: break case s[i] of '\\': case s[i+1]: of 'x': - let j = parseHexInt(s[i+2 .. i+3]) - result.add(chr(j)) + inc i + var c: int + i += parseutils.parseHex(s, c, i) + result.add(chr(c)) inc(i, 2) of '\\': result.add('\\') @@ -1066,8 +1068,8 @@ proc unescape*(s: string, prefix = "\"", suffix = "\""): string {.noSideEffect, of '\0': break else: result.add(s[i]) - i.inc() - if s[i .. -1] != suffix: + inc(i) + if not s.endsWith(suffix): raise newException(ValueError, "String does not end with a suffix of: " & suffix) diff --git a/tests/manyloc/standalone/barebone.nim b/tests/manyloc/standalone/barebone.nim index 6b452ead0..9d75f8f2e 100644 --- a/tests/manyloc/standalone/barebone.nim +++ b/tests/manyloc/standalone/barebone.nim @@ -1,4 +1,7 @@ +# bug #2041: Macros need to be available for os:standalone! +import macros + proc printf(frmt: cstring) {.varargs, header: "<stdio.h>", cdecl.} var x = 0 |