Add basics for context-based Logger

This commit is contained in:
gingerBill
2018-10-20 13:02:30 +01:00
parent 72f4186b21
commit 099995e7dd
3 changed files with 39 additions and 0 deletions

34
core/log/log.odin Normal file
View File

@@ -0,0 +1,34 @@
package log
Level :: enum {
Debug,
Info,
Warning,
Error,
Fatal,
}
Option :: enum {
Level,
Time,
File,
Line,
Procedure,
}
Options :: bit_set[Option];
Logger_Proc :: #type proc(data: rawptr, level: Level, ident, text: string, options: Options, location := #caller_location);
Logger :: struct {
procedure: Logger_Proc,
data: rawptr,
}
nil_logger_proc :: proc(data: rawptr, level: Level, ident, text: string, options: Options, location := #caller_location) {
// Do nothing
}
nil_logger :: proc() -> Logger {
return Logger{nil_logger_proc, nil};
}

View File

@@ -5,6 +5,7 @@ package runtime
import "core:os"
import "core:mem"
import "core:log"
// Naming Conventions:
// In general, Ada_Case for types and snake_case for values
@@ -193,6 +194,8 @@ Context :: struct {
assertion_failure_proc: Assertion_Failure_Proc,
logger: log.Logger,
user_data: any,
user_index: int,
@@ -321,6 +324,7 @@ __init_context :: proc "contextless" (c: ^Context) {
c.temp_allocator = mem.scratch_allocator(&global_scratch_allocator_data);
c.thread_id = os.current_thread_id();
c.assertion_failure_proc = default_assertion_failure_proc;
c.logger = log.nil_logger();
}
@(builtin)

View File

@@ -1767,6 +1767,7 @@ irValue *ir_find_or_generate_context_ptr(irProcedure *proc) {
// 1 will be handled later
ir_emit_store(proc, ir_emit_struct_ep(proc, c, 2), ir_emit_package_call(proc, "os", "current_thread_id", args));
ir_emit_store(proc, ir_emit_struct_ep(proc, c, 3), ir_get_package_value(proc->module, str_lit("runtime"), str_lit("default_assertion_failure_proc")));
ir_emit_store(proc, ir_emit_struct_ep(proc, c, 4), ir_emit_package_call(proc, "log", "nil_logger", args));
array_init(&args, heap_allocator(), 1);
args[0] = ir_get_package_value(proc->module, str_lit("runtime"), str_lit("global_scratch_allocator_data"));