aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWison Ye <wisonye@gmail.com>2025-03-22 17:52:43 +1300
committerWison Ye <wisonye@gmail.com>2025-03-22 17:52:43 +1300
commit17a01dcebf71ffdd85557e80aa8de33a31f9a825 (patch)
tree18617234124e9d8f9edf4bf92a8a2c3a32b20e14
parent01e81fe59739e76cfeba1622efafb38f4aa431eb (diff)
parente4bc9677af62c74bb23f4c00d82d2a685ce64e50 (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--.github/workflows/nightly.yml4
-rw-r--r--core/encoding/json/unmarshal.odin20
-rw-r--r--core/sys/posix/signal.odin2
-rw-r--r--core/sys/wasm/js/events.odin16
-rw-r--r--core/sys/wasm/js/odin.js11
-rw-r--r--src/llvm_backend_general.cpp6
-rw-r--r--src/llvm_backend_utility.cpp4
7 files changed, 41 insertions, 22 deletions
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 80b2a72af..314711efb 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -53,8 +53,8 @@ jobs:
- name: (Linux) Download LLVM
run: |
apk add --no-cache \
- musl-dev llvm20-dev clang20 git mold lz4 \
- libxml2-static llvm20-static zlib-static zstd-static \
+ musl-dev llvm18-dev clang18 git mold lz4 \
+ libxml2-static llvm18-static zlib-static zstd-static \
make
shell: alpine.sh --root {0}
- name: build odin
diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin
index 57371e360..151bd69c3 100644
--- a/core/encoding/json/unmarshal.odin
+++ b/core/encoding/json/unmarshal.odin
@@ -117,9 +117,25 @@ assign_int :: proc(val: any, i: $T) -> bool {
case uint: dst = uint (i)
case uintptr: dst = uintptr(i)
case:
+ is_bit_set_different_endian_to_platform :: proc(ti: ^runtime.Type_Info) -> bool {
+ if ti == nil {
+ return false
+ }
+ t := runtime.type_info_base(ti)
+ #partial switch info in t.variant {
+ case runtime.Type_Info_Integer:
+ switch info.endianness {
+ case .Platform: return false
+ case .Little: return ODIN_ENDIAN != .Little
+ case .Big: return ODIN_ENDIAN != .Big
+ }
+ }
+ return false
+ }
+
ti := type_info_of(v.id)
- if _, ok := ti.variant.(runtime.Type_Info_Bit_Set); ok {
- do_byte_swap := !reflect.bit_set_is_big_endian(v)
+ if info, ok := ti.variant.(runtime.Type_Info_Bit_Set); ok {
+ do_byte_swap := is_bit_set_different_endian_to_platform(info.underlying)
switch ti.size * 8 {
case 0: // no-op.
case 8:
diff --git a/core/sys/posix/signal.odin b/core/sys/posix/signal.odin
index c7e2cc09b..d2f737946 100644
--- a/core/sys/posix/signal.odin
+++ b/core/sys/posix/signal.odin
@@ -565,7 +565,7 @@ when ODIN_OS == .Darwin {
SS_ONSTACK :: 0x0001
SS_DISABLE :: 0x0004
- when ODIN_ARCH == .amd64 || ODIN_ARCH == .arm32 {
+ when ODIN_ARCH == .arm64 || ODIN_ARCH == .arm32 {
MINSIGSTKSZ :: 1024 * 4
} else when ODIN_ARCH == .amd64 || ODIN_ARCH == .i386 {
MINSIGSTKSZ :: 512 * 4
diff --git a/core/sys/wasm/js/events.odin b/core/sys/wasm/js/events.odin
index d217f57e6..37a6e6c35 100644
--- a/core/sys/wasm/js/events.odin
+++ b/core/sys/wasm/js/events.odin
@@ -374,16 +374,16 @@ remove_window_event_listener :: proc(kind: Event_Kind, user_data: rawptr, callba
}
remove_event_listener_from_event :: proc(e: Event) -> bool {
- from_use_capture_false: bool
- from_use_capture_true: bool
+ from_use_capture_false: bool
+ from_use_capture_true: bool
if e.id == "" {
- from_use_capture_false = remove_window_event_listener(e.kind, e.user_data, e.callback, false)
- from_use_capture_true = remove_window_event_listener(e.kind, e.user_data, e.callback, true)
+ from_use_capture_false = remove_window_event_listener(e.kind, e.user_data, e.callback, false)
+ from_use_capture_true = remove_window_event_listener(e.kind, e.user_data, e.callback, true)
} else {
- from_use_capture_false = remove_event_listener(e.id, e.kind, e.user_data, e.callback, false)
- from_use_capture_true = remove_event_listener(e.id, e.kind, e.user_data, e.callback, true)
- }
- return from_use_capture_false || from_use_capture_true
+ from_use_capture_false = remove_event_listener(e.id, e.kind, e.user_data, e.callback, false)
+ from_use_capture_true = remove_event_listener(e.id, e.kind, e.user_data, e.callback, true)
+ }
+ return from_use_capture_false || from_use_capture_true
}
add_custom_event_listener :: proc(id: string, name: string, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js
index 1599aa4fe..b3a49523b 100644
--- a/core/sys/wasm/js/odin.js
+++ b/core/sys/wasm/js/odin.js
@@ -1662,6 +1662,10 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
if (element == undefined) {
return false;
}
+ let key = listener_key(id, name, data, callback, !!use_capture);
+ if (wasmMemoryInterface.listenerMap.has(key)) {
+ return false;
+ }
let listener = (e) => {
let event_data = {};
@@ -1672,7 +1676,6 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
onEventReceived(event_data, data, callback);
};
- let key = listener_key(id, name, data, callback, !!use_capture);
wasmMemoryInterface.listenerMap.set(key, listener);
element.addEventListener(name, listener, !!use_capture);
return true;
@@ -1681,6 +1684,11 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
add_window_event_listener: (name_ptr, name_len, name_code, data, callback, use_capture) => {
let name = wasmMemoryInterface.loadString(name_ptr, name_len);
let element = window;
+ let key = listener_key('window', name, data, callback, !!use_capture);
+ if (wasmMemoryInterface.listenerMap.has(key)) {
+ return false;
+ }
+
let listener = (e) => {
let event_data = {};
event_data.id_ptr = 0;
@@ -1690,7 +1698,6 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
onEventReceived(event_data, data, callback);
};
- let key = listener_key('window', name, data, callback, !!use_capture);
wasmMemoryInterface.listenerMap.set(key, listener);
element.addEventListener(name, listener, !!use_capture);
return true;
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index 71d368ec9..b7f70893f 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -2812,15 +2812,11 @@ gb_internal lbAddr lb_add_global_generated_with_name(lbModule *m, Type *type, lb
GB_ASSERT(type != nullptr);
type = default_type(type);
- u8 *str = cast(u8 *)gb_alloc_array(temporary_allocator(), u8, name.len);
- memcpy(str, name.text, name.len);
- str[name.len] = 0;
-
Scope *scope = nullptr;
Entity *e = alloc_entity_variable(scope, make_token_ident(name), type);
lbValue g = {};
g.type = alloc_type_pointer(type);
- g.value = LLVMAddGlobal(m->mod, lb_type(m, type), cast(char const *)str);
+ g.value = LLVMAddGlobal(m->mod, lb_type(m, type), alloc_cstring(temporary_allocator(), name));
if (value.value != nullptr) {
GB_ASSERT_MSG(LLVMIsConstant(value.value), LLVMPrintValueToString(value.value));
LLVMSetInitializer(g.value, value.value);
diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp
index c21e88792..e06369be3 100644
--- a/src/llvm_backend_utility.cpp
+++ b/src/llvm_backend_utility.cpp
@@ -2112,7 +2112,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_selector(lbProcedure *p, Stri
}
if (!entity) {
- gbString global_name = gb_string_make(temporary_allocator(), "__$objc_SEL::");
+ gbString global_name = gb_string_make(permanent_allocator(), "__$objc_SEL::");
global_name = gb_string_append_length(global_name, name.text, name.len);
lbAddr default_addr = lb_add_global_generated_with_name(default_module, t_objc_SEL, {},
@@ -2174,7 +2174,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_class(lbProcedure *p, String
}
if (!entity) {
- gbString global_name = gb_string_make(temporary_allocator(), "__$objc_Class::");
+ gbString global_name = gb_string_make(permanent_allocator(), "__$objc_Class::");
global_name = gb_string_append_length(global_name, name.text, name.len);
lbAddr default_addr = lb_add_global_generated_with_name(default_module, t_objc_Class, {},