diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8e0aa4d..c8a18a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v4 - name: Build and test run: | - ./run_tests.sh + ./run_tests.sh 1 # macos_build_and_test: # runs-on: macos-latest # timeout-minutes: 15 diff --git a/bootstrap/main.c b/bootstrap/main.c index db4ea24..9e1420a 100644 --- a/bootstrap/main.c +++ b/bootstrap/main.c @@ -857,7 +857,7 @@ fn int syscall_fstat(int fd, struct stat *buffer) #endif } -fn u64 file_get_size(int fd) +may_be_unused fn u64 file_get_size(int fd) { struct stat stat_buffer; int stat_result = syscall_fstat(fd, &stat_buffer); @@ -1282,13 +1282,13 @@ fn String arena_join_string(Arena* arena, Slice(String) pieces) memcpy(it, piece.pointer, piece.length); it += piece.length; } - assert(it - pointer == size); + assert((u64)(it - pointer) == size); *it = 0; return (String) { .pointer = pointer, .length = size }; } -#define arena_allocate(arena, T, count) arena_allocate_bytes(arena, sizeof(T) * count, alignof(T)) +#define arena_allocate(arena, T, count) (T*)(arena_allocate_bytes(arena, sizeof(T) * count, alignof(T))) #define arena_allocate_slice(arena, T, count) (Slice(T)){ .pointer = arena_allocate(arena, T, count), .length = count } fn void arena_reset(Arena* arena) @@ -1323,16 +1323,18 @@ fn s32 string_map_find_slot(StringMap* map, u32 original_index, String key, u32 for (u32 i = 0; i < existing_capacity; i += 1) { auto index = it_index & (existing_capacity - 1); - u32 key = map->pointer[index]; + u32 existing_key = map->pointer[index]; // Not set - if (key == 0) + if (existing_key == 0) { result = index; break; } else { + unused(value); + unused(key); trap(); } @@ -1467,7 +1469,8 @@ fn int file_write(String file_path, String file_data) assert(file_descriptor != -1); auto bytes = syscall_write(file_descriptor, file_data.pointer, file_data.length); - assert(bytes == file_data.length); + assert(bytes >= 0); + assert((u64)bytes == file_data.length); int close_result = syscall_close(file_descriptor); assert(close_result == 0); @@ -1487,7 +1490,7 @@ fn String file_read(Arena* arena, String path) u64 file_size = stat_buffer.st_size; result = (String){ - .pointer = (u8*)arena_allocate_bytes(arena, file_size, 64), + .pointer = arena_allocate_bytes(arena, file_size, 64), .length = file_size, }; @@ -1721,12 +1724,12 @@ fn u8* vb_generic_add_assume_capacity(VirtualBuffer(u8)* vb, u32 item_size, u32 return vb->pointer + (index * item_size); } -fn u8* vb_generic_append_assume_capacity(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count) -{ - u8* new_memory = vb_generic_add_assume_capacity(vb, item_size, item_count); - memcpy(new_memory, item_pointer, item_size * item_count); - return new_memory; -} +// fn u8* vb_generic_append_assume_capacity(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count) +// { +// u8* new_memory = vb_generic_add_assume_capacity(vb, item_size, item_count); +// memcpy(new_memory, item_pointer, item_size * item_count); +// return new_memory; +// } fn u8* vb_generic_add(VirtualBuffer(u8)* vb, u32 item_size, u32 item_count) { @@ -1735,11 +1738,11 @@ fn u8* vb_generic_add(VirtualBuffer(u8)* vb, u32 item_size, u32 item_count) } -fn u8* vb_generic_append(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count) -{ - vb_generic_ensure_capacity(vb, item_size, item_count); - return vb_generic_append_assume_capacity(vb, item_pointer, item_size, item_count); -} +// fn u8* vb_generic_append(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count) +// { +// vb_generic_ensure_capacity(vb, item_size, item_count); +// return vb_generic_append_assume_capacity(vb, item_pointer, item_size, item_count); +// } #define vb_add(a, count) (typeof((a)->pointer)) vb_generic_add((VirtualBuffer(u8)*)(a), sizeof(*((a)->pointer)), count) #define vb_append_one(a, item) (typeof((a)->pointer)) vb_generic_append((VirtualBuffer(u8)*)(a), &(item), sizeof(*((a)->pointer)), 1) @@ -4705,7 +4708,7 @@ void entry_point(int argc, const char* argv[]) arguments.pointer = arena_allocate(global_arena, String, argc); arguments.length = argc; - for (u32 i = 0; i < argc; i += 1) + for (int i = 0; i < argc; i += 1) { u64 len = strlen(argv[i]); arguments.pointer[i] = (String) { @@ -4736,15 +4739,15 @@ void entry_point(int argc, const char* argv[]) NodeIndex start_node_index = function->start; NodeIndex stop_node_index = function->stop; iterate_peepholes(thread, stop_node_index); - print_string(strlit("Before optimizations\n")); - print_function(thread, function); + // print_string(strlit("Before optimizations\n")); + // print_function(thread, function); gcm_build_cfg(thread, start_node_index, stop_node_index); - print_string(strlit("After optimizations\n")); - print_function(thread, function); + // print_string(strlit("After optimizations\n")); + // print_function(thread, function); } auto lowered_source = c_lower(thread); - print("Transpiled to C:\n```\n{s}\n```\n", lowered_source); + // print("Transpiled to C:\n```\n{s}\n```\n", lowered_source); auto c_source_path = arena_join_string(thread->arena, (Slice(String)) array_to_slice(((String[]) { strlit("nest/"), diff --git a/run_tests.sh b/run_tests.sh index dc5d049..3ca74f3 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -2,25 +2,47 @@ set -e source ./compile.sh +all=$1 build_dir="build" exe_name="nest" exe_path=$build_dir/$exe_name debug_flags="-g" no_optimization_flags="" -optimization_flags="-O3 -march=native" test_names="first" -compile $build_dir $exe_name $debug_flags $no_optimization_flags; +if [ "$all" == "1" ] +then + optimization_modes=("" "-O1" "-O2 march=native", "-Os march=native" "-Oz march=native" "-O3 march=native") +else + optimization_modes=("") +fi -printf "\n======================\n" -printf "TESTS" -printf "\n======================\n\n" -for test_name in "${test_names[@]}" +for optimization_mode in "${optimization_modes[@]}" do - echo "$test_name..." - build/nest "tests/$test_name.nat" - echo "$test_name [COMPILATION] [OK]" - nest/$test_name - echo "$test_name [RUN] [OK]" + + printf "\n===========================\n" + echo "TESTS ($optimization_mode)" + printf "===========================\n\n" + + compile $build_dir $exe_name $debug_flags $optimization_mode; + + printf "\n===========================\n" + echo "COMPILER BUILD OK" + printf "===========================\n\n" + + for test_name in "${test_names[@]}" + do + printf "\n===========================\n" + echo "$test_name..." + printf "===========================\n\n" + build/nest "tests/$test_name.nat" + printf "\n===========================\n" + echo "$test_name [COMPILATION] [OK]" + printf "===========================\n\n" + nest/$test_name + printf "\n===========================\n" + echo "$test_name [RUN] [OK]" + printf "===========================\n\n" + done done