aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/naming.c2
-rw-r--r--src/stdlib/text.c26
2 files changed, 14 insertions, 14 deletions
diff --git a/src/naming.c b/src/naming.c
index 376a176c..08a568ac 100644
--- a/src/naming.c
+++ b/src/naming.c
@@ -113,5 +113,5 @@ Text_t get_id_suffix(const char *filename) {
Path_t id_file = Path$child(build_dir, Texts(Path$base_name(path), Text$from_str(".id")));
OptionalText_t id = Path$read(id_file);
if (id.length < 0) err(1, "Could not read ID file: %s", id_file);
- return Texts(Text("$"), id);
+ return Texts("$", id);
}
diff --git a/src/stdlib/text.c b/src/stdlib/text.c
index d1273339..b6b7e0bb 100644
--- a/src/stdlib/text.c
+++ b/src/stdlib/text.c
@@ -521,7 +521,7 @@ static Text_t concat2(Text_t a, Text_t b) {
}
OptionalText_t glue =
- Text$from_utf32((List_t){.data = normalized, .length = (int64_t)norm_length, .stride = sizeof(int32_t)});
+ Text$from_utf32((List_t){.data = normalized, .length = (int64_t)norm_length, .stride = sizeof(ucs4_t)});
assert(glue.length >= 0);
if (normalized != norm_buf) free(normalized);
@@ -821,7 +821,7 @@ static void u8_buf_append(Text_t text, Byte_t **buf, int64_t *capacity, int64_t
case TEXT_ASCII: {
if (*i + text.length > (int64_t)*capacity) {
*capacity = *i + text.length + 1;
- *buf = GC_REALLOC(*buf, (size_t)*capacity);
+ *buf = GC_REALLOC(*buf, sizeof(Byte_t[*capacity]));
}
const char *bytes = text.ascii;
@@ -840,7 +840,7 @@ static void u8_buf_append(Text_t text, Byte_t **buf, int64_t *capacity, int64_t
if (*i + (int64_t)u8_len > (int64_t)*capacity) {
*capacity = *i + (int64_t)u8_len + 1;
- *buf = GC_REALLOC(*buf, (size_t)*capacity);
+ *buf = GC_REALLOC(*buf, sizeof(Byte_t[*capacity]));
}
memcpy(*buf + *i, u8, u8_len);
@@ -851,7 +851,7 @@ static void u8_buf_append(Text_t text, Byte_t **buf, int64_t *capacity, int64_t
size_t u8_len = u8_strlen(u8);
if (*i + (int64_t)u8_len > (int64_t)*capacity) {
*capacity = *i + (int64_t)u8_len + 1;
- *buf = GC_REALLOC(*buf, (size_t)*capacity);
+ *buf = GC_REALLOC(*buf, sizeof(Byte_t[*capacity]));
}
memcpy(*buf + *i, u8, u8_len);
@@ -871,7 +871,7 @@ static void u8_buf_append(Text_t text, Byte_t **buf, int64_t *capacity, int64_t
if (*i + (int64_t)u8_len > (int64_t)*capacity) {
*capacity = *i + (int64_t)u8_len + 1;
- *buf = GC_REALLOC(*buf, (size_t)*capacity);
+ *buf = GC_REALLOC(*buf, sizeof(Byte_t[*capacity]));
}
memcpy(*buf + *i, u8, u8_len);
@@ -882,7 +882,7 @@ static void u8_buf_append(Text_t text, Byte_t **buf, int64_t *capacity, int64_t
size_t u8_len = u8_strlen(u8);
if (*i + (int64_t)u8_len > (int64_t)*capacity) {
*capacity = *i + (int64_t)u8_len + 1;
- *buf = GC_REALLOC(*buf, (size_t)*capacity);
+ *buf = GC_REALLOC(*buf, sizeof(Byte_t[*capacity]));
}
memcpy(*buf + *i, u8, u8_len);
@@ -903,16 +903,16 @@ static void u8_buf_append(Text_t text, Byte_t **buf, int64_t *capacity, int64_t
public
char *Text$as_c_string(Text_t text) {
int64_t capacity = text.length + 1;
- Byte_t *buf = GC_MALLOC_ATOMIC((size_t)capacity);
+ char *buf = GC_MALLOC_ATOMIC((size_t)capacity);
int64_t i = 0;
- u8_buf_append(text, &buf, &capacity, &i);
+ u8_buf_append(text, (Byte_t **)&buf, &capacity, &i);
- if (i > (int64_t)capacity - 1) {
+ if (i + 1 > (int64_t)capacity) {
capacity = i + 1;
buf = GC_REALLOC(buf, (size_t)capacity);
}
buf[i] = '\0';
- return (char *)buf;
+ return buf;
}
PUREFUNC public uint64_t Text$hash(const void *obj, const TypeInfo_t *info) {
@@ -1558,7 +1558,7 @@ List_t Text$clusters(Text_t text) {
public
List_t Text$utf8(Text_t text) {
- if (text.length == 0) return (List_t){};
+ if (text.length == 0) return (List_t){.atomic = 1};
int64_t capacity = text.length;
Byte_t *buf = GC_MALLOC_ATOMIC(sizeof(Byte_t[capacity]));
int64_t i = 0;
@@ -1569,7 +1569,7 @@ List_t Text$utf8(Text_t text) {
public
List_t Text$utf16(Text_t text) {
- if (text.length == 0) return (List_t){};
+ if (text.length == 0) return (List_t){.atomic = 1};
List_t utf32 = Text$utf32(text);
List_t utf16 = {.free = MIN(LIST_MAX_FREE_ENTRIES, (uint64_t)utf32.length), .atomic = 1};
utf16.data = GC_MALLOC_ATOMIC(sizeof(int32_t[utf16.free]));
@@ -1587,7 +1587,7 @@ List_t Text$utf16(Text_t text) {
public
List_t Text$utf32(Text_t text) {
- if (text.length == 0) return (List_t){};
+ if (text.length == 0) return (List_t){.atomic = 1};
List_t codepoints = {.atomic = 1};
TextIter_t state = NEW_TEXT_ITER_STATE(text);
for (int64_t i = 0; i < text.length; i++) {