From 4e77bc7164070d7ffafdee1ba6ce3bb1aaf10746 Mon Sep 17 00:00:00 2001 From: nasr Date: Mon, 2 Mar 2026 22:44:17 +0000 Subject: feature(main): loading file + bug fixes structure improvement --- source/base/base_include.h | 3 --- source/base/base_mem.c | 17 ------------ source/base/base_mem.h | 18 +++++++++++++ source/base/base_os.h | 41 +++++++++++++++++++++++++++- source/base/base_string.c | 63 ------------------------------------------- source/base/base_string.h | 45 ++++++++++++++++++++++++++----- source/base/base_test.c | 0 source/engine/#engine_repl.c# | 7 ----- source/engine/engine.c | 34 +++++++++++++++++++++++ source/engine/engine_entry.c | 16 ----------- source/engine/engine_repl.c | 8 ------ source/engine/engine_repl.h | 17 ------------ source/lexer/lexer.c | 8 ++++++ source/lexer/lexer.h | 23 ++++++++++++++++ source/parser/parser.c | 16 +++++++++++ source/parser/parser.h | 16 +++++++++++ source/repl/repl.c | 16 +++++++++++ source/repl/repl.h | 16 +++++++++++ source/storage/csv_reader.c | 0 source/storage/csv_reader.h | 0 20 files changed, 225 insertions(+), 139 deletions(-) delete mode 100644 source/base/base_string.c delete mode 100644 source/base/base_test.c delete mode 100644 source/engine/#engine_repl.c# create mode 100644 source/engine/engine.c delete mode 100644 source/engine/engine_entry.c delete mode 100644 source/engine/engine_repl.c delete mode 100644 source/engine/engine_repl.h create mode 100644 source/lexer/lexer.c create mode 100644 source/lexer/lexer.h create mode 100644 source/parser/parser.c create mode 100644 source/parser/parser.h create mode 100644 source/repl/repl.c create mode 100644 source/repl/repl.h create mode 100644 source/storage/csv_reader.c create mode 100644 source/storage/csv_reader.h (limited to 'source') diff --git a/source/base/base_include.h b/source/base/base_include.h index 0b0f256..40ae5ea 100755 --- a/source/base/base_include.h +++ b/source/base/base_include.h @@ -20,11 +20,8 @@ #ifdef BASE_UNITY -#include "base_mem.c" #include "base_arena.c" #include "base_stack.c" -#include "base_test.c" -#include "base_string.c" #endif #endif diff --git a/source/base/base_mem.c b/source/base/base_mem.c index f20ba39..e69de29 100644 --- a/source/base/base_mem.c +++ b/source/base/base_mem.c @@ -1,17 +0,0 @@ -internal inline b8 -is_pow(umm x) -{ - return (x & (x - 1)) == 0; -} - -internal inline u64 -align(u64 pointer, umm alignment) -{ - if ((alignment & (alignment - 1)) == 0) - { - return pointer; - } - - return (pointer + alignment - 1) & ~(alignment - 1); -} - diff --git a/source/base/base_mem.h b/source/base/base_mem.h index 945f0ce..2778fce 100644 --- a/source/base/base_mem.h +++ b/source/base/base_mem.h @@ -5,4 +5,22 @@ #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +internal inline b8 +is_pow(umm x) +{ + return (x & (x - 1)) == 0; +} + +internal inline u64 +align(u64 pointer, umm alignment) +{ + if ((alignment & (alignment - 1)) == 0) + { + return pointer; + } + + return (pointer + alignment - 1) & ~(alignment - 1); +} + + #endif diff --git a/source/base/base_os.h b/source/base/base_os.h index ce9acae..ec0a3de 100644 --- a/source/base/base_os.h +++ b/source/base/base_os.h @@ -9,6 +9,45 @@ print(const char *str) write(STDOUT_FILENO, str, len); } -#define print(Format) print(Format) +internal string8 +load_file(const char *path) +{ + string8 result = {0}; + struct stat sbuf = {0}; + int err = 0; + i32 file = open(path, O_RDONLY); + + if(file) + { + + if(file != -1) + { + err = fstat(file, &sbuf); + check(err != -1); + + result.size = (u64)sbuf.st_size; + + if(result.size != 0) + { + result.data = (u8 *)mmap(0, + result.size, + PROT_READ, + MAP_PRIVATE, + file, + 0); + + check(result.data != MAP_FAILED); + } + + close(file); + } + else + { + // TODO(nasr): logging + } + + } + return result; +} #endif /* BASE_OS_H */ diff --git a/source/base/base_string.c b/source/base/base_string.c deleted file mode 100644 index 9d09914..0000000 --- a/source/base/base_string.c +++ /dev/null @@ -1,63 +0,0 @@ -internal b8 -compare_string(string c1, string c2) -{ - if (c1.size != c2.size) - { - return 0; - } - - for (u64 index = 0; index < c1.size; ++index) - { - if (c1.data[index] != c2.data[index]) - { - return 0; - } - } - - return 1; -} - -internal b8 -compare_u8(u8 *c1, u8 *c2, u64 len) -{ - if (sizeof(c1) != len || sizeof(c2) != len) - { - return 0; - } - - if (sizeof(*c1) != sizeof(*c2)) - { - return 0; - } - - for (u64 word_idx = 0; word_idx <= sizeof(*c1); ++word_idx) - { - if (*c1 != *c2) - { - return 0; - } - - ++c1; - ++c2; - } - - return 1; -} - -internal u64 -to_u64(u8 *buf, umm len) -{ - u64 value = 0; - - for (umm buffer_idx = 0; buffer_idx < len; ++buffer_idx) - { - u8 c = buf[buffer_idx]; - if (c < '0' || c > '9') - { - break; - } - value = value * 10 + (c - '0'); - } - - return value; -} diff --git a/source/base/base_string.h b/source/base/base_string.h index 5f875e0..941dc53 100644 --- a/source/base/base_string.h +++ b/source/base/base_string.h @@ -1,15 +1,46 @@ #ifndef BASE_STRING_H #define BASE_STRING_H -#define _StringCast (string) -#define StringCast { .data (u8 *)(string), .size = (sizeof((string)) - 1)} -#define PushString (Arena, Size) StringCast{.data = PushArray((arena), PushStruct(u8), (Size)), .size = (u64)(Size)} +#include -typedef struct string string; -struct string +#define StringLit(string) \ + (string8){ .data = (u8 *)(string), .size = (sizeof(string) - 1) } + + #define PushString(arena, size) \ + (string8){ (u8 *)PushArray((arena), u8, (size)), (u64)(size) } + +typedef struct string8 string8; +struct string8 { - u8 *data; - u64 size; + u8 *data; + u64 size; }; +internal b8 +string8_cmp(string8 a, string8 b) +{ + if (a.size != b.size) return 0; + return (b8)(memcmp(a.data, b.data, a.size) == 0); +} + +internal u64 +string8_to_u64(u8 *buf, umm len) +{ + u64 value = 0; + for (umm i = 0; i < len; ++i) + { + u8 c = buf[i]; + if (c < '0' || c > '9') break; + value = value * 10 + (c - '0'); + } + return value; +} + +internal void +string8_append_char(string8 *buf, u8 c) +{ + buf->data[buf->size] = c; + buf->size += 1; +} + #endif /* BASE_STRING_H */ diff --git a/source/base/base_test.c b/source/base/base_test.c deleted file mode 100644 index e69de29..0000000 diff --git a/source/engine/#engine_repl.c# b/source/engine/#engine_repl.c# deleted file mode 100644 index be43645..0000000 --- a/source/engine/#engine_repl.c# +++ /dev/null @@ -1,7 +0,0 @@ - -internal void -tokenize(str8 ) -{ - - -} diff --git a/source/engine/engine.c b/source/engine/engine.c new file mode 100644 index 0000000..609101e --- /dev/null +++ b/source/engine/engine.c @@ -0,0 +1,34 @@ +#define BASE_UNITY +#include "../base/base_include.h" + +#include "../lexer/lexer.h" +#include "../lexer/lexer.c" + +#include "../parser/parser.h" +#include "../parser/parser.c" + +#include "../repl/repl.h" +#include "../repl/repl.c" + +int main(int c, char **v) +{ + mem_arena *global_arena = arena_create(MiB(1)); + + unused(c); + unused(v); + + string8 buffer = PushString(global_arena, 5); + unused(buffer); + + + for (;;) + { + print("reading user input..."); + // TODO(nasr): design a repl system + + sleep(1); + } + +} + + diff --git a/source/engine/engine_entry.c b/source/engine/engine_entry.c deleted file mode 100644 index 8973dee..0000000 --- a/source/engine/engine_entry.c +++ /dev/null @@ -1,16 +0,0 @@ -#define BASE_UNITY -#include "../base/base_include.h" - -#include "engine_repl.h" -#include "engine_repl.c" - -int main(int c, char **v) -{ - unused(c); - unused(v); - - for (;;) - { - - } -} diff --git a/source/engine/engine_repl.c b/source/engine/engine_repl.c deleted file mode 100644 index ead6c7b..0000000 --- a/source/engine/engine_repl.c +++ /dev/null @@ -1,8 +0,0 @@ - -internal tokens * -tokenize(string buffer) -{ - - - -} diff --git a/source/engine/engine_repl.h b/source/engine/engine_repl.h deleted file mode 100644 index eb20524..0000000 --- a/source/engine/engine_repl.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef ENGINE_REPL_H -#define ENGINE_REPL_H - -typedef struct node node; -struct node -{ - -}; - -typedef struct btree btree; -struct btree -{ - -}; - - -#endif /* ENGINE_H */ diff --git a/source/lexer/lexer.c b/source/lexer/lexer.c new file mode 100644 index 0000000..60a5cda --- /dev/null +++ b/source/lexer/lexer.c @@ -0,0 +1,8 @@ +internal token * +tokenize(string8 buffer) +{ + + // TODO(nasr): tokenize the user input + + return NULL; +} diff --git a/source/lexer/lexer.h b/source/lexer/lexer.h new file mode 100644 index 0000000..86f8427 --- /dev/null +++ b/source/lexer/lexer.h @@ -0,0 +1,23 @@ +#ifndef ENGINE_LEXER_H +#define ENGINE_LEXER_H + +typedef enum token_type token_type; +enum token_type +{ + // first 255 tokens for ascii characters + TOKEN_UNDEFINED = 255, + TOKEN_IDENTIFIER, + TOKEN_VALUE, + +}; + +typedef struct token token; +struct token +{ + string8 lexeme; + token_type type; + +}; + + +#endif /* ENGINE_LEXER_H */ diff --git a/source/parser/parser.c b/source/parser/parser.c new file mode 100644 index 0000000..4c57345 --- /dev/null +++ b/source/parser/parser.c @@ -0,0 +1,16 @@ +#ifndef ENGINE_REPL_H +#define ENGINE_REPL_H + +typedef struct node node; +struct node +{ + +}; + +typedef struct btree btree; +struct btree +{ + +}; + +#endif /* ENGINE_H */ diff --git a/source/parser/parser.h b/source/parser/parser.h new file mode 100644 index 0000000..4c57345 --- /dev/null +++ b/source/parser/parser.h @@ -0,0 +1,16 @@ +#ifndef ENGINE_REPL_H +#define ENGINE_REPL_H + +typedef struct node node; +struct node +{ + +}; + +typedef struct btree btree; +struct btree +{ + +}; + +#endif /* ENGINE_H */ diff --git a/source/repl/repl.c b/source/repl/repl.c new file mode 100644 index 0000000..4c57345 --- /dev/null +++ b/source/repl/repl.c @@ -0,0 +1,16 @@ +#ifndef ENGINE_REPL_H +#define ENGINE_REPL_H + +typedef struct node node; +struct node +{ + +}; + +typedef struct btree btree; +struct btree +{ + +}; + +#endif /* ENGINE_H */ diff --git a/source/repl/repl.h b/source/repl/repl.h new file mode 100644 index 0000000..4c57345 --- /dev/null +++ b/source/repl/repl.h @@ -0,0 +1,16 @@ +#ifndef ENGINE_REPL_H +#define ENGINE_REPL_H + +typedef struct node node; +struct node +{ + +}; + +typedef struct btree btree; +struct btree +{ + +}; + +#endif /* ENGINE_H */ diff --git a/source/storage/csv_reader.c b/source/storage/csv_reader.c new file mode 100644 index 0000000..e69de29 diff --git a/source/storage/csv_reader.h b/source/storage/csv_reader.h new file mode 100644 index 0000000..e69de29 -- cgit v1.3