12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #+build orca
- #+private
- package runtime
- import "base:intrinsics"
- // Constants allowing to specify the level of logging verbosity.
- log_level :: enum u32 {
- // Only errors are logged.
- ERROR = 0,
- // Only warnings and errors are logged.
- WARNING = 1,
- // All messages are logged.
- INFO = 2,
- COUNT = 3,
- }
- @(default_calling_convention="c", link_prefix="oc_")
- foreign {
- abort_ext :: proc(file: cstring, function: cstring, line: i32, fmt: cstring, #c_vararg args: ..any) -> ! ---
- assert_fail :: proc(file: cstring, function: cstring, line: i32, src: cstring, fmt: cstring, #c_vararg args: ..any) -> ! ---
- log_ext :: proc(level: log_level, function: cstring, file: cstring, line: i32, fmt: cstring, #c_vararg args: ..any) ---
- }
- // NOTE: This is all pretty gross, don't look.
- // WASM is single threaded so this should be fine.
- orca_stderr_buffer: [4096]byte
- orca_stderr_buffer_idx: int
- _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
- for b in data {
- orca_stderr_buffer[orca_stderr_buffer_idx] = b
- orca_stderr_buffer_idx += 1
- if b == '\n' || orca_stderr_buffer_idx == len(orca_stderr_buffer)-1 {
- log_ext(.ERROR, "", "", 0, cstring(raw_data(orca_stderr_buffer[:orca_stderr_buffer_idx])))
- orca_stderr_buffer_idx = 0
- }
- }
- return len(data), 0
- }
|