mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-06 18:54:12 +00:00
Add basics for context-based Logger
This commit is contained in:
34
core/log/log.odin
Normal file
34
core/log/log.odin
Normal 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};
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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"));
|
||||
|
||||
Reference in New Issue
Block a user