feat: add raw byte access methods and \x escape to String class

Add `byteAt(index)`, `codePointAt(index)`, and `bytes` sequence to String,
enabling direct byte-level manipulation of UTF-8 encoded strings. Introduce
`\x` hex escape sequence in string literals for specifying raw byte values.
Refactor Unicode escape parsing into a generic `readHexEscape` function
supporting variable digit counts. Implement `wrenUtf8Decode` utility for
decoding UTF-8 sequences from byte buffers. Add comprehensive tests for
`byteAt` including boundary conditions and error cases.
This commit is contained in:
Bob Nystrom
2015-03-28 03:44:07 +00:00
parent b7904a89c9
commit c3d0b66630
36 changed files with 402 additions and 15 deletions
+38
View File
@@ -0,0 +1,38 @@
// Bytes: 11111
// 012345678901234
// Chars: sø mé ஃ thî ng
var s = "søméஃthîng"
IO.print(s.byteAt(0)) // expect: 115
IO.print(s.byteAt(1)) // expect: 195
IO.print(s.byteAt(2)) // expect: 184
IO.print(s.byteAt(3)) // expect: 109
IO.print(s.byteAt(4)) // expect: 195
IO.print(s.byteAt(5)) // expect: 169
IO.print(s.byteAt(6)) // expect: 224
IO.print(s.byteAt(7)) // expect: 174
IO.print(s.byteAt(8)) // expect: 131
IO.print(s.byteAt(9)) // expect: 116
IO.print(s.byteAt(10)) // expect: 104
IO.print(s.byteAt(11)) // expect: 195
IO.print(s.byteAt(12)) // expect: 174
IO.print(s.byteAt(13)) // expect: 110
IO.print(s.byteAt(14)) // expect: 103
IO.print(s.byteAt(-15)) // expect: 115
IO.print(s.byteAt(-14)) // expect: 195
IO.print(s.byteAt(-13)) // expect: 184
IO.print(s.byteAt(-12)) // expect: 109
IO.print(s.byteAt(-11)) // expect: 195
IO.print(s.byteAt(-10)) // expect: 169
IO.print(s.byteAt(-9)) // expect: 224
IO.print(s.byteAt(-8)) // expect: 174
IO.print(s.byteAt(-7)) // expect: 131
IO.print(s.byteAt(-6)) // expect: 116
IO.print(s.byteAt(-5)) // expect: 104
IO.print(s.byteAt(-4)) // expect: 195
IO.print(s.byteAt(-3)) // expect: 174
IO.print(s.byteAt(-2)) // expect: 110
IO.print(s.byteAt(-1)) // expect: 103
IO.print("\0".byteAt(0)) // expect: 0