aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorColin Davidson <colrdavidson@gmail.com>2025-07-28 14:24:46 -0700
committerColin Davidson <colrdavidson@gmail.com>2025-07-28 14:24:46 -0700
commitb88f9194d0d25bd5121f45eb3696b0e1725dfd41 (patch)
tree8f15e33fa41dd191f786b4ad414ab96062d96cbf /core
parent2dae1d8a4134226887a6e6a0aad0318e46e40cde (diff)
parentbe3006dbf26fbe6b51bb489f346793823968aedf (diff)
Merge remote-tracking branch 'live/master' into macharena
Diffstat (limited to 'core')
-rw-r--r--core/c/libc/complex.odin2
-rw-r--r--core/c/libc/ctype.odin2
-rw-r--r--core/c/libc/errno.odin2
-rw-r--r--core/c/libc/locale.odin2
-rw-r--r--core/c/libc/math.odin2
-rw-r--r--core/c/libc/setjmp.odin2
-rw-r--r--core/c/libc/signal.odin2
-rw-r--r--core/c/libc/stdio.odin2
-rw-r--r--core/c/libc/stdlib.odin2
-rw-r--r--core/c/libc/string.odin2
-rw-r--r--core/c/libc/time.odin2
-rw-r--r--core/c/libc/uchar.odin2
-rw-r--r--core/c/libc/wchar.odin2
-rw-r--r--core/c/libc/wctype.odin2
-rw-r--r--core/crypto/hash/hash.odin5
-rw-r--r--core/hash/hash.odin2
-rw-r--r--core/mem/allocators.odin5
-rw-r--r--core/mem/virtual/virtual.odin4
-rw-r--r--core/net/interface_darwin.odin2
-rw-r--r--core/odin/parser/parser.odin37
-rw-r--r--core/os/os2/process_posix_darwin.odin2
-rw-r--r--core/os/os_darwin.odin4
-rw-r--r--core/os/os_freebsd.odin4
-rw-r--r--core/os/os_linux.odin4
-rw-r--r--core/os/os_netbsd.odin4
-rw-r--r--core/os/os_openbsd.odin4
-rw-r--r--core/path/filepath/match.odin1
-rw-r--r--core/path/filepath/walk.odin1
-rw-r--r--core/simd/simd.odin51
-rw-r--r--core/sync/futex_darwin.odin2
-rw-r--r--core/sync/primitives_darwin.odin2
-rw-r--r--core/sys/darwin/Foundation/NSBlock.odin2
-rw-r--r--core/sys/darwin/darwin.odin2
-rw-r--r--core/sys/darwin/mach_darwin.odin2
-rw-r--r--core/sys/darwin/proc.odin2
-rw-r--r--core/sys/darwin/sync.odin20
-rw-r--r--core/sys/info/platform_darwin.odin2
-rw-r--r--core/sys/kqueue/kqueue.odin2
-rw-r--r--core/sys/posix/arpa_inet.odin2
-rw-r--r--core/sys/posix/dirent.odin2
-rw-r--r--core/sys/posix/dlfcn.odin2
-rw-r--r--core/sys/posix/fcntl.odin2
-rw-r--r--core/sys/posix/fnmatch.odin2
-rw-r--r--core/sys/posix/glob.odin2
-rw-r--r--core/sys/posix/grp.odin2
-rw-r--r--core/sys/posix/langinfo.odin2
-rw-r--r--core/sys/posix/libgen.odin2
-rw-r--r--core/sys/posix/monetary.odin2
-rw-r--r--core/sys/posix/net_if.odin2
-rw-r--r--core/sys/posix/netdb.odin2
-rw-r--r--core/sys/posix/netinet_in.odin2
-rw-r--r--core/sys/posix/poll.odin2
-rw-r--r--core/sys/posix/pthread.odin2
-rw-r--r--core/sys/posix/pwd.odin2
-rw-r--r--core/sys/posix/sched.odin2
-rw-r--r--core/sys/posix/setjmp.odin2
-rw-r--r--core/sys/posix/signal.odin2
-rw-r--r--core/sys/posix/signal_libc.odin2
-rw-r--r--core/sys/posix/stdio.odin2
-rw-r--r--core/sys/posix/stdio_libc.odin2
-rw-r--r--core/sys/posix/stdlib.odin2
-rw-r--r--core/sys/posix/stdlib_libc.odin2
-rw-r--r--core/sys/posix/string.odin2
-rw-r--r--core/sys/posix/string_libc.odin2
-rw-r--r--core/sys/posix/sys_ipc.odin2
-rw-r--r--core/sys/posix/sys_mman.odin2
-rw-r--r--core/sys/posix/sys_msg.odin2
-rw-r--r--core/sys/posix/sys_resource.odin2
-rw-r--r--core/sys/posix/sys_select.odin2
-rw-r--r--core/sys/posix/sys_sem.odin2
-rw-r--r--core/sys/posix/sys_shm.odin2
-rw-r--r--core/sys/posix/sys_socket.odin2
-rw-r--r--core/sys/posix/sys_stat.odin2
-rw-r--r--core/sys/posix/sys_statvfs.odin2
-rw-r--r--core/sys/posix/sys_time.odin2
-rw-r--r--core/sys/posix/sys_times.odin2
-rw-r--r--core/sys/posix/sys_uio.odin2
-rw-r--r--core/sys/posix/sys_utsname.odin2
-rw-r--r--core/sys/posix/sys_wait.odin2
-rw-r--r--core/sys/posix/termios.odin2
-rw-r--r--core/sys/posix/time.odin2
-rw-r--r--core/sys/posix/ulimit.odin2
-rw-r--r--core/sys/posix/unistd.odin2
-rw-r--r--core/sys/posix/unistd_libc.odin2
-rw-r--r--core/sys/posix/utime.odin2
-rw-r--r--core/sys/posix/wordexp.odin2
-rw-r--r--core/sys/windows/ole32.odin5
-rw-r--r--core/sys/windows/util.odin37
88 files changed, 205 insertions, 127 deletions
diff --git a/core/c/libc/complex.odin b/core/c/libc/complex.odin
index 98fd7b1bb..7b6ac6417 100644
--- a/core/c/libc/complex.odin
+++ b/core/c/libc/complex.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/ctype.odin b/core/c/libc/ctype.odin
index 185385a5e..d156f1ed7 100644
--- a/core/c/libc/ctype.odin
+++ b/core/c/libc/ctype.odin
@@ -3,7 +3,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/errno.odin b/core/c/libc/errno.odin
index 5d1ca8248..138d70a80 100644
--- a/core/c/libc/errno.odin
+++ b/core/c/libc/errno.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/locale.odin b/core/c/libc/locale.odin
index d95f5c164..27317526c 100644
--- a/core/c/libc/locale.odin
+++ b/core/c/libc/locale.odin
@@ -5,7 +5,7 @@ import "core:c"
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/math.odin b/core/c/libc/math.odin
index 81d51728d..d0a015c70 100644
--- a/core/c/libc/math.odin
+++ b/core/c/libc/math.odin
@@ -7,7 +7,7 @@ import "base:intrinsics"
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/setjmp.odin b/core/c/libc/setjmp.odin
index 101b614b3..4f5319316 100644
--- a/core/c/libc/setjmp.odin
+++ b/core/c/libc/setjmp.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/signal.odin b/core/c/libc/signal.odin
index c447e3cc3..cddf06916 100644
--- a/core/c/libc/signal.odin
+++ b/core/c/libc/signal.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/stdio.odin b/core/c/libc/stdio.odin
index 56e4e8f66..854a98637 100644
--- a/core/c/libc/stdio.odin
+++ b/core/c/libc/stdio.odin
@@ -9,7 +9,7 @@ when ODIN_OS == .Windows {
"system:legacy_stdio_definitions.lib",
}
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/stdlib.odin b/core/c/libc/stdlib.odin
index c0e273872..ca906a5f0 100644
--- a/core/c/libc/stdlib.odin
+++ b/core/c/libc/stdlib.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/string.odin b/core/c/libc/string.odin
index 4ec4f3a7a..2ea54579c 100644
--- a/core/c/libc/string.odin
+++ b/core/c/libc/string.odin
@@ -7,7 +7,7 @@ import "base:runtime"
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/time.odin b/core/c/libc/time.odin
index 33f8dc3af..6106923f5 100644
--- a/core/c/libc/time.odin
+++ b/core/c/libc/time.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/uchar.odin b/core/c/libc/uchar.odin
index a10969ceb..997b99b46 100644
--- a/core/c/libc/uchar.odin
+++ b/core/c/libc/uchar.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/wchar.odin b/core/c/libc/wchar.odin
index f0dae720e..248611409 100644
--- a/core/c/libc/wchar.odin
+++ b/core/c/libc/wchar.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/c/libc/wctype.odin b/core/c/libc/wctype.odin
index b96410b4c..6526a14e2 100644
--- a/core/c/libc/wctype.odin
+++ b/core/c/libc/wctype.odin
@@ -5,7 +5,7 @@ package libc
when ODIN_OS == .Windows {
foreign import libc "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/crypto/hash/hash.odin b/core/crypto/hash/hash.odin
index d47f0ab46..66d9201cd 100644
--- a/core/crypto/hash/hash.odin
+++ b/core/crypto/hash/hash.odin
@@ -21,8 +21,7 @@ hash_string :: proc(algorithm: Algorithm, data: string, allocator := context.all
// in a newly allocated slice.
hash_bytes :: proc(algorithm: Algorithm, data: []byte, allocator := context.allocator) -> []byte {
dst := make([]byte, DIGEST_SIZES[algorithm], allocator)
- hash_bytes_to_buffer(algorithm, data, dst)
- return dst
+ return hash_bytes_to_buffer(algorithm, data, dst)
}
// hash_string_to_buffer will hash the given input and assign the
@@ -46,7 +45,7 @@ hash_bytes_to_buffer :: proc(algorithm: Algorithm, data, hash: []byte) -> []byte
update(&ctx, data)
final(&ctx, hash)
- return hash
+ return hash[:DIGEST_SIZES[algorithm]]
}
// hash_stream will incrementally fully consume a stream, and return the
diff --git a/core/hash/hash.odin b/core/hash/hash.odin
index 45f524d8a..6c048c05b 100644
--- a/core/hash/hash.odin
+++ b/core/hash/hash.odin
@@ -127,7 +127,7 @@ jenkins :: proc "contextless" (data: []byte, seed := u32(0)) -> u32 {
}
@(optimization_mode="favor_size")
-murmur32 :: proc "contextless" (data: []byte, seed := u32(0)) -> u32 {
+murmur32 :: proc "contextless" (data: []byte, seed := u32(0x9747b28c)) -> u32 {
c1_32: u32 : 0xcc9e2d51
c2_32: u32 : 0x1b873593
diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin
index 0eacb1b65..cb9301f60 100644
--- a/core/mem/allocators.odin
+++ b/core/mem/allocators.odin
@@ -2223,6 +2223,9 @@ Initialize a buddy allocator.
This procedure initializes the buddy allocator `b` with a backing buffer `data`
and block alignment specified by `alignment`.
+
+`alignment` may be any power of two, but the backing buffer must be aligned to
+at least `size_of(Buddy_Block)`.
*/
buddy_allocator_init :: proc(b: ^Buddy_Allocator, data: []byte, alignment: uint, loc := #caller_location) {
assert(data != nil)
@@ -2233,7 +2236,7 @@ buddy_allocator_init :: proc(b: ^Buddy_Allocator, data: []byte, alignment: uint,
alignment = size_of(Buddy_Block)
}
ptr := raw_data(data)
- assert(uintptr(ptr) % uintptr(alignment) == 0, "data is not aligned to minimum alignment", loc)
+ assert(uintptr(ptr) % uintptr(alignment) == 0, "The data is not aligned to the minimum alignment, which must be at least `size_of(Buddy_Block)`.", loc)
b.head = (^Buddy_Block)(ptr)
b.head.size = len(data)
b.head.is_free = true
diff --git a/core/mem/virtual/virtual.odin b/core/mem/virtual/virtual.odin
index c4c3b1727..3027e5848 100644
--- a/core/mem/virtual/virtual.odin
+++ b/core/mem/virtual/virtual.odin
@@ -89,8 +89,8 @@ memory_block_alloc :: proc(committed, reserved: uint, alignment: uint = 0, flags
reserved = align_formula(reserved, page_size)
committed = clamp(committed, 0, reserved)
- total_size := uint(reserved + max(alignment, size_of(Platform_Memory_Block)))
- base_offset := uintptr(max(alignment, size_of(Platform_Memory_Block)))
+ total_size := reserved + alignment + size_of(Platform_Memory_Block)
+ base_offset := mem.align_forward_uintptr(size_of(Platform_Memory_Block), max(uintptr(alignment), align_of(Platform_Memory_Block)))
protect_offset := uintptr(0)
do_protection := false
diff --git a/core/net/interface_darwin.odin b/core/net/interface_darwin.odin
index f189e5844..9883c10af 100644
--- a/core/net/interface_darwin.odin
+++ b/core/net/interface_darwin.odin
@@ -23,7 +23,7 @@ package net
import "core:strings"
import "core:sys/posix"
-foreign import lib "system:System.framework"
+foreign import lib "system:System"
@(private)
_enumerate_interfaces :: proc(allocator := context.allocator) -> (interfaces: []Network_Interface, err: Interfaces_Error) {
diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin
index 27b7edbf6..18dd9aa88 100644
--- a/core/odin/parser/parser.odin
+++ b/core/odin/parser/parser.odin
@@ -348,27 +348,30 @@ consume_comment_group :: proc(p: ^Parser, n: int) -> (comments: ^ast.Comment_Gro
}
consume_comment_groups :: proc(p: ^Parser, prev: tokenizer.Token) {
- if p.curr_tok.kind == .Comment {
- comment: ^ast.Comment_Group
- end_line := 0
-
- if p.curr_tok.pos.line == prev.pos.line {
- comment, end_line = consume_comment_group(p, 0)
- if p.curr_tok.pos.line != end_line || p.curr_tok.kind == .EOF {
- p.line_comment = comment
- }
- }
+ if p.curr_tok.kind != .Comment {
+ return
+ }
+ comment: ^ast.Comment_Group
+ end_line := 0
- end_line = -1
- for p.curr_tok.kind == .Comment {
- comment, end_line = consume_comment_group(p, 1)
- }
- if end_line+1 >= p.curr_tok.pos.line || end_line < 0 {
- p.lead_comment = comment
+ if p.curr_tok.pos.line == prev.pos.line {
+ comment, end_line = consume_comment_group(p, 0)
+ if p.curr_tok.pos.line != end_line ||
+ p.curr_tok.pos.line == prev.pos.line+1 ||
+ p.curr_tok.kind == .EOF {
+ p.line_comment = comment
}
+ }
- assert(p.curr_tok.kind != .Comment)
+ end_line = -1
+ for p.curr_tok.kind == .Comment {
+ comment, end_line = consume_comment_group(p, 1)
}
+ if end_line+1 >= p.curr_tok.pos.line || end_line < 0 {
+ p.lead_comment = comment
+ }
+
+ assert(p.curr_tok.kind != .Comment)
}
advance_token :: proc(p: ^Parser) -> tokenizer.Token {
diff --git a/core/os/os2/process_posix_darwin.odin b/core/os/os2/process_posix_darwin.odin
index ac2d4b78c..7625e513a 100644
--- a/core/os/os2/process_posix_darwin.odin
+++ b/core/os/os2/process_posix_darwin.odin
@@ -10,7 +10,7 @@ import "core:sys/posix"
import "core:sys/unix"
import "core:time"
-foreign import lib "system:System.framework"
+foreign import lib "system:System"
foreign lib {
sysctl :: proc(
diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin
index d4e1875af..3c12e8c7f 100644
--- a/core/os/os_darwin.odin
+++ b/core/os/os_darwin.odin
@@ -1,8 +1,8 @@
package os
foreign import dl "system:dl"
-foreign import libc "system:System.framework"
-foreign import pthread "system:System.framework"
+foreign import libc "system:System"
+foreign import pthread "system:System"
import "base:runtime"
import "core:strings"
diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin
index f57c464ac..aeffdcb87 100644
--- a/core/os/os_freebsd.odin
+++ b/core/os/os_freebsd.odin
@@ -967,8 +967,8 @@ _processor_core_count :: proc() -> int {
@(private, require_results)
_alloc_command_line_arguments :: proc() -> []string {
res := make([]string, len(runtime.args__))
- for arg, i in runtime.args__ {
- res[i] = string(arg)
+ for _, i in res {
+ res[i] = string(runtime.args__[i])
}
return res
}
diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin
index 683c893f9..66c30711d 100644
--- a/core/os/os_linux.odin
+++ b/core/os/os_linux.odin
@@ -1100,8 +1100,8 @@ _processor_core_count :: proc() -> int {
@(private, require_results)
_alloc_command_line_arguments :: proc() -> []string {
res := make([]string, len(runtime.args__))
- for arg, i in runtime.args__ {
- res[i] = string(arg)
+ for _, i in res {
+ res[i] = string(runtime.args__[i])
}
return res
}
diff --git a/core/os/os_netbsd.odin b/core/os/os_netbsd.odin
index efdd852fe..accc5abcd 100644
--- a/core/os/os_netbsd.odin
+++ b/core/os/os_netbsd.odin
@@ -1017,8 +1017,8 @@ _processor_core_count :: proc() -> int {
@(private, require_results)
_alloc_command_line_arguments :: proc() -> []string {
res := make([]string, len(runtime.args__))
- for arg, i in runtime.args__ {
- res[i] = string(arg)
+ for _, i in res {
+ res[i] = string(runtime.args__[i])
}
return res
}
diff --git a/core/os/os_openbsd.odin b/core/os/os_openbsd.odin
index c68f7943c..ec9181ba6 100644
--- a/core/os/os_openbsd.odin
+++ b/core/os/os_openbsd.odin
@@ -917,8 +917,8 @@ _processor_core_count :: proc() -> int {
@(private, require_results)
_alloc_command_line_arguments :: proc() -> []string {
res := make([]string, len(runtime.args__))
- for arg, i in runtime.args__ {
- res[i] = string(arg)
+ for _, i in res {
+ res[i] = string(runtime.args__[i])
}
return res
}
diff --git a/core/path/filepath/match.odin b/core/path/filepath/match.odin
index 1f0ac9287..3eaa7c6fe 100644
--- a/core/path/filepath/match.odin
+++ b/core/path/filepath/match.odin
@@ -1,4 +1,5 @@
#+build !wasi
+#+build !js
package filepath
import "core:os"
diff --git a/core/path/filepath/walk.odin b/core/path/filepath/walk.odin
index 53b10eed7..05d67daf0 100644
--- a/core/path/filepath/walk.odin
+++ b/core/path/filepath/walk.odin
@@ -1,4 +1,5 @@
#+build !wasi
+#+build !js
package filepath
import "core:os"
diff --git a/core/simd/simd.odin b/core/simd/simd.odin
index b4779b5ff..303eceb97 100644
--- a/core/simd/simd.odin
+++ b/core/simd/simd.odin
@@ -2441,6 +2441,57 @@ Graphically, the operation looks as follows. The `t` and `f` represent the
select :: intrinsics.simd_select
/*
+Runtime Equivalent to Shuffle.
+
+Performs element-wise table lookups using runtime indices.
+Each element in the indices vector selects an element from the table vector.
+The indices are automatically masked to prevent out-of-bounds access.
+
+This operation is hardware-accelerated on most platforms when using 8-bit
+integer vectors. For other element types or unsupported vector sizes, it
+falls back to software emulation.
+
+Inputs:
+- `table`: The lookup table vector (should be power-of-2 size for correct masking).
+- `indices`: The indices vector (automatically masked to valid range).
+
+Returns:
+- A vector where `result[i] = table[indices[i] & (table_size-1)]`.
+
+Operation:
+
+ for i in 0 ..< len(indices) {
+ masked_index := indices[i] & (len(table) - 1)
+ result[i] = table[masked_index]
+ }
+ return result
+
+Implementation:
+
+ | Platform | Lane Size | Implementation |
+ |-------------|-------------------------------------------|---------------------|
+ | x86-64 | pshufb (16B), vpshufb (32B), AVX512 (64B) | Single vector |
+ | ARM64 | tbl1 (16B), tbl2 (32B), tbl4 (64B) | Automatic splitting |
+ | ARM32 | vtbl1 (8B), vtbl2 (16B), vtbl4 (32B) | Automatic splitting |
+ | WebAssembly | i8x16.swizzle (16B), Emulation (>16B) | Mixed |
+ | Other | Emulation | Software |
+
+Example:
+
+ import "core:simd"
+ import "core:fmt"
+
+ runtime_swizzle_example :: proc() {
+ table := simd.u8x16{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
+ indices := simd.u8x16{15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
+ result := simd.runtime_swizzle(table, indices)
+ fmt.println(result) // Expected: {15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
+ }
+
+*/
+runtime_swizzle :: intrinsics.simd_runtime_swizzle
+
+/*
Compute the square root of each lane in a SIMD vector.
*/
sqrt :: intrinsics.sqrt
diff --git a/core/sync/futex_darwin.odin b/core/sync/futex_darwin.odin
index 10ff7bfbb..2b104fed6 100644
--- a/core/sync/futex_darwin.odin
+++ b/core/sync/futex_darwin.odin
@@ -6,7 +6,7 @@ import "core:c"
import "core:sys/darwin"
import "core:time"
-foreign import System "system:System.framework"
+foreign import System "system:System"
foreign System {
// __ulock_wait is not available on 10.15
diff --git a/core/sync/primitives_darwin.odin b/core/sync/primitives_darwin.odin
index 141cea744..4ae4b7789 100644
--- a/core/sync/primitives_darwin.odin
+++ b/core/sync/primitives_darwin.odin
@@ -5,7 +5,7 @@ package sync
import "core:c"
import "base:intrinsics"
-foreign import pthread "system:System.framework"
+foreign import pthread "system:System"
_current_thread_id :: proc "contextless" () -> int {
tid: u64
diff --git a/core/sys/darwin/Foundation/NSBlock.odin b/core/sys/darwin/Foundation/NSBlock.odin
index 1ef5e8a9b..8e65391f4 100644
--- a/core/sys/darwin/Foundation/NSBlock.odin
+++ b/core/sys/darwin/Foundation/NSBlock.odin
@@ -62,7 +62,7 @@ global_block_descriptor := Block_Descriptor{
size = size_of(Internal_Block_Literal),
}
-foreign import libSystem "system:System.framework"
+foreign import libSystem "system:System"
foreign libSystem {
_NSConcreteGlobalBlock: intrinsics.objc_class
_NSConcreteStackBlock: intrinsics.objc_class
diff --git a/core/sys/darwin/darwin.odin b/core/sys/darwin/darwin.odin
index 96cfc7be6..52297505a 100644
--- a/core/sys/darwin/darwin.odin
+++ b/core/sys/darwin/darwin.odin
@@ -4,7 +4,7 @@ package darwin
import "core:c"
@(export)
-foreign import system "system:System.framework"
+foreign import system "system:System"
Bool :: b8
diff --git a/core/sys/darwin/mach_darwin.odin b/core/sys/darwin/mach_darwin.odin
index b66b90325..ce8594a6c 100644
--- a/core/sys/darwin/mach_darwin.odin
+++ b/core/sys/darwin/mach_darwin.odin
@@ -1,6 +1,6 @@
package darwin
-foreign import mach "system:System.framework"
+foreign import mach "system:System"
import "core:c"
import "base:intrinsics"
diff --git a/core/sys/darwin/proc.odin b/core/sys/darwin/proc.odin
index fa5391f6f..ccd05f478 100644
--- a/core/sys/darwin/proc.odin
+++ b/core/sys/darwin/proc.odin
@@ -4,7 +4,7 @@ import "base:intrinsics"
import "core:sys/posix"
-foreign import lib "system:System.framework"
+foreign import lib "system:System"
// Incomplete bindings to the proc API on MacOS, add to when needed.
diff --git a/core/sys/darwin/sync.odin b/core/sys/darwin/sync.odin
index 6d68dc8f8..5f4f16fc3 100644
--- a/core/sys/darwin/sync.odin
+++ b/core/sys/darwin/sync.odin
@@ -3,23 +3,13 @@ package darwin
// #define OS_WAIT_ON_ADDR_AVAILABILITY \
// __API_AVAILABLE(macos(14.4), ios(17.4), tvos(17.4), watchos(10.4))
when ODIN_OS == .Darwin {
-
- when ODIN_PLATFORM_SUBTARGET == .iOS && ODIN_MINIMUM_OS_VERSION >= 17_04_00 {
- WAIT_ON_ADDRESS_AVAILABLE :: true
- } else when ODIN_MINIMUM_OS_VERSION >= 14_04_00 {
- WAIT_ON_ADDRESS_AVAILABLE :: true
+ when ODIN_PLATFORM_SUBTARGET_IOS {
+ WAIT_ON_ADDRESS_AVAILABLE :: ODIN_MINIMUM_OS_VERSION >= 17_04_00
+ ULOCK_WAIT_2_AVAILABLE :: ODIN_MINIMUM_OS_VERSION >= 14_00_00
} else {
- WAIT_ON_ADDRESS_AVAILABLE :: false
+ WAIT_ON_ADDRESS_AVAILABLE :: ODIN_MINIMUM_OS_VERSION >= 14_04_00
+ ULOCK_WAIT_2_AVAILABLE :: ODIN_MINIMUM_OS_VERSION >= 11_00_00
}
-
- when ODIN_PLATFORM_SUBTARGET == .iOS && ODIN_MINIMUM_OS_VERSION >= 14_00_00 {
- ULOCK_WAIT_2_AVAILABLE :: true
- } else when ODIN_MINIMUM_OS_VERSION >= 11_00_00 {
- ULOCK_WAIT_2_AVAILABLE :: true
- } else {
- ULOCK_WAIT_2_AVAILABLE :: false
- }
-
} else {
WAIT_ON_ADDRESS_AVAILABLE :: false
ULOCK_WAIT_2_AVAILABLE :: false
diff --git a/core/sys/info/platform_darwin.odin b/core/sys/info/platform_darwin.odin
index dd7f0fa03..3fc8064ec 100644
--- a/core/sys/info/platform_darwin.odin
+++ b/core/sys/info/platform_darwin.odin
@@ -28,7 +28,7 @@ init_platform :: proc() {
macos_version = {int(version.majorVersion), int(version.minorVersion), int(version.patchVersion)}
- when ODIN_PLATFORM_SUBTARGET == .iOS {
+ when ODIN_PLATFORM_SUBTARGET_IOS {
os_version.platform = .iOS
ws(&b, "iOS")
} else {
diff --git a/core/sys/kqueue/kqueue.odin b/core/sys/kqueue/kqueue.odin
index 56be1cf7a..25ee9bdce 100644
--- a/core/sys/kqueue/kqueue.odin
+++ b/core/sys/kqueue/kqueue.odin
@@ -2,7 +2,7 @@
package kqueue
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/arpa_inet.odin b/core/sys/posix/arpa_inet.odin
index ac850ed49..6edb9e535 100644
--- a/core/sys/posix/arpa_inet.odin
+++ b/core/sys/posix/arpa_inet.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else when ODIN_OS == .Haiku {
foreign import lib "system:network"
} else {
diff --git a/core/sys/posix/dirent.odin b/core/sys/posix/dirent.odin
index 1394f6b9e..cf15dada4 100644
--- a/core/sys/posix/dirent.odin
+++ b/core/sys/posix/dirent.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/dlfcn.odin b/core/sys/posix/dlfcn.odin
index 378c95c32..6c96b0079 100644
--- a/core/sys/posix/dlfcn.odin
+++ b/core/sys/posix/dlfcn.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else when ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD {
foreign import lib "system:dl"
} else {
diff --git a/core/sys/posix/fcntl.odin b/core/sys/posix/fcntl.odin
index bc0b5b5ba..db095c418 100644
--- a/core/sys/posix/fcntl.odin
+++ b/core/sys/posix/fcntl.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/fnmatch.odin b/core/sys/posix/fnmatch.odin
index 04c3d2888..efe179324 100644
--- a/core/sys/posix/fnmatch.odin
+++ b/core/sys/posix/fnmatch.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/glob.odin b/core/sys/posix/glob.odin
index fb90b7546..530481587 100644
--- a/core/sys/posix/glob.odin
+++ b/core/sys/posix/glob.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/grp.odin b/core/sys/posix/grp.odin
index 3694308a0..8e8e69fc2 100644
--- a/core/sys/posix/grp.odin
+++ b/core/sys/posix/grp.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/langinfo.odin b/core/sys/posix/langinfo.odin
index 1fddfe280..195de650d 100644
--- a/core/sys/posix/langinfo.odin
+++ b/core/sys/posix/langinfo.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/libgen.odin b/core/sys/posix/libgen.odin
index 2354bf70d..aa2effd72 100644
--- a/core/sys/posix/libgen.odin
+++ b/core/sys/posix/libgen.odin
@@ -2,7 +2,7 @@
package posix
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/monetary.odin b/core/sys/posix/monetary.odin
index a444bff09..2e4105881 100644
--- a/core/sys/posix/monetary.odin
+++ b/core/sys/posix/monetary.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/net_if.odin b/core/sys/posix/net_if.odin
index 774d11b72..182a049d1 100644
--- a/core/sys/posix/net_if.odin
+++ b/core/sys/posix/net_if.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/netdb.odin b/core/sys/posix/netdb.odin
index ff1cb9d4c..f2f83875f 100644
--- a/core/sys/posix/netdb.odin
+++ b/core/sys/posix/netdb.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/netinet_in.odin b/core/sys/posix/netinet_in.odin
index ec05915de..4b74b87f0 100644
--- a/core/sys/posix/netinet_in.odin
+++ b/core/sys/posix/netinet_in.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/poll.odin b/core/sys/posix/poll.odin
index 44ec767a6..a9e582b51 100644
--- a/core/sys/posix/poll.odin
+++ b/core/sys/posix/poll.odin
@@ -6,7 +6,7 @@ import "base:intrinsics"
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/pthread.odin b/core/sys/posix/pthread.odin
index 36a3cd7b3..c7255baa3 100644
--- a/core/sys/posix/pthread.odin
+++ b/core/sys/posix/pthread.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else when ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .Linux {
foreign import lib "system:pthread"
} else {
diff --git a/core/sys/posix/pwd.odin b/core/sys/posix/pwd.odin
index 75d15c899..c3ee3c0f6 100644
--- a/core/sys/posix/pwd.odin
+++ b/core/sys/posix/pwd.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sched.odin b/core/sys/posix/sched.odin
index 82b335653..cc509ba8e 100644
--- a/core/sys/posix/sched.odin
+++ b/core/sys/posix/sched.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/setjmp.odin b/core/sys/posix/setjmp.odin
index 926dbd3ad..a26bdb93e 100644
--- a/core/sys/posix/setjmp.odin
+++ b/core/sys/posix/setjmp.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/signal.odin b/core/sys/posix/signal.odin
index 882cd9fa8..69b405c5d 100644
--- a/core/sys/posix/signal.odin
+++ b/core/sys/posix/signal.odin
@@ -6,7 +6,7 @@ import "base:intrinsics"
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/signal_libc.odin b/core/sys/posix/signal_libc.odin
index 7a054ddd7..ba0fbf084 100644
--- a/core/sys/posix/signal_libc.odin
+++ b/core/sys/posix/signal_libc.odin
@@ -9,7 +9,7 @@ import "core:c/libc"
when ODIN_OS == .Windows {
foreign import lib "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/stdio.odin b/core/sys/posix/stdio.odin
index 24464dfd8..69c8ad3cb 100644
--- a/core/sys/posix/stdio.odin
+++ b/core/sys/posix/stdio.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/stdio_libc.odin b/core/sys/posix/stdio_libc.odin
index 12706970d..8ccdcc37a 100644
--- a/core/sys/posix/stdio_libc.odin
+++ b/core/sys/posix/stdio_libc.odin
@@ -10,7 +10,7 @@ when ODIN_OS == .Windows {
"system:legacy_stdio_definitions.lib",
}
} else when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/stdlib.odin b/core/sys/posix/stdlib.odin
index 5f1ae1908..0a6e5403c 100644
--- a/core/sys/posix/stdlib.odin
+++ b/core/sys/posix/stdlib.odin
@@ -6,7 +6,7 @@ import "base:intrinsics"
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/stdlib_libc.odin b/core/sys/posix/stdlib_libc.odin
index 6574026f4..e31c51704 100644
--- a/core/sys/posix/stdlib_libc.odin
+++ b/core/sys/posix/stdlib_libc.odin
@@ -9,7 +9,7 @@ import "core:c/libc"
when ODIN_OS == .Windows {
foreign import lib "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/string.odin b/core/sys/posix/string.odin
index 3f9dbb43e..3d0c5b7a2 100644
--- a/core/sys/posix/string.odin
+++ b/core/sys/posix/string.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/string_libc.odin b/core/sys/posix/string_libc.odin
index 72164cc4c..d689847ee 100644
--- a/core/sys/posix/string_libc.odin
+++ b/core/sys/posix/string_libc.odin
@@ -4,7 +4,7 @@ package posix
when ODIN_OS == .Windows {
foreign import lib "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_ipc.odin b/core/sys/posix/sys_ipc.odin
index bf5938ce1..5814c7211 100644
--- a/core/sys/posix/sys_ipc.odin
+++ b/core/sys/posix/sys_ipc.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_mman.odin b/core/sys/posix/sys_mman.odin
index 0594672ae..2d51083dc 100644
--- a/core/sys/posix/sys_mman.odin
+++ b/core/sys/posix/sys_mman.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_msg.odin b/core/sys/posix/sys_msg.odin
index c578b1fc6..87d5089ea 100644
--- a/core/sys/posix/sys_msg.odin
+++ b/core/sys/posix/sys_msg.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_resource.odin b/core/sys/posix/sys_resource.odin
index ae478382a..a748c2bba 100644
--- a/core/sys/posix/sys_resource.odin
+++ b/core/sys/posix/sys_resource.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_select.odin b/core/sys/posix/sys_select.odin
index a75e58de6..117dee625 100644
--- a/core/sys/posix/sys_select.odin
+++ b/core/sys/posix/sys_select.odin
@@ -6,7 +6,7 @@ import "base:intrinsics"
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_sem.odin b/core/sys/posix/sys_sem.odin
index 069315f87..e876cf74a 100644
--- a/core/sys/posix/sys_sem.odin
+++ b/core/sys/posix/sys_sem.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_shm.odin b/core/sys/posix/sys_shm.odin
index 8f3c56b9c..8ee16e5a3 100644
--- a/core/sys/posix/sys_shm.odin
+++ b/core/sys/posix/sys_shm.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_socket.odin b/core/sys/posix/sys_socket.odin
index 0645893d0..812451219 100644
--- a/core/sys/posix/sys_socket.odin
+++ b/core/sys/posix/sys_socket.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/sys/posix/sys_stat.odin b/core/sys/posix/sys_stat.odin
index 265356e54..df0bf2b49 100644
--- a/core/sys/posix/sys_stat.odin
+++ b/core/sys/posix/sys_stat.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_statvfs.odin b/core/sys/posix/sys_statvfs.odin
index 47c810135..1a332c5ce 100644
--- a/core/sys/posix/sys_statvfs.odin
+++ b/core/sys/posix/sys_statvfs.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_time.odin b/core/sys/posix/sys_time.odin
index 94eafec85..058166759 100644
--- a/core/sys/posix/sys_time.odin
+++ b/core/sys/posix/sys_time.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_times.odin b/core/sys/posix/sys_times.odin
index 73db489a7..636d3e153 100644
--- a/core/sys/posix/sys_times.odin
+++ b/core/sys/posix/sys_times.odin
@@ -2,7 +2,7 @@
package posix
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_uio.odin b/core/sys/posix/sys_uio.odin
index 5770f8058..b4411851b 100644
--- a/core/sys/posix/sys_uio.odin
+++ b/core/sys/posix/sys_uio.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import libc "system:System.framework"
+ foreign import libc "system:System"
} else {
foreign import libc "system:c"
}
diff --git a/core/sys/posix/sys_utsname.odin b/core/sys/posix/sys_utsname.odin
index 5ea8807a7..61f88b584 100644
--- a/core/sys/posix/sys_utsname.odin
+++ b/core/sys/posix/sys_utsname.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/sys_wait.odin b/core/sys/posix/sys_wait.odin
index d3bcdfddd..e12fcd212 100644
--- a/core/sys/posix/sys_wait.odin
+++ b/core/sys/posix/sys_wait.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/termios.odin b/core/sys/posix/termios.odin
index 4ca884e87..b385b7097 100644
--- a/core/sys/posix/termios.odin
+++ b/core/sys/posix/termios.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/time.odin b/core/sys/posix/time.odin
index 88f0153f4..7d55cf15b 100644
--- a/core/sys/posix/time.odin
+++ b/core/sys/posix/time.odin
@@ -5,7 +5,7 @@ import "core:c"
import "core:c/libc"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/ulimit.odin b/core/sys/posix/ulimit.odin
index 0f87641fa..892f6dee4 100644
--- a/core/sys/posix/ulimit.odin
+++ b/core/sys/posix/ulimit.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/unistd.odin b/core/sys/posix/unistd.odin
index b8020317c..b05f1e4fa 100644
--- a/core/sys/posix/unistd.odin
+++ b/core/sys/posix/unistd.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/unistd_libc.odin b/core/sys/posix/unistd_libc.odin
index 74edb6862..85d019f21 100644
--- a/core/sys/posix/unistd_libc.odin
+++ b/core/sys/posix/unistd_libc.odin
@@ -6,7 +6,7 @@ import "core:c"
when ODIN_OS == .Windows {
foreign import lib "system:libucrt.lib"
} else when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/utime.odin b/core/sys/posix/utime.odin
index 98c8166d6..fca0dee59 100644
--- a/core/sys/posix/utime.odin
+++ b/core/sys/posix/utime.odin
@@ -2,7 +2,7 @@
package posix
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/posix/wordexp.odin b/core/sys/posix/wordexp.odin
index a9e6f39a7..92d6aba40 100644
--- a/core/sys/posix/wordexp.odin
+++ b/core/sys/posix/wordexp.odin
@@ -4,7 +4,7 @@ package posix
import "core:c"
when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
+ foreign import lib "system:System"
} else {
foreign import lib "system:c"
}
diff --git a/core/sys/windows/ole32.odin b/core/sys/windows/ole32.odin
index 7409d40dc..2e59949e3 100644
--- a/core/sys/windows/ole32.odin
+++ b/core/sys/windows/ole32.odin
@@ -25,11 +25,12 @@ COINIT :: enum DWORD {
SPEED_OVER_MEMORY = 0x8,
}
+IUnknown_UUID_STRING :: "00000000-0000-0000-C000-000000000046"
+IUnknown_UUID := &IID{0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}
+IUnknownVtbl :: IUnknown_VTable
IUnknown :: struct {
using _iunknown_vtable: ^IUnknown_VTable,
}
-
-IUnknownVtbl :: IUnknown_VTable
IUnknown_VTable :: struct {
QueryInterface: proc "system" (This: ^IUnknown, riid: REFIID, ppvObject: ^rawptr) -> HRESULT,
AddRef: proc "system" (This: ^IUnknown) -> ULONG,
diff --git a/core/sys/windows/util.odin b/core/sys/windows/util.odin
index 30eecf8a1..995e8e0e5 100644
--- a/core/sys/windows/util.odin
+++ b/core/sys/windows/util.odin
@@ -170,15 +170,15 @@ wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allo
return string(text[:n]), nil
}
-wstring_to_utf8_buf :: proc(buf: []u8, s: wstring) -> (res: string) {
- n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, -1, nil, 0, nil, nil)
+wstring_to_utf8_buf :: proc(buf: []u8, s: wstring, N := -1) -> (res: string) {
+ n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, i32(N), nil, 0, nil, nil)
if n == 0 {
return
} else if int(n) > len(buf) {
return
}
- n2 := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, -1, raw_data(buf), n, nil, nil)
+ n2 := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, i32(N), raw_data(buf), n, nil, nil)
if n2 == 0 {
return
} else if int(n2) > len(buf) {
@@ -196,6 +196,21 @@ wstring_to_utf8_buf :: proc(buf: []u8, s: wstring) -> (res: string) {
wstring_to_utf8 :: proc{wstring_to_utf8_alloc, wstring_to_utf8_buf}
+/*
+Converts a UTF-16 string into a regular UTF-8 `string` and allocates the result.
+If the input is null-terminated, only the part of the input string leading up
+to it will be converted.
+
+*Allocates Using Provided Allocator*
+
+Inputs:
+- s: The string to be converted
+- allocator: (default: context.allocator)
+
+Returns:
+- res: A cloned and converted string
+- err: An optional allocator error if one occured, `nil` otherwise
+*/
utf16_to_utf8_alloc :: proc(s: []u16, allocator := context.temp_allocator) -> (res: string, err: runtime.Allocator_Error) {
if len(s) == 0 {
return "", nil
@@ -203,11 +218,25 @@ utf16_to_utf8_alloc :: proc(s: []u16, allocator := context.temp_allocator) -> (r
return wstring_to_utf8(raw_data(s), len(s), allocator)
}
+/*
+Converts a UTF-16 string into a regular UTF-8 `string`, using `buf` as its backing.
+If the input is null-terminated, only the part of the input string leading up
+to it will be converted.
+
+*Uses `buf` for backing*
+
+Inputs:
+- s: The string to be converted
+- buf: Backing buffer for result string
+
+Returns:
+- res: A converted string, backed byu `buf`
+*/
utf16_to_utf8_buf :: proc(buf: []u8, s: []u16) -> (res: string) {
if len(s) == 0 {
return
}
- return wstring_to_utf8(buf, raw_data(s))
+ return wstring_to_utf8(buf, raw_data(s), len(s))
}
utf16_to_utf8 :: proc{utf16_to_utf8_alloc, utf16_to_utf8_buf}