mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -53,8 +53,8 @@ jobs:
|
|||||||
- name: (Linux) Download LLVM
|
- name: (Linux) Download LLVM
|
||||||
run: |
|
run: |
|
||||||
apk add --no-cache \
|
apk add --no-cache \
|
||||||
musl-dev llvm20-dev clang20 git mold lz4 \
|
musl-dev llvm18-dev clang18 git mold lz4 \
|
||||||
libxml2-static llvm20-static zlib-static zstd-static \
|
libxml2-static llvm18-static zlib-static zstd-static \
|
||||||
make
|
make
|
||||||
shell: alpine.sh --root {0}
|
shell: alpine.sh --root {0}
|
||||||
- name: build odin
|
- name: build odin
|
||||||
|
|||||||
@@ -117,9 +117,25 @@ assign_int :: proc(val: any, i: $T) -> bool {
|
|||||||
case uint: dst = uint (i)
|
case uint: dst = uint (i)
|
||||||
case uintptr: dst = uintptr(i)
|
case uintptr: dst = uintptr(i)
|
||||||
case:
|
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)
|
ti := type_info_of(v.id)
|
||||||
if _, ok := ti.variant.(runtime.Type_Info_Bit_Set); ok {
|
if info, ok := ti.variant.(runtime.Type_Info_Bit_Set); ok {
|
||||||
do_byte_swap := !reflect.bit_set_is_big_endian(v)
|
do_byte_swap := is_bit_set_different_endian_to_platform(info.underlying)
|
||||||
switch ti.size * 8 {
|
switch ti.size * 8 {
|
||||||
case 0: // no-op.
|
case 0: // no-op.
|
||||||
case 8:
|
case 8:
|
||||||
|
|||||||
@@ -565,7 +565,7 @@ when ODIN_OS == .Darwin {
|
|||||||
SS_ONSTACK :: 0x0001
|
SS_ONSTACK :: 0x0001
|
||||||
SS_DISABLE :: 0x0004
|
SS_DISABLE :: 0x0004
|
||||||
|
|
||||||
when ODIN_ARCH == .amd64 || ODIN_ARCH == .arm32 {
|
when ODIN_ARCH == .arm64 || ODIN_ARCH == .arm32 {
|
||||||
MINSIGSTKSZ :: 1024 * 4
|
MINSIGSTKSZ :: 1024 * 4
|
||||||
} else when ODIN_ARCH == .amd64 || ODIN_ARCH == .i386 {
|
} else when ODIN_ARCH == .amd64 || ODIN_ARCH == .i386 {
|
||||||
MINSIGSTKSZ :: 512 * 4
|
MINSIGSTKSZ :: 512 * 4
|
||||||
|
|||||||
@@ -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 {
|
remove_event_listener_from_event :: proc(e: Event) -> bool {
|
||||||
from_use_capture_false: bool
|
from_use_capture_false: bool
|
||||||
from_use_capture_true: bool
|
from_use_capture_true: bool
|
||||||
if e.id == "" {
|
if e.id == "" {
|
||||||
from_use_capture_false = remove_window_event_listener(e.kind, e.user_data, e.callback, false)
|
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_true = remove_window_event_listener(e.kind, e.user_data, e.callback, true)
|
||||||
} else {
|
} else {
|
||||||
from_use_capture_false = remove_event_listener(e.id, e.kind, e.user_data, e.callback, false)
|
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)
|
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
|
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 {
|
add_custom_event_listener :: proc(id: string, name: string, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
|
||||||
|
|||||||
@@ -1662,6 +1662,10 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
|
|||||||
if (element == undefined) {
|
if (element == undefined) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
let key = listener_key(id, name, data, callback, !!use_capture);
|
||||||
|
if (wasmMemoryInterface.listenerMap.has(key)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let listener = (e) => {
|
let listener = (e) => {
|
||||||
let event_data = {};
|
let event_data = {};
|
||||||
@@ -1672,7 +1676,6 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
|
|||||||
|
|
||||||
onEventReceived(event_data, data, callback);
|
onEventReceived(event_data, data, callback);
|
||||||
};
|
};
|
||||||
let key = listener_key(id, name, data, callback, !!use_capture);
|
|
||||||
wasmMemoryInterface.listenerMap.set(key, listener);
|
wasmMemoryInterface.listenerMap.set(key, listener);
|
||||||
element.addEventListener(name, listener, !!use_capture);
|
element.addEventListener(name, listener, !!use_capture);
|
||||||
return true;
|
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) => {
|
add_window_event_listener: (name_ptr, name_len, name_code, data, callback, use_capture) => {
|
||||||
let name = wasmMemoryInterface.loadString(name_ptr, name_len);
|
let name = wasmMemoryInterface.loadString(name_ptr, name_len);
|
||||||
let element = window;
|
let element = window;
|
||||||
|
let key = listener_key('window', name, data, callback, !!use_capture);
|
||||||
|
if (wasmMemoryInterface.listenerMap.has(key)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let listener = (e) => {
|
let listener = (e) => {
|
||||||
let event_data = {};
|
let event_data = {};
|
||||||
event_data.id_ptr = 0;
|
event_data.id_ptr = 0;
|
||||||
@@ -1690,7 +1698,6 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
|
|||||||
|
|
||||||
onEventReceived(event_data, data, callback);
|
onEventReceived(event_data, data, callback);
|
||||||
};
|
};
|
||||||
let key = listener_key('window', name, data, callback, !!use_capture);
|
|
||||||
wasmMemoryInterface.listenerMap.set(key, listener);
|
wasmMemoryInterface.listenerMap.set(key, listener);
|
||||||
element.addEventListener(name, listener, !!use_capture);
|
element.addEventListener(name, listener, !!use_capture);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -2812,15 +2812,11 @@ gb_internal lbAddr lb_add_global_generated_with_name(lbModule *m, Type *type, lb
|
|||||||
GB_ASSERT(type != nullptr);
|
GB_ASSERT(type != nullptr);
|
||||||
type = default_type(type);
|
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;
|
Scope *scope = nullptr;
|
||||||
Entity *e = alloc_entity_variable(scope, make_token_ident(name), type);
|
Entity *e = alloc_entity_variable(scope, make_token_ident(name), type);
|
||||||
lbValue g = {};
|
lbValue g = {};
|
||||||
g.type = alloc_type_pointer(type);
|
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) {
|
if (value.value != nullptr) {
|
||||||
GB_ASSERT_MSG(LLVMIsConstant(value.value), LLVMPrintValueToString(value.value));
|
GB_ASSERT_MSG(LLVMIsConstant(value.value), LLVMPrintValueToString(value.value));
|
||||||
LLVMSetInitializer(g.value, value.value);
|
LLVMSetInitializer(g.value, value.value);
|
||||||
|
|||||||
@@ -2112,7 +2112,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_selector(lbProcedure *p, Stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!entity) {
|
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);
|
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, {},
|
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) {
|
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);
|
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, {},
|
lbAddr default_addr = lb_add_global_generated_with_name(default_module, t_objc_Class, {},
|
||||||
|
|||||||
Reference in New Issue
Block a user