changed: iterator type of `utf8.runes`
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 8 Mar 2023 23:05:19 +0000 (17:05 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 8 Mar 2023 23:05:19 +0000 (17:05 -0600)
core/encoding/utf8.onyx
tests/utf8_test.onyx

index 2bf037ffb0a2b88266ca939eb5c7231ed136db25..57fcc1f0bfb444bc1e2ab1d587cd00a2b8e862c8 100644 (file)
@@ -134,20 +134,27 @@ rune_is_start :: (b: u8) -> bool {
     return rune_length_from_first_byte(b) > 1;
 }
 
-runes :: (s: str) -> Iterator(rune) {
+
+RuneIterValue :: struct {
+    rune: i32;
+    bytes: [] u8;
+}
+
+runes :: (s: str) -> Iterator(RuneIterValue) {
     return iter.generator(
         &.{ s = s },
         ctx => {
-            if string.empty(ctx.s) do return 0, false;
+            if string.empty(ctx.s) do return RuneIterValue.{}, false;
 
             r, len := decode_rune(ctx.s);
-            string.advance(&ctx.s, len);
+            defer string.advance(&ctx.s, len);
 
-            return r, true;
+            return .{ r, ctx.s[0..len] }, true;
         }            
     );
 }
 
+
 slice :: (s: str, low, high: i32) -> str {
     advanced := advance_rune(s, low);
     tmp := advanced;
index 1449b686b2b88c837617cef4772f031616c98a70..bc1f6ed33738561d4c52d54f4da4c5e3c84cc159 100644 (file)
@@ -11,8 +11,7 @@ main :: () {
     utf8.advance_rune(&tmp, 6);
 
     for utf8.runes(tmp) {
-        buf: [4] u8;
-        printf("{} ", utf8.encode_rune(buf, it));
+        printf("{} ", it.bytes);
     }
     print("\n");