aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--json.c11
-rw-r--r--main.c10
-rw-r--r--string.c2
3 files changed, 11 insertions, 12 deletions
diff --git a/json.c b/json.c
index e68d617..4a49bbf 100644
--- a/json.c
+++ b/json.c
@@ -72,7 +72,7 @@ typedef struct {
} parse_string_result;
parse_string_result parse_string(Arena *a, Str src, uintptr_t pos) {
- printf("json.parse_string: %s", src.data + pos);
+ printf("json.parse_string: %s\n", src.data + pos);
assert(src.data[pos] == '"');
int i = 1;
@@ -81,18 +81,15 @@ parse_string_result parse_string(Arena *a, Str src, uintptr_t pos) {
assert(i + pos <= src.len);
}
assert(src.data[pos + i]);
- char *s;
- memcpy(s, src.data + pos + 1, i - 1);
+ Str s = Str_copy(a, &src.data[pos + 1], i - 1);
- printf("%s", s);
-
- return (parse_string_result){Str_copy(a, src.data + pos + 1, i - 1), pos + i};
+ return (parse_string_result){s, pos + i};
}
JSON JSON_parse(Arena *a, Str src) {
JSON json = {0};
int pos = 0;
- // printf("json.parse: src=%s", src.data);
+ printf("json.parse: src=%s\n", src.data);
if (isdigit(src.data[pos])) {
parse_integer_result result = parse_integer(a, src, 0);
json.integer = &result.value;
diff --git a/main.c b/main.c
index 0910b3d..145d768 100644
--- a/main.c
+++ b/main.c
@@ -22,7 +22,10 @@ typedef struct {
int main() {
Arena perm = Arena_new(128e3);
+ // Testing string
assert(Str_equals(S("Bonjour"), S("Bonjour")));
+ Str s = S("Hello");
+ assert(Str_equals(s, Str_copy(&perm, s.data, s.len)));
// Testing JSON
printf("Arena: mem=%d B\n", Arena_get_used(perm));
JSON json_int = JSON_parse(&perm, S("123"));
@@ -39,9 +42,8 @@ int main() {
printf("Arena: mem=%d B\n", Arena_get_used(perm));
assert(*Vec_get(JSON_parse(&perm, S("[1, 2, 3]")).array, int, 1) == 2);
printf("Arena: mem=%d B\n", Arena_get_used(perm));
- Str a = S("\"abc\"");
- JSON s = JSON_parse(&perm, S("\"abc\""));
- // printf("%s (%d)\n", s.string->data, s.string->len);
- // assert(Str_equals(*JSON_parse(&perm, S("\"abc\"")).string, S("abc")) == 1);
+ JSON js = JSON_parse(&perm, S("\"abc\""));
+ assert(Str_equals(*js.string, S("abc")) == 1);
+ printf("Arena: mem=%d B\n", Arena_get_used(perm));
return 0;
}
diff --git a/string.c b/string.c
index 509163f..ec7af39 100644
--- a/string.c
+++ b/string.c
@@ -25,7 +25,7 @@ uint64_t Str_hash64(Str s) {
}
Str Str_copy(Arena *a, char *data, uintptr_t len) {
- Str str = {0};
+ Str str = {0,len};
str.data = new (a, char, len);
if (str.len)
memcpy(str.data, data, len);