mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-04 19:17:47 +00:00
runtime: make stringNext use byteindex only, fix index offset
Use stringIterator.byteindex as the loop index, and remove stringIterator.rangeindex, as "the index of the loop is the starting position of the current rune, measured in bytes". This patch also fixes the current loop index returned by stringNext, using `it.byteindex' before - not after - `length' is added.
This commit is contained in:
@@ -14,8 +14,7 @@ type _string struct {
|
||||
|
||||
// The iterator state for a range over a string.
|
||||
type stringIterator struct {
|
||||
byteindex uintptr
|
||||
rangeindex uintptr
|
||||
byteindex uintptr
|
||||
}
|
||||
|
||||
// Return true iff the strings match.
|
||||
@@ -105,10 +104,10 @@ func stringNext(s string, it *stringIterator) (bool, int, rune) {
|
||||
if len(s) <= int(it.byteindex) {
|
||||
return false, 0, 0
|
||||
}
|
||||
i := int(it.byteindex)
|
||||
r, length := decodeUTF8(s, it.byteindex)
|
||||
it.byteindex += length
|
||||
it.rangeindex += 1
|
||||
return true, int(it.rangeindex), r
|
||||
return true, i, r
|
||||
}
|
||||
|
||||
// Convert a Unicode code point into an array of bytes and its length.
|
||||
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
package main
|
||||
|
||||
func testRangeString() {
|
||||
for i, c := range "abcü¢€𐍈°x" {
|
||||
println(i, c)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
testRangeString()
|
||||
}
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
0 97
|
||||
1 98
|
||||
2 99
|
||||
3 252
|
||||
5 162
|
||||
7 8364
|
||||
10 66376
|
||||
14 176
|
||||
16 120
|
||||
Reference in New Issue
Block a user