From e0aca8fa72546b385bdb345fb65f4fe3b9c6f4fc Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Wed, 4 Sep 2024 03:02:30 -0400 Subject: [PATCH] Add method for getting a length-based string as Text --- builtins/text.c | 11 ++++++++--- builtins/text.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/builtins/text.c b/builtins/text.c index a96426f..a3bca6f 100644 --- a/builtins/text.c +++ b/builtins/text.c @@ -400,13 +400,13 @@ Text_t text_from_u32(uint32_t *codepoints, int64_t num_codepoints, bool normaliz return ret; } -public Text_t Text$from_str(const char *str) +public Text_t Text$from_strn(const char *str, size_t len) { int64_t ascii_span = 0; - while (str[ascii_span] && isascii(str[ascii_span])) + for (size_t i = 0; i < len && isascii(str[i]); i++) ascii_span++; - if (str[ascii_span] == '\0') { // All ASCII + if (ascii_span == (int64_t)len) { // All ASCII Text_t ret = {.length=ascii_span}; if (ascii_span <= 8) { ret.tag = TEXT_SHORT_ASCII; @@ -427,6 +427,11 @@ public Text_t Text$from_str(const char *str) } } +public Text_t Text$from_str(const char *str) +{ + return Text$from_strn(str, strlen(str)); +} + static void u8_buf_append(Text_t text, char **buf, int64_t *capacity, int64_t *i) { switch (text.tag) { diff --git a/builtins/text.h b/builtins/text.h index bcfe805..a25a61d 100644 --- a/builtins/text.h +++ b/builtins/text.h @@ -23,6 +23,7 @@ Text_t Text$_concat(int n, Text_t items[n]); #define Texts(...) Text$concat(__VA_ARGS__) Text_t Text$slice(Text_t text, Int_t first_int, Int_t last_int); Text_t Text$from_str(const char *str); +Text_t Text$from_strn(const char *str, size_t len); uint64_t Text$hash(Text_t *text); int32_t Text$compare(const Text_t *a, const Text_t *b); bool Text$equal(const Text_t *a, const Text_t *b);