diff --git a/core/runtime/os_specific.odin b/core/runtime/os_specific.odin index e09acb51c..ab2d78007 100644 --- a/core/runtime/os_specific.odin +++ b/core/runtime/os_specific.odin @@ -1,45 +1,24 @@ +//+build !freestanding package runtime -when ODIN_OS == "freestanding" { - _OS_Errno :: distinct int; - _OS_Handle :: distinct uintptr; +import "core:os" - os_stdout :: proc "contextless" () -> _OS_Handle { - return 1; - } - os_stderr :: proc "contextless" () -> _OS_Handle { - return 2; - } +_OS_Errno :: distinct int; +_OS_Handle :: os.Handle; - // TODO(bill): reimplement `os.write` - os_write :: proc(fd: _OS_Handle, data: []byte) -> (int, _OS_Errno) { - return 0, -1; - } - - current_thread_id :: proc "contextless" () -> int { - return 0; - } - -} else { - import "core:os" - - _OS_Errno :: distinct int; - _OS_Handle :: os.Handle; - - os_stdout :: proc "contextless" () -> _OS_Handle { - return os.stdout; - } - os_stderr :: proc "contextless" () -> _OS_Handle { - return os.stderr; - } - - // TODO(bill): reimplement `os.write` - os_write :: proc(fd: _OS_Handle, data: []byte) -> (int, _OS_Errno) { - n, err := os.write(fd, data); - return int(n), _OS_Errno(err); - } - - current_thread_id :: proc "contextless" () -> int { - return os.current_thread_id(); - } +os_stdout :: proc "contextless" () -> _OS_Handle { + return os.stdout; +} +os_stderr :: proc "contextless" () -> _OS_Handle { + return os.stderr; +} + +// TODO(bill): reimplement `os.write` +os_write :: proc(fd: _OS_Handle, data: []byte) -> (int, _OS_Errno) { + n, err := os.write(fd, data); + return int(n), _OS_Errno(err); +} + +current_thread_id :: proc "contextless" () -> int { + return os.current_thread_id(); } diff --git a/core/runtime/os_specific_freestanding.odin b/core/runtime/os_specific_freestanding.odin new file mode 100644 index 000000000..3906e3ed7 --- /dev/null +++ b/core/runtime/os_specific_freestanding.odin @@ -0,0 +1,21 @@ +//+build freestanding +package runtime + +_OS_Errno :: distinct int; +_OS_Handle :: distinct uintptr; + +os_stdout :: proc "contextless" () -> _OS_Handle { + return 1; +} +os_stderr :: proc "contextless" () -> _OS_Handle { + return 2; +} + +// TODO(bill): reimplement `os.write` +os_write :: proc(fd: _OS_Handle, data: []byte) -> (int, _OS_Errno) { + return 0, -1; +} + +current_thread_id :: proc "contextless" () -> int { + return 0; +} diff --git a/src/parser.cpp b/src/parser.cpp index 868291177..2ddad3b58 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -4821,16 +4821,16 @@ bool parse_build_tag(Token token_for_pos, String s) { TargetArchKind arch = get_target_arch_from_string(p); if (os != TargetOs_Invalid) { GB_ASSERT(arch == TargetArch_Invalid); - if (is_notted && os == build_context.metrics.os) { - this_kind_correct = false; - } else if (os != build_context.metrics.os) { - this_kind_correct = false; + if (is_notted) { + this_kind_correct = this_kind_correct && (os != build_context.metrics.os); + } else { + this_kind_correct = this_kind_correct && (os == build_context.metrics.os); } } else if (arch != TargetArch_Invalid) { - if (is_notted && arch == build_context.metrics.arch) { - this_kind_correct = false; - } else if (arch != build_context.metrics.arch) { - this_kind_correct = false; + if (is_notted) { + this_kind_correct = this_kind_correct && (arch != build_context.metrics.arch); + } else { + this_kind_correct = this_kind_correct && (arch == build_context.metrics.arch); } } if (os == TargetOs_Invalid && arch == TargetArch_Invalid) {