starting some work on implementation

This commit is contained in:
2026-07-30 18:53:04 +02:00
parent 148dde19a6
commit 6b2fe4089e
2 changed files with 68 additions and 1 deletions
+2 -1
View File
@@ -381,7 +381,7 @@ bool json_as_number(json_value_t *value, double *out_double);
bool json_as_object(json_value_t *value, json_object_t *out_object); bool json_as_object(json_value_t *value, json_object_t *out_object);
bool json_as_string(json_value_t *value, json_string_t *out_string); bool json_as_string(json_value_t *value, json_string_t *out_string);
bool json_obj_get(json_object_t *obj, json_string_t key, json_value_t *out_value); bool json_obj_get(json_object_t *obj, json_string_t key, json_value_t *out_value);
json_value_t *json_parse(const char *content, allocator_t allocator); json_value_t json_parse(scanner_t *scanner, allocator_t allocator);
// string builder ////////////////////////////////////////////////////////////// // string builder //////////////////////////////////////////////////////////////
typedef struct string_builder_node { typedef struct string_builder_node {
@@ -444,6 +444,7 @@ void allocator_reset(allocator_t this) {
#include "dyn_array.c" #include "dyn_array.c"
#include "cli.c" #include "cli.c"
#include "scanner.c" #include "scanner.c"
#include "json.c"
#include "string_builder.c" #include "string_builder.c"
#include "file_io.c" #include "file_io.c"
+66
View File
@@ -0,0 +1,66 @@
#include "cig.h"
#include <string.h>
bool json_as_array(json_value_t *value, json_array_t *array) {
}
bool json_as_boolean(json_value_t *value, bool *out_bool) {
}
bool json_as_null(json_value_t *value) {
}
bool json_as_number(json_value_t *value, double *out_double) {
}
bool json_as_object(json_value_t *value, json_object_t *out_object) {
}
bool json_as_string(json_value_t *value, json_string_t *out_string) {
}
bool json_obj_get(json_object_t *obj, json_string_t key, json_value_t *out_value) {
}
json_value_t json_parse(scanner_t *scanner, allocator_t allocator) {
scan_whitespace(scanner);
if (scan_string_literal(scanner)) {
const char *buffer = scanner->value.string_literal;
size_t length = strlen(buffer);
char *buff_copy = allocator_alloc(allocator, length+1);
strncpy(buff_copy, buffer, length+1);
buff_copy[length] = '\0';
return (json_value_t) {
.type=json_type_string,
.string=(json_string_t) { .length=length, .buffer=buff_copy }
};
} else if (scan_f64(scanner)) {
return (json_value_t) {
.type=json_type_number,
.number=scanner->value.f64
};
} else if (scan_i64(scanner)) {
// TODO: is this needed?
return (json_value_t) {
.type=json_type_number,
.number=(double)scanner->value.i64
};
} else if (scan_literal(scanner, "true")) {
return (json_value_t) {
.type=json_type_boolean,
.boolean=true
};
} else if (scan_literal(scanner, "false")) {
return (json_value_t) {
.type=json_type_boolean,
.boolean=false
};
} else if (scan_literal(scanner, "null")) {
return (json_value_t) {
.type=json_type_null
};
} else if (scan_literal(scanner, "[")) {
json_parse(scanner, allocator);
// TODO
}
}