diff --git a/inc/drivers/builtin/json.h b/inc/drivers/builtin/json.h index af1d385..efe3eee 100644 --- a/inc/drivers/builtin/json.h +++ b/inc/drivers/builtin/json.h @@ -31,6 +31,7 @@ #define JSON_INCREMENT_TOKEN_ID \ *token_id += 1; \ +/* DEBUG("token: %d - %s", *token_id, json->tokens[*token_id].string);*/ \ if (*token_id >= json->num_tokens) { \ log(LOG_ERROR, "failed to parse json -> unexpected EOF"); \ json_node_dump(json->root_node, 0); \ diff --git a/ramdisk/noxos.json b/ramdisk/noxos.json index ad44cc4..7a53b37 100644 --- a/ramdisk/noxos.json +++ b/ramdisk/noxos.json @@ -1,8 +1,10 @@ { "PS2_ACPI_VALIDATION": true, - "LOG_GRAPHICAL": true, + "LOG_GRAPHICAL": false, - "modules": { - "FAT32": "/initrd/modules/fat32.nxkm" - } + "drivers": [ + "/initrd/drv/test.nxkm", + "/initrd/drv/nx_std_fat32.nxkm" + ], + "test": 1 } \ No newline at end of file diff --git a/src/drivers/builtin/json.c b/src/drivers/builtin/json.c index 52616e6..33b58c2 100644 --- a/src/drivers/builtin/json.c +++ b/src/drivers/builtin/json.c @@ -9,6 +9,8 @@ json_T* json_from_string(string_t str) { json_tokenize(json, str); +// DEBUG("TOKENS:");ss + bool status = json_parse(json); if (!status) { json_destruct(json); @@ -270,6 +272,8 @@ void json_tokenize(json_T* json, string_t str) { } bool json_parse_assignment(json_T* json, uint32_t* token_id, json_node_T* node) { +// DEBUG("parsing assignment"); + JSON_INCREMENT_TOKEN_ID if (json->tokens[*token_id].type != JSON_TOKEN_SPECIAL || json->tokens[*token_id].string[0] != ':') { log(LOG_ERROR, "failed to parse json at position %d:%d -> expected : got \"%s\"", json->tokens[*token_id].line, json->tokens[*token_id].column, json->tokens[*token_id].string); @@ -314,7 +318,6 @@ bool json_parse_assignment(json_T* json, uint32_t* token_id, json_node_T* node) case '{': { json_node_T* object_node = json_node_alloc(node, JSON_NODE_OBJECT, &json->tokens[*token_id]); - JSON_INCREMENT_TOKEN_ID bool status = json_parse_object(json, token_id, object_node); if (!status) return false; break; @@ -323,7 +326,6 @@ bool json_parse_assignment(json_T* json, uint32_t* token_id, json_node_T* node) case '[': { json_node_T* array_node = json_node_alloc(node, JSON_NODE_ARRAY, &json->tokens[*token_id]); - JSON_INCREMENT_TOKEN_ID bool status = json_parse_array(json, token_id, array_node); if (!status) return false; break; @@ -343,12 +345,13 @@ bool json_parse_assignment(json_T* json, uint32_t* token_id, json_node_T* node) } bool json_parse_object(json_T* json, uint32_t* token_id, json_node_T* node) { +// DEBUG("parsing object"); while (true) { + JSON_INCREMENT_TOKEN_ID switch (json->tokens[*token_id].type) { case JSON_TOKEN_STRING: { json_node_T* string_node = json_node_alloc(node, JSON_NODE_STRING, &json->tokens[*token_id]); - JSON_INCREMENT_TOKEN_ID bool status = json_parse_assignment(json, token_id, string_node); if (!status) return false; break; @@ -378,15 +381,14 @@ bool json_parse_object(json_T* json, uint32_t* token_id, json_node_T* node) { return false; } return true; - } else { - JSON_INCREMENT_TOKEN_ID } - } } bool json_parse_array(json_T* json, uint32_t* token_id, json_node_T* node) { +// DEBUG("parsing array"); while (true) { + JSON_INCREMENT_TOKEN_ID switch (json->tokens[*token_id].type) { case JSON_TOKEN_STRING: { json_node_alloc(node, JSON_NODE_STRING, &json->tokens[*token_id]); @@ -421,7 +423,6 @@ bool json_parse_array(json_T* json, uint32_t* token_id, json_node_T* node) { case '{': { json_node_T* object_node = json_node_alloc(node, JSON_NODE_OBJECT, &json->tokens[*token_id]); - JSON_INCREMENT_TOKEN_ID bool status = json_parse_object(json, token_id, object_node); if (!status) return false; break; @@ -430,7 +431,6 @@ bool json_parse_array(json_T* json, uint32_t* token_id, json_node_T* node) { case '[': { json_node_T* array_node = json_node_alloc(node, JSON_NODE_ARRAY, &json->tokens[*token_id]); - JSON_INCREMENT_TOKEN_ID bool status = json_parse_array(json, token_id, array_node); if (!status) return false; break; @@ -453,11 +453,8 @@ bool json_parse_array(json_T* json, uint32_t* token_id, json_node_T* node) { json->tokens[*token_id].line, json->tokens[*token_id].column, json->tokens[*token_id].string); return false; } - JSON_INCREMENT_TOKEN_ID return true; } - - JSON_INCREMENT_TOKEN_ID } } @@ -469,11 +466,6 @@ bool json_parse(json_T* json) { log(LOG_ERROR, "failed to parse json at position %d:%d -> expected { got \"%s\"", json->tokens[0].line, json->tokens[0].column, json->tokens[0].string); return false; } - token_id++; - if (token_id >= json->num_tokens) { \ - log(LOG_ERROR, "failed to parse json -> unexpected EOF"); - return false; - } return json_parse_object(json, &token_id, json->root_node); } diff --git a/src/utils/string.c b/src/utils/string.c index c4343ef..ef4976c 100644 --- a/src/utils/string.c +++ b/src/utils/string.c @@ -436,7 +436,7 @@ bool string_is_char_number(char chr) { bool string_is_char_special(char chr) { if ((chr >= '!' && chr <= '/') || (chr >= ':' && chr <= '@') || - (chr >= '^' && chr <= '`') || + (chr >= '[' && chr <= '`') || (chr >= '{' && chr <= '~')) { return true; }