diff --git a/build b/build old mode 100644 new mode 100755 diff --git a/compile b/compile old mode 100644 new mode 100755 diff --git a/compile_commands.json b/compile_commands.json index cc00ec3..3552923 100644 --- a/compile_commands.json +++ b/compile_commands.json @@ -14,9 +14,9 @@ "main", "src/main.c" ], - "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", - "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/main.c", - "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + "directory": "/Users/abdelrahman/dev/personal/say-it-in-json", + "file": "/Users/abdelrahman/dev/personal/say-it-in-json/src/main.c", + "output": "/Users/abdelrahman/dev/personal/say-it-in-json/main" }, { "arguments": [ @@ -33,9 +33,9 @@ "main", "src/dstring/dstring.c" ], - "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", - "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/dstring/dstring.c", - "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + "directory": "/Users/abdelrahman/dev/personal/say-it-in-json", + "file": "/Users/abdelrahman/dev/personal/say-it-in-json/src/dstring/dstring.c", + "output": "/Users/abdelrahman/dev/personal/say-it-in-json/main" }, { "arguments": [ @@ -52,215 +52,8 @@ "main", "src/lexer/lexer.c" ], - "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", - "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/lexer.c", - "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" - }, - { - "arguments": [ - "/usr/bin/clang-16", - "-cc1", - "-triple", - "x86_64-redhat-linux-gnu", - "-emit-obj", - "-mrelax-all", - "-disable-free", - "-clear-ast-before-backend", - "-disable-llvm-verifier", - "-discard-value-names", - "-main-file-name", - "-mrelocation-model", - "static", - "-mframe-pointer=all", - "-fmath-errno", - "-ffp-contract=on", - "-fno-rounding-math", - "-mconstructor-aliases", - "-funwind-tables=2", - "-target-cpu", - "x86-64", - "-tune-cpu", - "generic", - "-mllvm", - "-treat-scalable-fixed-error-as-warning", - "-debug-info-kind=constructor", - "-dwarf-version=4", - "-debugger-tuning=gdb", - "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", - "-resource-dir", - "/usr/lib64/clang/16", - "-I", - "include", - "-I", - "include/dstring", - "-I", - "include/lexer", - "-internal-isystem", - "/usr/lib64/clang/16/include", - "-internal-isystem", - "/usr/local/include", - "-internal-isystem", - "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", - "-internal-externc-isystem", - "/include", - "-internal-externc-isystem", - "/usr/include", - "-Wall", - "-Werror", - "-pedantic", - "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", - "-ferror-limit", - "19", - "-fgnuc-version=4.2.1", - "-fcolor-diagnostics", - "-faddrsig", - "-D__GCC_HAVE_DWARF2_CFI_ASM=1", - "-x", - "c", - "-o", - "/tmp/main-e1ef59.o", - "src/main.c" - ], - "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", - "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/main.c", - "output": "/tmp/main-e1ef59.o" - }, - { - "arguments": [ - "/usr/bin/clang-16", - "-cc1", - "-triple", - "x86_64-redhat-linux-gnu", - "-emit-obj", - "-mrelax-all", - "-disable-free", - "-clear-ast-before-backend", - "-disable-llvm-verifier", - "-discard-value-names", - "-main-file-name", - "-mrelocation-model", - "static", - "-mframe-pointer=all", - "-fmath-errno", - "-ffp-contract=on", - "-fno-rounding-math", - "-mconstructor-aliases", - "-funwind-tables=2", - "-target-cpu", - "x86-64", - "-tune-cpu", - "generic", - "-mllvm", - "-treat-scalable-fixed-error-as-warning", - "-debug-info-kind=constructor", - "-dwarf-version=4", - "-debugger-tuning=gdb", - "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", - "-resource-dir", - "/usr/lib64/clang/16", - "-I", - "include", - "-I", - "include/dstring", - "-I", - "include/lexer", - "-internal-isystem", - "/usr/lib64/clang/16/include", - "-internal-isystem", - "/usr/local/include", - "-internal-isystem", - "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", - "-internal-externc-isystem", - "/include", - "-internal-externc-isystem", - "/usr/include", - "-Wall", - "-Werror", - "-pedantic", - "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", - "-ferror-limit", - "19", - "-fgnuc-version=4.2.1", - "-fcolor-diagnostics", - "-faddrsig", - "-D__GCC_HAVE_DWARF2_CFI_ASM=1", - "-x", - "c", - "-o", - "/tmp/dstring-b2eb78.o", - "src/dstring/dstring.c" - ], - "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", - "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/dstring/dstring.c", - "output": "/tmp/dstring-b2eb78.o" - }, - { - "arguments": [ - "/usr/bin/clang-16", - "-cc1", - "-triple", - "x86_64-redhat-linux-gnu", - "-emit-obj", - "-mrelax-all", - "-disable-free", - "-clear-ast-before-backend", - "-disable-llvm-verifier", - "-discard-value-names", - "-main-file-name", - "-mrelocation-model", - "static", - "-mframe-pointer=all", - "-fmath-errno", - "-ffp-contract=on", - "-fno-rounding-math", - "-mconstructor-aliases", - "-funwind-tables=2", - "-target-cpu", - "x86-64", - "-tune-cpu", - "generic", - "-mllvm", - "-treat-scalable-fixed-error-as-warning", - "-debug-info-kind=constructor", - "-dwarf-version=4", - "-debugger-tuning=gdb", - "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", - "-resource-dir", - "/usr/lib64/clang/16", - "-I", - "include", - "-I", - "include/dstring", - "-I", - "include/lexer", - "-internal-isystem", - "/usr/lib64/clang/16/include", - "-internal-isystem", - "/usr/local/include", - "-internal-isystem", - "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", - "-internal-externc-isystem", - "/include", - "-internal-externc-isystem", - "/usr/include", - "-Wall", - "-Werror", - "-pedantic", - "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", - "-ferror-limit", - "19", - "-fgnuc-version=4.2.1", - "-fcolor-diagnostics", - "-faddrsig", - "-D__GCC_HAVE_DWARF2_CFI_ASM=1", - "-x", - "c", - "-o", - "/tmp/lexer-b0ee1f.o", - "src/lexer/lexer.c" - ], - "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", - "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/lexer.c", - "output": "/tmp/lexer-b0ee1f.o" + "directory": "/Users/abdelrahman/dev/personal/say-it-in-json", + "file": "/Users/abdelrahman/dev/personal/say-it-in-json/src/lexer/lexer.c", + "output": "/Users/abdelrahman/dev/personal/say-it-in-json/main" } ] diff --git a/include/dstring/dstring.h b/include/dstring/dstring.h index 4b45a9b..336a420 100644 --- a/include/dstring/dstring.h +++ b/include/dstring/dstring.h @@ -3,17 +3,19 @@ #include "aliases.h" -typedef struct dstr dstr_t; +typedef struct dstring dstr_t; dstr_t *dstr_with_capacity(u64 capacity); dstr_t *dstr_from_string(const char *str); -void update_dstr(dstr_t **dst, const char *src); -void delete_dstr(dstr_t **str); -void concat_dstr(dstr_t **dst, const char *src); -void append_to_dstr(dstr_t **dst, char c); -void empty_dstr(dstr_t *str); -void print_dstr(const dstr_t *str); +void dstr_update(dstr_t **dst, const char *src); +void dstr_free(dstr_t **str); +void dstr_concat(dstr_t **dst, const char *src); +void dstr_append(dstr_t **dst, char c); +void dstr_resize(dstr_t **str); +void dstr_clear(dstr_t *str); +void dstr_print(const dstr_t *str); u64 dstr_length(const dstr_t *str); u64 dstr_capacity(const dstr_t *str); +const char *dstr_to_cstr(const dstr_t *str); #endif // !DSTRING_H diff --git a/run_tests b/run_tests old mode 100644 new mode 100755 diff --git a/src/dstring/dstring.c b/src/dstring/dstring.c index 718edb0..71e4fb6 100644 --- a/src/dstring/dstring.c +++ b/src/dstring/dstring.c @@ -8,7 +8,7 @@ // constantly reallocate #define CAPACITY_SCALAR 8 -struct dstr { +struct dstring { u64 capacity; u64 size; char buf[]; @@ -45,7 +45,7 @@ dstr_t *dstr_from_string(const char *str) { return out; } -void update_dstr(dstr_t **dst, const char *src) { +void dstr_update(dstr_t **dst, const char *src) { if (!(*dst)) { return; } @@ -77,7 +77,7 @@ void update_dstr(dstr_t **dst, const char *src) { } } -void delete_dstr(dstr_t **str) { +void dstr_free(dstr_t **str) { if (!(*str)) { return; } @@ -86,7 +86,7 @@ void delete_dstr(dstr_t **str) { *str = NULL; } -void concat_dstr(dstr_t **dst, const char *src) { +void dstr_concat(dstr_t **dst, const char *src) { if (!(*dst)) { return; } @@ -105,10 +105,10 @@ void concat_dstr(dstr_t **dst, const char *src) { strncpy(str, (*dst)->buf, (*dst)->size); strncat(str, src, src_length); - update_dstr(dst, str); + dstr_update(dst, str); } -void append_to_dstr(dstr_t **dst, char c) { +void dstr_append(dstr_t **dst, char c) { if (!(*dst)) { return; } @@ -121,10 +121,24 @@ void append_to_dstr(dstr_t **dst, char c) { strncpy(str, (*dst)->buf, (*dst)->size); str[(*dst)->size] = c; - update_dstr(dst, str); + dstr_update(dst, str); } -void empty_dstr(dstr_t *str) { +void dstr_resize(dstr_t **str) { + u64 capacity = (*str)->size; + + dstr_t *tmp = (dstr_t *)realloc(*str, sizeof(dstr_t) + capacity + 1); + + if (!tmp) { + return; + } + + tmp->capacity = capacity; + + *str = tmp; +} + +void dstr_clear(dstr_t *str) { if (!str || str->size == 0) { return; } @@ -133,7 +147,7 @@ void empty_dstr(dstr_t *str) { str->size = 0; } -void print_dstr(const dstr_t *str) { +void dstr_print(const dstr_t *str) { if (!str) { return; } @@ -156,3 +170,5 @@ u64 dstr_capacity(const dstr_t *str) { return str->capacity; } + +const char *dstr_to_cstr(const dstr_t *str) { return str->buf; } diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index fbd3aea..02be623 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -408,7 +408,7 @@ lexer_state_t handle_array(lexer_t *lexer, char input) { } lexer_state_t handle_key(lexer_t *lexer, char input) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_STRING; } @@ -417,7 +417,7 @@ lexer_state_t handle_value(lexer_t *lexer, char input) { if (isspace(input)) { return LEXER_STATE_VALUE; } else if (isdigit(input) && input != '0') { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_NUMBER; } @@ -428,7 +428,7 @@ lexer_state_t handle_value(lexer_t *lexer, char input) { return LEXER_STATE_STRING; case '0': - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_DECIMAL; case '{': @@ -449,14 +449,14 @@ lexer_state_t handle_value(lexer_t *lexer, char input) { lexer_state_t handle_string(lexer_t *lexer, char input) { switch (input) { case '\\': - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_ESCAPE_SEQUENCE; case '"': return LEXER_STATE_STRING_END; } - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_STRING; } @@ -466,7 +466,7 @@ lexer_state_t handle_string_end(lexer_t *lexer, char input) { return LEXER_STATE_STRING_END; } - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); lexer->current = stack_pop(&(lexer->stack)); @@ -489,7 +489,7 @@ lexer_state_t handle_string_end(lexer_t *lexer, char input) { } lexer_state_t handle_escape_sequence(lexer_t *lexer, char input) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); switch (input) { case '"': @@ -510,7 +510,7 @@ lexer_state_t handle_escape_sequence(lexer_t *lexer, char input) { lexer_state_t handle_unicode_sequence(lexer_t *lexer, char input) { append_to_lex_str(&(lexer->codepoint), input); - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); if (!ishex(input)) { clear_lex_str(&(lexer->codepoint)); @@ -526,7 +526,7 @@ lexer_state_t handle_unicode_sequence(lexer_t *lexer, char input) { } lexer_state_t handle_decimal(lexer_t *lexer, char input) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); if (input == '.') { return LEXER_STATE_FRACTION; @@ -537,19 +537,19 @@ lexer_state_t handle_decimal(lexer_t *lexer, char input) { lexer_state_t handle_number(lexer_t *lexer, char input) { if (isdigit(input)) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_NUMBER; } else if (input == '.') { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_FRACTION; } else if (input == '}' || input == ']') { - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); return handle_collection_end(lexer, input); } else if (input == ',') { - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); return lexer->stack.stack[lexer->stack.size - 1]; } else if (isspace(input)) { @@ -561,19 +561,19 @@ lexer_state_t handle_number(lexer_t *lexer, char input) { lexer_state_t handle_fraction(lexer_t *lexer, char input) { if (isdigit(input)) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_FRACTION; } else if (input == '}' || input == ']') { - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); return handle_collection_end(lexer, input); } else if (input == 'e' || input == 'E') { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_EXPONENT; } else if (input == ',') { - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); return lexer->stack.stack[lexer->stack.size - 1]; } else if (isspace(input)) { @@ -584,7 +584,7 @@ lexer_state_t handle_fraction(lexer_t *lexer, char input) { } lexer_state_t handle_exponent(lexer_t *lexer, char input) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); if (isdigit(input)) { return LEXER_STATE_POWER; @@ -596,7 +596,7 @@ lexer_state_t handle_exponent(lexer_t *lexer, char input) { } lexer_state_t handle_exp_sign(lexer_t *lexer, char input) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); if (isdigit(input)) { return LEXER_STATE_POWER; @@ -607,15 +607,15 @@ lexer_state_t handle_exp_sign(lexer_t *lexer, char input) { lexer_state_t handle_power(lexer_t *lexer, char input) { if (isdigit(input)) { - append_to_dstr(&(lexer->current_string), input); + dstr_append(&(lexer->current_string), input); return LEXER_STATE_POWER; } else if (input == '}' || input == ']') { - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); return handle_collection_end(lexer, input); } else if (input == ',') { - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); return lexer->stack.stack[lexer->stack.size - 1]; } else if (isspace(input)) { @@ -626,7 +626,7 @@ lexer_state_t handle_power(lexer_t *lexer, char input) { } lexer_state_t handle_number_end(lexer_t *lexer, char input) { - empty_dstr(lexer->current_string); + dstr_clear(lexer->current_string); if (isspace(input)) { return LEXER_STATE_NUMBER_END;