Explorar o código

Merge remote-tracking branch 'upstream/master'

Wison Ye hai 5 meses
pai
achega
17a01dcebf

+ 2 - 2
.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

+ 18 - 2
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:

+ 1 - 1
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

+ 8 - 8
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 {

+ 9 - 2
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;

+ 1 - 5
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);

+ 2 - 2
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, {},