diff --git a/.github/workflows/msys2-cross-compile.yml b/.github/workflows/msys2-cross-compile.yml new file mode 100644 index 0000000..770ea3b --- /dev/null +++ b/.github/workflows/msys2-cross-compile.yml @@ -0,0 +1,20 @@ +name: MSYS2 +on: [push, pull_request] + +jobs: + msys2-mingw64: + runs-on: windows-latest + defaults: + run: + shell: msys2 {0} + steps: + - uses: actions/checkout@v3 + - uses: msys2/setup-msys2@v2 + with: + msystem: MINGW64 + update: true + install: mingw-w64-x86_64-gcc mingw-w64-x86_64-glib2 bison flex mingw-w64-x86_64-llvm cmake git make + - name: CI-Build + run: | + echo 'Running in MSYS2!' + ./ci-build.sh \ No newline at end of file diff --git a/ci-build.sh b/ci-build.sh new file mode 100755 index 0000000..8b09b06 --- /dev/null +++ b/ci-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cmake . +make release diff --git a/src/ast/ast.c b/src/ast/ast.c index 4e3ba6f..6de0c74 100644 --- a/src/ast/ast.c +++ b/src/ast/ast.c @@ -219,6 +219,7 @@ void AST_delete_node(struct AST_Node_t *node) { } if (node->parent != NULL) { + [[maybe_unused]] const struct AST_Node_t* child = AST_detach_child(node->parent, node); assert(child == node); } diff --git a/src/io/files.c b/src/io/files.c index 5f3ad02..0dac570 100644 --- a/src/io/files.c +++ b/src/io/files.c @@ -13,9 +13,15 @@ #define MAX_PATH_BYTES PATH_MAX +#define min(a, b) ((a) > (b) ? (b) : (a)) + #elif defined(_WIN32) || defined(WIN32) #include +// for _fullpath +#include +// for _mkdir +#include #define MAX_PATH_BYTES _MAX_PATH @@ -65,10 +71,6 @@ void delete_files(ModuleFileStack *stack) { // seeking the current line in print_diagnostic() #define SEEK_BUF_BYTES 256 -static inline unsigned long int min(unsigned long int a, unsigned long int b) { - return a > b ? b : a; -} - // behaves like fgets except that it has defined behavior when n == 1 static void custom_fgets(char *buffer, size_t n, FILE *stream) { if (n == 1) { @@ -122,15 +124,15 @@ void print_diagnostic(ModuleFile *file, TokenLocation *location, Message kind, c free((void *) absolute_path); - const size_t lines = location->line_end - location->line_start + 1; + const unsigned long int lines = location->line_end - location->line_start + 1; - for (size_t l = 0; l < lines; l++) { + for (unsigned long int l = 0; l < lines; l++) { printf(" %4ld | ", location->line_start + l); - size_t chars = 0; + unsigned long int chars = 0; // print line before token group start - size_t limit = min(location->col_start, SEEK_BUF_BYTES); + unsigned long int limit = min(location->col_start, SEEK_BUF_BYTES); while (limit > 1) { custom_fgets(buffer, (int) limit, file->handle); chars += printf("%s", buffer); @@ -168,13 +170,13 @@ void print_diagnostic(ModuleFile *file, TokenLocation *location, Message kind, c } printf(" | "); - for (size_t i = 1; i < location->col_start; i++) { + for (unsigned long int i = 1; i < location->col_start; i++) { printf(" "); } printf("%s", accent_color); printf("^"); - for (size_t i = 0; i < location->col_end - location->col_start; i++) { + for (unsigned long int i = 0; i < location->col_end - location->col_start; i++) { printf("~"); } @@ -320,7 +322,7 @@ const char *get_absolute_path(const char *path) { #elif defined(_WIN32) || defined(WIN32) // use Windows CRT specific function char absolute_path[MAX_PATH_BYTES]; - _fullpath(path, absolute_path, _MAX_PATH); + _fullpath((char*) path, absolute_path, _MAX_PATH); #endif return strdup(absolute_path); diff --git a/src/io/files.h b/src/io/files.h index 61c7ebb..c05f587 100644 --- a/src/io/files.h +++ b/src/io/files.h @@ -15,9 +15,9 @@ #endif typedef struct FileDiagnosticStatistics_t { - size_t error_count; - size_t warning_count; - size_t info_count; + unsigned long int error_count; + unsigned long int warning_count; + unsigned long int info_count; } FileDiagnosticStatistics; typedef struct ModuleFile_t { diff --git a/src/sys/col.c b/src/sys/col.c index 76260ec..afd78ba 100644 --- a/src/sys/col.c +++ b/src/sys/col.c @@ -71,8 +71,7 @@ int stdout_supports_ansi_esc() { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); if (!GetConsoleMode(hConsole, &mode)) { - ERROR("failed to get console mode"); - return ANSI_ENABLED; + return ASNI_DISABLED; } if ((mode & ENABLE_VIRTUAL_TERMINAL_INPUT) |