From f563da8c1786e4581e5a3f5a615812c5b2d266c2 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 16 Nov 2023 10:38:40 -0600 Subject: [PATCH] starting working on support for MacOS --- .github/workflows/onyx-build.yml | 1 + compiler/include/astnodes.h | 2 +- compiler/src/astnodes.c | 4 +- compiler/src/builtins.c | 3 ++ compiler/src/checker.c | 2 +- compiler/src/onyx.c | 2 +- compiler/src/symres.c | 2 +- core/runtime/build_opts.onyx | 1 + misc/vscode/extension.ts | 46 +++++++++++-------- misc/vscode/onyx-0.1.8.vsix | Bin 1646322 -> 1646578 bytes misc/vscode/out/extension.js | 39 ++++++++++------- shared/include/bh.h | 73 ++++++++++++++++++++----------- 12 files changed, 110 insertions(+), 65 deletions(-) diff --git a/.github/workflows/onyx-build.yml b/.github/workflows/onyx-build.yml index cb1ec272..e1a4bb14 100644 --- a/.github/workflows/onyx-build.yml +++ b/.github/workflows/onyx-build.yml @@ -70,6 +70,7 @@ jobs: ONYX_RUNTIME_LIBRARY: ${{ matrix.runtime_library }} ONYX_INCLUDE_DIR: ../shared/include ONYX_LIBRARY_DIR: ${{ env.ONYX_LIBRARY_DIR }} + ONYX_USE_DYNCALL: '1' - name: Build Onyx for ${{ matrix.build }} if: matrix.build == 'windows-amd64' diff --git a/compiler/include/astnodes.h b/compiler/include/astnodes.h index 7ce5ab5c..21bed634 100644 --- a/compiler/include/astnodes.h +++ b/compiler/include/astnodes.h @@ -951,7 +951,7 @@ struct AstSwitch { u32 flags; \ OnyxToken* token; \ struct Entity* entity; \ - void* __unused; \ + void* next; \ u64 type_id; \ Type* type struct AstType { AstType_base; }; diff --git a/compiler/src/astnodes.c b/compiler/src/astnodes.c index 1c4583f7..d0102cb5 100644 --- a/compiler/src/astnodes.c +++ b/compiler/src/astnodes.c @@ -1756,8 +1756,8 @@ b32 static_if_resolution(AstIf* static_if) { AstPolyCallType* convert_call_to_polycall(AstCall* call) { // HACK HACK HACK AstPolyCallType *pct = onyx_ast_node_new(context.ast_alloc, sizeof(AstPolyCallType), Ast_Kind_Poly_Call_Type); - pct->token = call->token; - pct->__unused = call->next; + pct->token = call->token; + pct->next = call->next; pct->callee = (AstType *) call->callee; pct->params = (AstNode **) bh_arr_copy(global_heap_allocator, call->args.values); bh_arr_each(AstNode *, pp, pct->params) { diff --git a/compiler/src/builtins.c b/compiler/src/builtins.c index 09d63ad1..2ebcf646 100644 --- a/compiler/src/builtins.c +++ b/compiler/src/builtins.c @@ -618,6 +618,9 @@ void introduce_build_options(bh_allocator a) { #ifdef _BH_WINDOWS os = 2; #endif + #ifdef _BH_DARWIN + os = 3; + #endif AstType* OS_Type = (AstType *) symbol_raw_resolve(p->scope, "OS"); if (OS_Type == NULL) { diff --git a/compiler/src/checker.c b/compiler/src/checker.c index 496bff56..b0bc672a 100644 --- a/compiler/src/checker.c +++ b/compiler/src/checker.c @@ -1923,7 +1923,7 @@ CheckStatus check_address_of(AstAddressOf** paof) { AstPointerType *pt = onyx_ast_node_new(context.ast_alloc, sizeof(AstPointerType), Ast_Kind_Pointer_Type); pt->token = aof->token; pt->elem = (AstType *) expr; - pt->__unused = aof->next; + pt->next = aof->next; *paof = (AstAddressOf *) pt; CHECK(type, (AstType **) &pt); return Check_Success; diff --git a/compiler/src/onyx.c b/compiler/src/onyx.c index 444a5342..96095e29 100644 --- a/compiler/src/onyx.c +++ b/compiler/src/onyx.c @@ -128,7 +128,7 @@ static CompileOptions compile_opts_parse(bh_allocator alloc, int argc, char *arg bh_arr_new(alloc, options.defined_variables, 2); char* core_installation = NULL; - #ifdef _BH_LINUX + #if defined(_BH_LINUX) || defined(_BH_DARWIN) core_installation = getenv("ONYX_PATH"); #endif #ifdef _BH_WINDOWS diff --git a/compiler/src/symres.c b/compiler/src/symres.c index 447b1a4a..ff929261 100644 --- a/compiler/src/symres.c +++ b/compiler/src/symres.c @@ -584,7 +584,7 @@ static SymresStatus symres_address_of(AstAddressOf** paof) { AstPointerType *pt = onyx_ast_node_new(context.ast_alloc, sizeof(AstPointerType), Ast_Kind_Pointer_Type); pt->token = aof->token; pt->elem = (AstType *) expr; - pt->__unused = aof->next; + pt->next = aof->next; *paof = (AstAddressOf *) pt; SYMRES(type, (AstType **) &pt); return Symres_Success; diff --git a/core/runtime/build_opts.onyx b/core/runtime/build_opts.onyx index 9d2c577c..3740bbab 100644 --- a/core/runtime/build_opts.onyx +++ b/core/runtime/build_opts.onyx @@ -12,6 +12,7 @@ Runtime :: enum { OS :: enum { Linux :: 1; Windows :: 2; + MacOS :: 3; } // arch: Arch This is set by the compiler. diff --git a/misc/vscode/extension.ts b/misc/vscode/extension.ts index b0258545..7ca3a707 100644 --- a/misc/vscode/extension.ts +++ b/misc/vscode/extension.ts @@ -20,24 +20,34 @@ export async function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.languages.registerWorkspaceSymbolProvider(workspaceSymbolProvider)); context.subscriptions.push(vscode.languages.registerDefinitionProvider({ 'language': 'onyx' }, peekFileDefinitionProvider)); - let serverOptions: vslc.ServerOptions = { - command: "onyx-lsp", - transport: vslc.TransportKind.stdio, - }; - - let clientOptions: vslc.LanguageClientOptions = { - documentSelector: [ - { scheme: "file", language: "onyx" }, - ], - connectionOptions: { - cancellationStrategy: null, - maxRestartCount: 5 - } - }; - - client = new vslc.LanguageClient("onyx-lsp", serverOptions, clientOptions); - - client.start(); + let onyx_path = process.env['ONYX_PATH']; + if (!onyx_path) { + onyx_path = require('os').homedir() + "/.onyx"; + process.env["ONYX_PATH"] = onyx_path; + process.env["PATH"] = process.env["PATH"] + ":" + onyx_path + "/bin" + } + + if (onyx_path) { + let serverOptions: vslc.ServerOptions = { + command: `${onyx_path}/bin/onyx`, + args: ["lsp"], + transport: vslc.TransportKind.stdio, + }; + + let clientOptions: vslc.LanguageClientOptions = { + documentSelector: [ + { scheme: "file", language: "onyx" }, + ], + connectionOptions: { + cancellationStrategy: null, + maxRestartCount: 5 + } + }; + + client = new vslc.LanguageClient("onyx-lsp", serverOptions, clientOptions); + + client.start(); + } console.appendLine("Onyx Extension loaded."); } diff --git a/misc/vscode/onyx-0.1.8.vsix b/misc/vscode/onyx-0.1.8.vsix index 56d7d70b015aaeaeee672a2a3d990c949ed51072..59d5dc45918640b6965b18bb10bdd8e107670497 100644 GIT binary patch delta 14327 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 YySczv5tk>rz?;uZ4mK~=;HTLC1Hv*kuK)l5 delta 14041 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 -#include #include -#ifdef _BH_LINUX +#if defined(_BH_LINUX) || defined(_BH_DARWIN) #include #include #include #include #include - #include #include #endif +#if defined(_BH_LINUX) || defined(_BH_WINDOWS) + #include +#endif + +#if defined(_BH_LINUX) + #include +#endif + +#if defined(_BH_DARWIN) + #include +#endif + #include #include #include // TODO: Replace with needed functions @@ -209,7 +223,7 @@ BH_DEF i64 leb128_to_int(u8* bytes, i32 *byte_count); #define forir(var, hi, lo) for (i64 var = (hi); var >= (lo); var--) #define forll(T, var, start, step) for (T* var = (start); var != NULL; var = (T *) var->step) -#if defined(BH_DEBUG) && !defined(_BH_WINDOWS) +#if defined(BH_DEBUG) && defined(_BH_LINUX) && false #define DEBUG_HERE __asm("int $3") #else #define DEBUG_HERE @@ -497,8 +511,8 @@ void bh_dir_close(bh_dir dir); fd_set fds; } bh_file_watch; #endif -#ifdef _BH_WINDOWS - // TODO: Make these work on Windows +#if defined(_BH_WINDOWS) || defined(_BH_DARWIN) + // TODO: Make these work on Windows and MacOS typedef u32 bh_file_watch; #endif @@ -998,7 +1012,7 @@ BH_ALLOCATOR_PROC(bh_heap_allocator_proc) { case bh_allocator_action_alloc: { #if defined(_BH_WINDOWS) retval = _aligned_malloc(size, alignment); -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) i32 success = posix_memalign(&retval, alignment, size); #endif if (flags & bh_allocator_flag_clear && retval != NULL) { @@ -1010,7 +1024,7 @@ BH_ALLOCATOR_PROC(bh_heap_allocator_proc) { // TODO: Maybe replace with better custom function #if defined(_BH_WINDOWS) retval = _aligned_realloc(prev_memory, size, alignment); -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) retval = realloc(prev_memory, size); #endif } break; @@ -1018,7 +1032,7 @@ BH_ALLOCATOR_PROC(bh_heap_allocator_proc) { case bh_allocator_action_free: { #if defined(_BH_WINDOWS) _aligned_free(prev_memory); -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) free(prev_memory); #endif } break; @@ -1045,7 +1059,7 @@ void bh_managed_heap_free(bh_managed_heap* mh) { l->magic_number = 0; #if defined(_BH_WINDOWS) _aligned_free((void *) l); -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) free((void *) l); #endif } @@ -1595,7 +1609,7 @@ bh_file_error bh_file_get_standard(bh_file* file, bh_file_standard stand) { } file->fd = sd_fd; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) i32 sd_fd = -1; switch (stand) { @@ -1683,7 +1697,7 @@ bh_file_error bh_file_open_mode(bh_file* file, bh_file_mode mode, const char* fi file->filename = filename; return BH_FILE_ERROR_NONE; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) i32 os_mode = 0; switch (mode & BH_FILE_MODE_MODES) { @@ -1723,7 +1737,7 @@ b32 bh_file_read_at(bh_file* file, i64 offset, void* buffer, isize buff_size, is if (res) return 1; else return 0; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) if (file->fd == 0) { isize res = read(file->fd, buffer, buff_size); if (res < 0) return 0; @@ -1748,7 +1762,7 @@ b32 bh_file_write_at(bh_file* file, i64 offset, void const* buffer, isize buff_s res = (isize) WriteFile(file->fd, buffer, buff_size, (i32 *) bytes_wrote, NULL); return res; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) if (current_offset == offset || file->fd == 1 || file->fd == 2) { // Standard in and out do like pwrite() res = write(file->fd, buffer, buff_size); @@ -1779,6 +1793,13 @@ static b32 bh__file_seek_wrapper(bh_file_descriptor fd, i64 offset, bh_file_when if (new_offset) *new_offset = res; return 1; #endif + +#elif defined(_BH_DARWIN) + i64 res = lseek(fd, offset, whence); + if (res < 0) return 0; + if (new_offset) *new_offset = res; + return 1; +#endif } // Returns new offset @@ -1821,7 +1842,7 @@ bh_file_error bh_file_close(bh_file* file) { return err; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) i32 res = close(file->fd); if (res < 0) err = BH_FILE_ERROR_INVALID; @@ -1839,7 +1860,7 @@ b32 bh_file_write(bh_file* file, void* buffer, isize buff_size) { } void bh_file_flush(bh_file* file) { - #ifdef _BH_LINUX + #ifdef _BH_LINUX || defined (_BH_DARWIN) fdatasync(file->fd); #endif } @@ -1896,7 +1917,7 @@ b32 bh_file_stat(char const* filename, bh_file_stats* out) { if ((s.st_mode & S_IFMT) == S_IFDIR) out->file_type = BH_FILE_TYPE_DIRECTORY; if ((s.st_mode & S_IFMT) == S_IFREG) out->file_type = BH_FILE_TYPE_FILE; -#if defined(_BH_LINUX) +#if defined(_BH_LINUX) || defined (_BH_DARWIN) if ((s.st_mode & S_IFMT) == S_IFLNK) out->file_type = BH_FILE_TYPE_LINK; #endif @@ -1912,7 +1933,7 @@ b32 bh_file_remove(char const* filename) { #if defined(_BH_WINDOWS) return DeleteFileA(filename); -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) return unlink(filename) == 0; #endif } @@ -1929,7 +1950,7 @@ char* bh_path_get_full_name(char const* filename, bh_allocator a) { return result; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined (_BH_DARWIN) char* p = realpath(filename, NULL); // Check if the file did not exists. @@ -1948,7 +1969,7 @@ char* bh_path_get_full_name(char const* filename, bh_allocator a) { } // NOTE: This assumes the filename is the full path, not relative to anything else. -#if defined(_BH_LINUX) +#if defined(_BH_LINUX) || defined(_BH_DARWIN) #define DIR_SEPARATOR '/' #elif defined(_BH_WINDOWS) #define DIR_SEPARATOR '\\' @@ -2008,7 +2029,7 @@ char* bh_lookup_file(char* filename, char* relative_to, char *suffix, b32 add_su // // Modifies the path in-place. char* bh_path_convert_separators(char* path) { -#if defined(_BH_LINUX) +#if defined(_BH_LINUX) || defined(_BH_DARWIN) #define DIR_SEPARATOR '/' #define OTHER_SEPARATOR '\\' #elif defined(_BH_WINDOWS) @@ -2042,7 +2063,7 @@ bh_dir bh_dir_open(char* path) { return dir; #endif -#ifdef _BH_LINUX +#if defined(_BH_LINUX) || defined(_BH_DARWIN) DIR* dir = opendir(path); return dir; #endif @@ -2067,7 +2088,7 @@ b32 bh_dir_read(bh_dir dir, bh_dirent* out) { return 1; #endif -#ifdef _BH_LINUX +#if defined(_BH_LINUX) || defined(_BH_DARWIN) struct dirent *ent; while (1) { ent = readdir(dir); @@ -2107,7 +2128,7 @@ void bh_dir_close(bh_dir dir) { free(dir); #endif -#ifdef _BH_LINUX +#if defined(_BH_LINUX) || defined(_BH_DARWIN) if (dir == NULL) return; closedir(dir); #endif @@ -3048,7 +3069,7 @@ u64 bh_time_curr() { QueryPerformanceCounter(&result); return (u64) result.QuadPart; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined(_BH_DARWIN) struct timespec spec; clock_gettime(CLOCK_REALTIME, &spec); @@ -3074,7 +3095,7 @@ u64 bh_time_duration(u64 old) { duration /= freq.QuadPart; return duration; -#elif defined(_BH_LINUX) +#elif defined(_BH_LINUX) || defined(_BH_DARWIN) u64 curr = bh_time_curr(); return curr - old; #endif -- 2.25.1