From 2e3f477957614fbbd182495cedf718590284d98a Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Tue, 17 Jul 2018 18:22:20 +0200 Subject: [PATCH] VM: accessing the string terminator is not allowed anymore; cleanup tests/system/tostring.nim --- compiler/vm.nim | 4 +++- tests/system/{toString.nim => tostring.nim} | 17 ++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) rename tests/system/{toString.nim => tostring.nim} (87%) diff --git a/compiler/vm.nim b/compiler/vm.nim index 7f0dd80edc..373a64e39d 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -533,8 +533,10 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = let s = regs[rb].node.strVal if s.isNil: stackTrace(c, tos, pc, errNilAccess) - elif idx <=% s.len: + elif idx <% s.len: regs[ra].intVal = s[idx].ord + elif idx == s.len and optLaxStrings in c.config.options: + regs[ra].intVal = 0 else: stackTrace(c, tos, pc, errIndexOutOfBounds) of opcWrArr: diff --git a/tests/system/toString.nim b/tests/system/tostring.nim similarity index 87% rename from tests/system/toString.nim rename to tests/system/tostring.nim index ea10f998ca..9a6b83f95f 100644 --- a/tests/system/toString.nim +++ b/tests/system/tostring.nim @@ -1,12 +1,12 @@ discard """ - output:"" + output: "" """ doAssert "@[23, 45]" == $(@[23, 45]) doAssert "[32, 45]" == $([32, 45]) doAssert """@["", "foo", "bar"]""" == $(@["", "foo", "bar"]) -doAssert """["", "foo", "bar"]""" == $(["", "foo", "bar"]) -doAssert """["", "foo", "bar"]""" == $(@["", "foo", "bar"].toOpenArray(0, 2)) +doAssert """["", "foo", "bar"]""" == $(["", "foo", "bar"]) +doAssert """["", "foo", "bar"]""" == $(@["", "foo", "bar"].toOpenArray(0, 2)) # bug #2395 let alphaSet: set[char] = {'a'..'c'} @@ -69,13 +69,13 @@ var yy: string doAssert xx == @[] doAssert yy == "" -proc bar(arg: cstring): void = +proc bar(arg: cstring) = doAssert arg[0] == '\0' -proc baz(arg: openarray[char]): void = +proc baz(arg: openarray[char]) = doAssert arg.len == 0 -proc stringCompare(): void = +proc stringCompare() = var a,b,c,d,e,f,g: string a.add 'a' doAssert a == "a" @@ -102,9 +102,12 @@ proc stringCompare(): void = doAssert "" != "\0\0\0\0\0\0\0\0\0\0" var nilstring: string - bar(nilstring) + #bar(nilstring) baz(nilstring) stringCompare() +var nilstring: string +bar(nilstring) + static: stringCompare() \ No newline at end of file