From de137ffe79370fb838e416660f8f9b3ea590ee0b Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 4 Mar 2021 18:18:56 -0600 Subject: [PATCH] started working on logging --- bin/onyx | Bin 348400 -> 348400 bytes core/builtin.onyx | 31 ++++++++++++++++++++++++++++++- core/io/file.onyx | 26 ++++++++++++++++++++++++++ core/sys/js.onyx | 2 ++ core/sys/wasi.onyx | 2 ++ docs/compile_time_vars | 19 ++++++++++++++++++- src/onyxparser.c | 9 +++++---- 7 files changed, 83 insertions(+), 6 deletions(-) diff --git a/bin/onyx b/bin/onyx index 095019512d8c6e779cb6bfc24b50f1b64b262322..19ad013c8390694dc444b5680566182a76489844 100755 GIT binary patch delta 42063 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 delta 41985 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 C<^DYY diff --git a/core/builtin.onyx b/core/builtin.onyx index 2cb9c2a9..cfa31b3e 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -1,4 +1,5 @@ package builtin +use package build_opts as build_opts str :: #type []u8; cstr :: #type ^u8; @@ -47,9 +48,23 @@ OnyxContext :: struct { allocator : Allocator; temp_allocator : Allocator; + logger : Logger = .{ default_logger, null }; + assert_handler : (msg: str, file: str) -> void; } +#if build_opts.Runtime != build_opts.Runtime_Custom { + #private_file default_logger :: (data: rawptr, msg: str) { + use package core + println(msg); + } + +} else { + #private_file default_logger :: (data: rawptr, msg: str) { + // In a custom runtime, there is no way to know how to log something. + } +} + // @Robustness // Currently, because the only compilation target is WebAssembly, which is only // single threaded for the moment, it is safe to store the context in a global @@ -64,6 +79,20 @@ assert :: (cond: bool, msg: str, file: str = null_str) { } +// +// Basic logging +// + +Logger :: struct { + func : (data: rawptr, msg: str) -> void; + data : rawptr; +} + +log :: (msg: str, use logger: Logger = context.logger) { + func(data, msg); +} + + // // Basic allocation structures. // The implementations of all of the allocators can be found in core/alloc/. @@ -78,6 +107,7 @@ AllocationAction :: enum { Resize; } +#private_file allocator_proc :: #type (data: rawptr, action: AllocationAction, size: u32, align: u32, old_ptr: rawptr) -> rawptr; Allocator :: struct { @@ -102,7 +132,6 @@ calloc :: (size: u32) -> rawptr do return raw_alloc(context.allocator, size); cresize :: (ptr: rawptr, size: u32) -> rawptr do return raw_resize(context.allocator, ptr, size); cfree :: (ptr: rawptr) do raw_free(context.allocator, ptr); -use package build_opts as build_opts #if build_opts.Runtime != build_opts.Runtime_Custom { use package core.intrinsics.wasm { __initialize } diff --git a/core/io/file.onyx b/core/io/file.onyx index 3451d8f8..8d4f66d4 100644 --- a/core/io/file.onyx +++ b/core/io/file.onyx @@ -279,3 +279,29 @@ file_stream_vtable := Stream_Vtable.{ return ~~ file_stat.size; }, } + + + + +file_logger_open :: (filename: str, allocator := context.allocator) -> Logger { + file := new(File, allocator); + success := false; + + *file, success = file_open(filename, mode=OpenMode.Append); + assert(success, "Unable to open file for logging."); + + return .{ file_logger_proc, file }; +} + +file_logger_close :: (logger := context.logger) { + file_close(*cast(^File) logger.data); + + // @Robustness: this could be the wrong allocator if the context allocator wasn't used. + cfree(logger.data); +} + +#private_file +file_logger_proc :: (data: ^File, msg: str) { + file_write(*data, msg); + file_write(*data, "\n"); +} diff --git a/core/sys/js.onyx b/core/sys/js.onyx index 4c6ea40d..727eddc9 100644 --- a/core/sys/js.onyx +++ b/core/sys/js.onyx @@ -2,6 +2,7 @@ package system use package core use package main as main +use package core.intrinsics.wasm { __initialize } output_str :: (s: str) -> u32 #foreign "host" "print_str" --- @@ -25,6 +26,7 @@ assert_handler :: (msg: str, file: str) { proc () #export "_start" { alloc.init(); + __initialize(^context); context.allocator = alloc.heap_allocator; context.temp_allocator = alloc.temp_allocator; context.assert_handler = assert_handler; diff --git a/core/sys/wasi.onyx b/core/sys/wasi.onyx index 15337577..ebfbf06e 100644 --- a/core/sys/wasi.onyx +++ b/core/sys/wasi.onyx @@ -5,6 +5,7 @@ package system use package wasi use package core use package main as main +use package core.intrinsics.wasm { __initialize } STDOUT_FILENO :: 1 @@ -35,6 +36,7 @@ assert_handler :: (msg: str, file: str) { proc () #export "_start" { alloc.init(); + __initialize(^context); context.allocator = alloc.heap_allocator; context.temp_allocator = alloc.temp_allocator; context.assert_handler = assert_handler; diff --git a/docs/compile_time_vars b/docs/compile_time_vars index 1427edfd..b784f619 100644 --- a/docs/compile_time_vars +++ b/docs/compile_time_vars @@ -11,4 +11,21 @@ set the variables described below to their value. There should be an #error directive that when hit just produces a compile time error and prevents compilation. It would be useful to ensure certain files that are only for a particular -backend will not compile with the wrong one, such as webgl.onyx. \ No newline at end of file +backend will not compile with the wrong one, such as webgl.onyx. + +Another thing to think about is having things like 'defined(...)' in C. In other words, a +method for knowing whether or not a symbol exists. Other things similar to this idea: + - defined(...) if the symbol is defined as anything + - is_procedure(...) if the symbol is a procedure + - argument_count(...) the number of required arguments the procedure has + + main :: () { + .... + } + + #if argument_count(main) > 0 { + main(args); + } else { + main(); + } + diff --git a/src/onyxparser.c b/src/onyxparser.c index f455f6c0..7baaf1c5 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -1325,14 +1325,15 @@ static AstNode* parse_statement(OnyxParser* parser) { assignment2->left = builtin_context_variable; assignment2->right = (AstTyped *) context_tmp; + AstBlock* context_block = parse_block(parser); + assignment->next = (AstNode *) context_block; + AstDefer* defer_node = make_node(AstDefer, Ast_Kind_Defer); defer_node->stmt = (AstNode *) assignment2; - assignment->next = (AstNode *) defer_node; + defer_node->next = context_block->body; + context_block->body = (AstNode *) defer_node; - AstBlock* context_block = parse_block(parser); needs_semicolon = 0; - defer_node->next = (AstNode *) context_block; - retval = (AstNode *) context_tmp; break; } -- 2.25.1