From 3148acf6a69868ddec0780daa293866fe079b7d4 Mon Sep 17 00:00:00 2001 From: dozn Date: Mon, 17 Mar 2025 01:51:01 -0700 Subject: [PATCH 001/120] [core:encoding/json] When Unmarshalling, Only Match Struct Tags If Present --- core/encoding/json/unmarshal.odin | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index 57371e360..a5f3bd8c6 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -390,6 +390,9 @@ unmarshal_expect_token :: proc(p: ^Parser, kind: Token_Kind, loc := #caller_loca return prev } +// Struct tags can include not only the name of the JSON key, but also a tag such as `omitempty`. +// Example: `json:"key_name,omitempty"` +// This returns the first field as `json_name`, and the rest are returned as `extra`. @(private) json_name_from_tag_value :: proc(value: string) -> (json_name, extra: string) { json_name = value @@ -425,12 +428,6 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm defer delete(key, p.allocator) unmarshal_expect_token(p, .Colon) - - field_test :: #force_inline proc "contextless" (field_used: [^]byte, offset: uintptr) -> bool { - prev_set := field_used[offset/8] & byte(offset&7) != 0 - field_used[offset/8] |= byte(offset&7) - return prev_set - } field_used_bytes := (reflect.size_of_typeid(ti.id)+7)/8 field_used := intrinsics.alloca(field_used_bytes + 1, 1) // + 1 to not overflow on size_of 0 types. @@ -449,7 +446,9 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm if use_field_idx < 0 { for field, field_idx in fields { - if key == field.name { + tag_value := reflect.struct_tag_get(field.tag, "json") + json_name, _ := json_name_from_tag_value(tag_value) + if json_name == "" && key == field.name { use_field_idx = field_idx break } @@ -470,7 +469,9 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm } } - if field.name == key || (field.tag != "" && reflect.struct_tag_get(field.tag, "json") == key) { + tag_value := reflect.struct_tag_get(field.tag, "json") + json_name, _ := json_name_from_tag_value(tag_value) + if (json_name == "" && field.name == key) || json_name == key { offset = field.offset type = field.type found = true @@ -492,6 +493,11 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm } if field_found { + field_test :: #force_inline proc "contextless" (field_used: [^]byte, offset: uintptr) -> bool { + prev_set := field_used[offset/8] & byte(offset&7) != 0 + field_used[offset/8] |= byte(offset&7) + return prev_set + } if field_test(field_used, offset) { return .Multiple_Use_Field } From a3de9c8de4e539905a85f3cc060f95529b402f18 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 19 Apr 2025 08:04:23 -0400 Subject: [PATCH 002/120] Add initial support for Objective-C class implementation --- base/intrinsics/intrinsics.odin | 5 +- base/runtime/procs_darwin.odin | 25 +- src/check_builtin.cpp | 77 ++++- src/check_decl.cpp | 73 ++++ src/checker.cpp | 77 ++++- src/checker.hpp | 17 +- src/checker_builtin_procs.hpp | 2 + src/entity.cpp | 3 + src/llvm_backend.cpp | 581 ++++++++++++++++++++++++++++++-- src/llvm_backend.hpp | 3 + src/llvm_backend_general.cpp | 2 + src/llvm_backend_proc.cpp | 1 + src/llvm_backend_utility.cpp | 74 +++- src/types.cpp | 2 + 14 files changed, 895 insertions(+), 47 deletions(-) diff --git a/base/intrinsics/intrinsics.odin b/base/intrinsics/intrinsics.odin index bec452007..515e8d48a 100644 --- a/base/intrinsics/intrinsics.odin +++ b/base/intrinsics/intrinsics.odin @@ -353,15 +353,18 @@ x86_xgetbv :: proc(cx: u32) -> (eax, edx: u32) --- objc_object :: struct{} objc_selector :: struct{} objc_class :: struct{} +objc_ivar :: struct{} + objc_id :: ^objc_object objc_SEL :: ^objc_selector objc_Class :: ^objc_class +objc_Ivar :: ^objc_ivar objc_find_selector :: proc($name: string) -> objc_SEL --- objc_register_selector :: proc($name: string) -> objc_SEL --- objc_find_class :: proc($name: string) -> objc_Class --- objc_register_class :: proc($name: string) -> objc_Class --- - +ivar_get :: proc(self: ^$T, $U: typeid) -> ^U --- valgrind_client_request :: proc(default: uintptr, request: uintptr, a0, a1, a2, a3, a4: uintptr) -> uintptr --- diff --git a/base/runtime/procs_darwin.odin b/base/runtime/procs_darwin.odin index c3fc46af1..0aec57e80 100644 --- a/base/runtime/procs_darwin.odin +++ b/base/runtime/procs_darwin.odin @@ -2,21 +2,34 @@ package runtime @(priority_index=-1e6) -foreign import "system:Foundation.framework" +foreign import ObjC "system:objc" import "base:intrinsics" -objc_id :: ^intrinsics.objc_object +objc_id :: ^intrinsics.objc_object objc_Class :: ^intrinsics.objc_class -objc_SEL :: ^intrinsics.objc_selector +objc_SEL :: ^intrinsics.objc_selector +objc_Ivar :: ^intrinsics.objc_ivar +objc_BOOL :: bool -foreign Foundation { - objc_lookUpClass :: proc "c" (name: cstring) -> objc_Class --- + +objc_IMP :: proc "c" (object: objc_id, sel: objc_SEL, #c_vararg args: ..any) -> objc_id + +foreign ObjC { sel_registerName :: proc "c" (name: cstring) -> objc_SEL --- - objc_allocateClassPair :: proc "c" (superclass: objc_Class, name: cstring, extraBytes: uint) -> objc_Class --- objc_msgSend :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) --- objc_msgSend_fpret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) -> f64 --- objc_msgSend_fp2ret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) -> complex128 --- objc_msgSend_stret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) --- + + objc_lookUpClass :: proc "c" (name: cstring) -> objc_Class --- + objc_allocateClassPair :: proc "c" (superclass: objc_Class, name: cstring, extraBytes: uint) -> objc_Class --- + objc_registerClassPair :: proc "c" (cls : objc_Class) --- + class_addMethod :: proc "c" (cls: objc_Class, name: objc_SEL, imp: objc_IMP, types: cstring) -> objc_BOOL --- + class_addIvar :: proc "c" (cls: objc_Class, name: cstring, size: uint, alignment: u8, types: cstring) -> objc_BOOL --- + class_getInstanceVariable :: proc "c" (cls : objc_Class, name: cstring) -> objc_Ivar --- + class_getInstanceSize :: proc "c" (cls : objc_Class) -> uint --- + ivar_getOffset :: proc "c" (v: objc_Ivar) -> uintptr --- } + diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index f66a8605c..c44d1c123 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -387,6 +387,80 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan try_to_add_package_dependency(c, "runtime", "objc_allocateClassPair"); return true; } break; + + case BuiltinProc_objc_ivar_get: + { + Type *self_type = nullptr; + Type *ivar_type = nullptr; + + Operand self {}; + check_expr_or_type(c, &self, ce->args[0]); + + if (!is_operand_value(self) || !check_is_assignable_to(c, &self, t_objc_id)) { + gbString e = expr_to_string(self.expr); + gbString t = type_to_string(self.type); + error(self.expr, "'%.*s' expected a type or value derived from intrinsics.objc_object, got '%s' of type %s", LIT(builtin_name), e, t); + gb_string_free(t); + gb_string_free(e); + return false; + } + else if (!is_type_pointer(self.type)) { + gbString e = expr_to_string(self.expr); + gbString t = type_to_string(self.type); + error(self.expr, "'%.*s' expected a pointer of a value derived from intrinsics.objc_object, got '%s' of type %s", LIT(builtin_name), e, t); + gb_string_free(t); + gb_string_free(e); + return false; + } + + self_type = type_deref(self.type); + + if (!(self_type->kind == Type_Named && + self_type->Named.type_name != nullptr && + self_type->Named.type_name->TypeName.objc_class_name != "")) { + gbString t = type_to_string(self_type); + error(self.expr, "'%.*s' expected a named type with the attribute @(obj_class=) , got type %s", LIT(builtin_name), t); + gb_string_free(t); + return false; + } + + if (self_type->Named.type_name->TypeName.objc_ivar == nullptr) { + gbString t = type_to_string(self_type); + error(self.expr, "'%.*s' requires that type %s have the attribute @(obj_ivar=).", LIT(builtin_name), t); + gb_string_free(t); + return false; + } + + Operand ivar {}; + check_expr_or_type(c, &ivar, ce->args[1]); + if (ivar.mode == Addressing_Type) { + ivar_type = ivar.type; + } else { + return false; + } + + if (self_type->Named.type_name->TypeName.objc_ivar != ivar_type) { + gbString name_self = type_to_string(self_type); + gbString name_expected = type_to_string(self_type->Named.type_name->TypeName.objc_ivar); + gbString name_given = type_to_string(ivar_type); + error(self.expr, "'%.*s' ivar type %s does not match @obj_ivar type %s on Objective-C class %s.", + LIT(builtin_name), name_given, name_expected, name_self); + gb_string_free(name_self); + gb_string_free(name_expected); + gb_string_free(name_given); + return false; + } + + if (type_hint != nullptr && type_hint->kind == Type_Pointer && type_hint->Pointer.elem == ivar_type) { + operand->type = type_hint; + } else { + operand->type = alloc_type_pointer(ivar_type); + } + + operand->mode = Addressing_Value; + + return true; + } break; } } @@ -2132,7 +2206,8 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As case BuiltinProc_objc_find_selector: case BuiltinProc_objc_find_class: case BuiltinProc_objc_register_selector: - case BuiltinProc_objc_register_class: + case BuiltinProc_objc_register_class: + case BuiltinProc_objc_ivar_get: return check_builtin_objc_procedure(c, operand, call, id, type_hint); case BuiltinProc___entry_point: diff --git a/src/check_decl.cpp b/src/check_decl.cpp index ba6445ea4..dffe0b48e 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -526,6 +526,54 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, check_decl_attributes(ctx, decl->attributes, type_decl_attribute, &ac); if (e->kind == Entity_TypeName && ac.objc_class != "") { e->TypeName.objc_class_name = ac.objc_class; + e->TypeName.objc_superclass = ac.objc_superclass; + e->TypeName.objc_ivar = ac.objc_ivar; + + if (ac.objc_is_implementation) { + e->TypeName.objc_is_implementation = true; + mpsc_enqueue(&ctx->info->objc_class_implementations, e); // TODO(harold): Don't need this for anything. Remove. + + GB_ASSERT(e->TypeName.objc_ivar == nullptr || e->TypeName.objc_ivar->kind == Type_Named); + + // Ensure superclass hierarchy are all Objective-C classes and does not cycle + Type *super = ac.objc_superclass; + if (super != nullptr) { + TypeSet super_set{}; + type_set_init(&super_set, 8); + defer (type_set_destroy(&super_set)); + + type_set_update(&super_set, e->type); + + for (;;) { + if (type_set_update(&super_set, super)) { + error(e->token, "@(objc_superclass) Superclass hierarchy cycle encountered"); + break; + } + + if (super->kind != Type_Named) { + error(e->token, "@(objc_superclass) References type must be a named struct."); + break; + } + + Type* named_type = base_type(super->Named.type_name->type); + if (!is_type_objc_object(named_type)) { + error(e->token, "@(objc_superclass) Superclass must be an Objective-C class."); + break; + } + + super = super->Named.type_name->TypeName.objc_superclass; + if (super == nullptr) { + break; + } + + // TODO(harold): Is this the right way to do this??? The referenced entity must be already resolved + // so that we can access its objc_superclass attribute + check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); + } + } + } else if (e->TypeName.objc_superclass != nullptr) { + error(e->token, "@(objc_superclass) can only be applied when the obj_implement attribute is also applied"); + } if (type_size_of(e->type) > 0) { error(e->token, "@(objc_class) marked type must be of zero size"); @@ -942,6 +990,31 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon if (tn->scope != e->scope) { error(e->token, "@(objc_name) attribute may only be applied to procedures and types within the same scope"); } else { + + if (ac.objc_is_implementation) { + GB_ASSERT(e->kind == Entity_Procedure); + + CheckerInfo *info = ctx->info; + mutex_lock(&info->objc_method_mutex); + defer (mutex_unlock(&info->objc_method_mutex)); + + auto method = ObjcMethodData{ ac, e }; + + if (ac.objc_selector == "") { + method.ac.objc_selector = ac.objc_name; + } + + Array* method_list = map_get(&info->objc_method_implementations, t); + if (method_list) { + array_add(method_list, method); + } else { + auto list = array_make(permanent_allocator(), 1, 8); + list[0] = method; + + map_set(&info->objc_method_implementations, t, list); + } + } + mutex_lock(&global_type_name_objc_metadata_mutex); defer (mutex_unlock(&global_type_name_objc_metadata_mutex)); diff --git a/src/checker.cpp b/src/checker.cpp index 5a5ec9706..29ef7d2b3 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1351,10 +1351,12 @@ gb_internal void init_universal(void) { t_objc_object = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_object"), alloc_type_struct_complete()); t_objc_selector = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_selector"), alloc_type_struct_complete()); t_objc_class = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_class"), alloc_type_struct_complete()); + t_objc_ivar = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_ivar"), alloc_type_struct_complete()); t_objc_id = alloc_type_pointer(t_objc_object); t_objc_SEL = alloc_type_pointer(t_objc_selector); t_objc_Class = alloc_type_pointer(t_objc_class); + t_objc_Ivar = alloc_type_pointer(t_objc_ivar); } } @@ -1387,6 +1389,9 @@ gb_internal void init_checker_info(CheckerInfo *i) { array_init(&i->defineables, a); map_init(&i->objc_msgSend_types); + mpsc_init(&i->objc_class_implementations, a); + map_init(&i->objc_method_implementations); + string_map_init(&i->load_file_cache); array_init(&i->all_procedures, heap_allocator()); @@ -3345,6 +3350,11 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { ac->test = true; return true; } else if (name == "export") { + if (ac->objc_is_implementation) { + error(value, "Setting @(export) explicitly is not allowed when @(objc_implement) is set. It is exported implicitly."); + return false; + } + ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind == ExactValue_Invalid) { ac->is_export = true; @@ -3356,6 +3366,12 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { } return true; } else if (name == "linkage") { + + if (ac->objc_is_implementation) { + error(value, "Explicit linkage not allowed when @(objc_implement) is set. It is set implicitly"); + return false; + } + ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind != ExactValue_String) { error(value, "Expected either a string 'linkage'"); @@ -3662,6 +3678,35 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { } } return true; + } else if (name == "objc_implement") { + ExactValue ev = check_decl_attribute_value(c, value); + if (ev.kind == ExactValue_Bool) { + ac->objc_is_implementation = ev.value_bool; + } else if (ev.kind == ExactValue_Invalid) { + ac->objc_is_implementation = true; + } else { + error(elem, "Expected a boolean value, or no value, for '%.*s'", LIT(name)); + } + + // This implies exported, strongly linked + if (ac->objc_is_implementation) { + ac->is_export = true; + ac->linkage = str_lit("strong"); + } + + return true; + } else if (name == "objc_selector") { + ExactValue ev = check_decl_attribute_value(c, value); + if (ev.kind == ExactValue_String) { + if (string_is_valid_identifier(ev.value_string)) { + ac->objc_selector = ev.value_string; + } else { + error(elem, "Invalid identifier for '%.*s', got '%.*s'", LIT(name), LIT(ev.value_string)); + } + } else { + error(elem, "Expected a string value for '%.*s'", LIT(name)); + } + return true; } else if (name == "require_target_feature") { ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind == ExactValue_String) { @@ -3901,8 +3946,36 @@ gb_internal DECL_ATTRIBUTE_PROC(type_decl_attribute) { ac->objc_class = ev.value_string; } return true; - } - return false; + } else if (name == "objc_implement") { + ExactValue ev = check_decl_attribute_value(c, value); + if (ev.kind == ExactValue_Bool) { + ac->objc_is_implementation = ev.value_bool; + } else if (ev.kind == ExactValue_Invalid) { + ac->objc_is_implementation = true; + } else { + error(elem, "Expected a boolean value, or no value, for '%.*s'", LIT(name)); + } + return true; + } else if (name == "objc_superclass") { + Type *objc_superclass = check_type(c, value); + + if (objc_superclass != nullptr) { + ac->objc_superclass = objc_superclass; + } else { + error(value, "'%.*s' expected a named type", LIT(name)); + } + return true; + } else if (name == "objc_ivar") { + Type *objc_ivar = check_type(c, value); + + if (objc_ivar != nullptr) { + ac->objc_ivar = objc_ivar; + } else { + error(value, "'%.*s' expected a named type", LIT(name)); + } + return true; + } + return false; } diff --git a/src/checker.hpp b/src/checker.hpp index d3b2d7d89..9910ed17b 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -148,8 +148,12 @@ struct AttributeContext { String objc_class; String objc_name; - bool objc_is_class_method; + String objc_selector; Type * objc_type; + Type * objc_superclass; + Type * objc_ivar; + bool objc_is_class_method : 1; + bool objc_is_implementation : 1; // This struct or proc provides a class/method implementation, not a binding to an existing type. String require_target_feature; // required by the target micro-architecture String enable_target_feature; // will be enabled for the procedure only @@ -365,6 +369,11 @@ struct ObjcMsgData { Type *proc_type; }; +struct ObjcMethodData { + AttributeContext ac; + Entity *proc_entity; +}; + enum LoadFileTier { LoadFileTier_Invalid, LoadFileTier_Exists, @@ -479,6 +488,12 @@ struct CheckerInfo { BlockingMutex objc_types_mutex; PtrMap objc_msgSend_types; + MPSCQueue objc_class_implementations; + + BlockingMutex objc_method_mutex; + PtrMap> objc_method_implementations; + + BlockingMutex load_file_mutex; StringMap load_file_cache; diff --git a/src/checker_builtin_procs.hpp b/src/checker_builtin_procs.hpp index 40dde8240..cb2ce3915 100644 --- a/src/checker_builtin_procs.hpp +++ b/src/checker_builtin_procs.hpp @@ -331,6 +331,7 @@ BuiltinProc__type_end, BuiltinProc_objc_find_class, BuiltinProc_objc_register_selector, BuiltinProc_objc_register_class, + BuiltinProc_objc_ivar_get, BuiltinProc_constant_utf16_cstring, @@ -673,6 +674,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = { {STR_LIT("objc_find_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, {STR_LIT("objc_register_selector"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("objc_register_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, + {STR_LIT("ivar_get"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("constant_utf16_cstring"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, diff --git a/src/entity.cpp b/src/entity.cpp index b2148aa7b..9a5996e3d 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -235,6 +235,9 @@ struct Entity { Type * type_parameter_specialization; String ir_mangled_name; bool is_type_alias; + bool objc_is_implementation; + Type* objc_superclass; + Type* objc_ivar; String objc_class_name; TypeNameObjCMetadata *objc_metadata; } TypeName; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 083a1d90e..23ad81847 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1173,6 +1173,332 @@ gb_internal lbProcedure *lb_create_objc_names(lbModule *main_module) { return p; } +// TODO(harold): Move this out of here and into a more suitable place. +// TODO(harold): Should not take an allocator, but always use temp, as we return string literals as well. +String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_depth = 0) { + // NOTE(harold): See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100 + + // NOTE(harold): Darwin targets are always 64-bit. Should we drop this and assume "q" always? + #define INT_SIZE_ENCODING (build_context.metrics.ptr_size == 4 ? "i" : "q") + switch (t->kind) { + case Type_Basic: { + switch (t->Basic.kind) { + case Basic_Invalid: + return str_lit("?"); + + case Basic_llvm_bool: + case Basic_bool: + case Basic_b8: + return str_lit("B"); + + case Basic_b16: + return str_lit("C"); + case Basic_b32: + return str_lit("I"); + case Basic_b64: + return str_lit("q"); + case Basic_i8: + return str_lit("c"); + case Basic_u8: + return str_lit("C"); + case Basic_i16: + case Basic_i16le: + case Basic_i16be: + return str_lit("s"); + case Basic_u16: + case Basic_u16le: + case Basic_u16be: + return str_lit("S"); + case Basic_i32: + case Basic_i32le: + case Basic_i32be: + return str_lit("i"); + case Basic_u32le: + case Basic_u32: + case Basic_u32be: + return str_lit("I"); + case Basic_i64: + case Basic_i64le: + case Basic_i64be: + return str_lit("q"); + case Basic_u64: + case Basic_u64le: + case Basic_u64be: + return str_lit("Q"); + case Basic_i128: + case Basic_i128le: + case Basic_i128be: + return str_lit("t"); + case Basic_u128: + case Basic_u128le: + case Basic_u128be: + return str_lit("T"); + case Basic_rune: + return str_lit("I"); + case Basic_f16: + case Basic_f16le: + case Basic_f16be: + return str_lit("s"); // @harold: Closest we've got? + case Basic_f32: + case Basic_f32le: + case Basic_f32be: + return str_lit("f"); + case Basic_f64: + case Basic_f64le: + case Basic_f64be: + return str_lit("d"); + + // TODO(harold) These: + case Basic_complex32: + case Basic_complex64: + case Basic_complex128: + case Basic_quaternion64: + case Basic_quaternion128: + case Basic_quaternion256: + return str_lit("?"); + + case Basic_int: + return str_lit(INT_SIZE_ENCODING); + case Basic_uint: + return build_context.metrics.ptr_size == 4 ? str_lit("I") : str_lit("Q"); + case Basic_uintptr: + case Basic_rawptr: + return str_lit("^v"); + + case Basic_string: + return build_context.metrics.ptr_size == 4 ? str_lit("{string=*i}") : str_lit("{string=*q}"); + + case Basic_cstring: return str_lit("*"); + case Basic_any: return str_lit("{any=^v^v"); // rawptr + ^Type_Info + + case Basic_typeid: + GB_ASSERT(t->Basic.size == 8); + return str_lit("q"); + + // Untyped types + case Basic_UntypedBool: + case Basic_UntypedInteger: + case Basic_UntypedFloat: + case Basic_UntypedComplex: + case Basic_UntypedQuaternion: + case Basic_UntypedString: + case Basic_UntypedRune: + case Basic_UntypedNil: + case Basic_UntypedUninit: + GB_PANIC("Untyped types cannot be @encoded()"); + return str_lit("?"); + } + break; + } + + case Type_Named: + case Type_Struct: + case Type_Union: { + Type* base = t; + if (base->kind == Type_Named) { + base = base_type(base); + if(base->kind != Type_Struct && base->kind != Type_Union) { + return lb_get_objc_type_encoding(base, allocator, pointer_depth); + } + } + + const bool is_union = base->kind == Type_Union; + if (!is_union) { + // Check for objc_SEL + if (internal_check_is_assignable_to(base, t_objc_SEL)) { + return str_lit(":"); + } + + // Check for objc_Class + if (internal_check_is_assignable_to(base, t_objc_SEL)) { + return str_lit("#"); + } + + // Treat struct as an Objective-C Class? + if (has_type_got_objc_class_attribute(base) && pointer_depth == 0) { + return str_lit("#"); + } + } + + if (is_type_objc_object(base)) { + return str_lit("@"); + } + + + gbString s = gb_string_make_reserve(allocator, 16); + s = gb_string_append_length(s, is_union ? "(" :"{", 1); + if (t->kind == Type_Named) { + s = gb_string_append_length(s, t->Named.name.text, t->Named.name.len); + } + + // Write fields + if (pointer_depth < 2) { + s = gb_string_append_length(s, "=", 1); + + if (!is_union) { + for( auto& f : t->Struct.fields ) { + String field_type = lb_get_objc_type_encoding(f->type, allocator, pointer_depth); + s = gb_string_append_length(s, field_type.text, field_type.len); + } + } else { + // #TODO(harold): Encode fields + } + } + + s = gb_string_append_length(s, is_union ? ")" :"}", 1); + + return make_string_c(s); + } + + case Type_Generic: + GB_PANIC("Generic types cannot be @encoded()"); + return str_lit("?"); + + case Type_Pointer: { + String pointee = lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1); + // Special case for Objective-C Objects + if (pointer_depth == 0 && pointee == "@") { + return pointee; + } + + return concatenate_strings(allocator, str_lit("^"), pointee); + } + + case Type_MultiPointer: + return concatenate_strings(allocator, str_lit("^"), lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1)); + + case Type_Array: { + String type_str = lb_get_objc_type_encoding(t->Array.elem, allocator, pointer_depth); + + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "[%lld%s]", t->Array.count, type_str.text); + return make_string_c(s); + } + + case Type_EnumeratedArray: { + String type_str = lb_get_objc_type_encoding(t->EnumeratedArray.elem, allocator, pointer_depth); + + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "[%lld%s]", t->EnumeratedArray.count, type_str.text); + return make_string_c(s); + } + + case Type_Slice: { + String type_str = lb_get_objc_type_encoding(t->Slice.elem, allocator, pointer_depth); + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "{slice=^%s%s}", type_str, INT_SIZE_ENCODING); + return make_string_c(s); + } + + case Type_DynamicArray: { + String type_str = lb_get_objc_type_encoding(t->DynamicArray.elem, allocator, pointer_depth); + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "{dynamic=^%s%s%sAllocator={?^v}}", type_str, INT_SIZE_ENCODING, INT_SIZE_ENCODING); + return make_string_c(s); + } + + case Type_Map: + return str_lit("{^v^v{Allocator=?^v}}"); + case Type_Enum: + return lb_get_objc_type_encoding(t->Enum.base_type, allocator, pointer_depth); + case Type_Tuple: + // NOTE(harold): Is this allowed here? + return str_lit("?"); + case Type_Proc: + return str_lit("?"); + case Type_BitSet: + return lb_get_objc_type_encoding(t->BitSet.underlying, allocator, pointer_depth); + case Type_SimdVector: + break; + case Type_Matrix: + break; + case Type_BitField: + return lb_get_objc_type_encoding(t->BitField.backing_type, allocator, pointer_depth); + case Type_SoaPointer: { + gbString s = gb_string_make_reserve(allocator, 8); + s = gb_string_append_fmt(s, "{=^v%s}", INT_SIZE_ENCODING); + return make_string_c(s); + } + + } // End switch t->kind + #undef INT_SIZE_ENCODING + + GB_PANIC("Unreachable"); +} + +struct lbObjCGlobalClass { + lbObjCGlobal g; + lbValue class_value; // Local registered class value +}; + +gb_internal void lb_register_objc_thing( + StringSet &handled, + lbModule *m, + Array &args, + Array &class_impls, + StringMap &class_map, + lbProcedure *p, + lbObjCGlobal const &g, + char const *call +) { + if (string_set_update(&handled, g.name)) { + return; + } + + lbAddr addr = {}; + lbValue *found = string_map_get(&m->members, g.global_name); + if (found) { + addr = lb_addr(*found); + } else { + lbValue v = {}; + LLVMTypeRef t = lb_type(m, g.type); + v.value = LLVMAddGlobal(m->mod, t, g.global_name); + v.type = alloc_type_pointer(g.type); + addr = lb_addr(v); + LLVMSetInitializer(v.value, LLVMConstNull(t)); + } + + lbValue class_ptr{}; + lbValue class_name = lb_const_value(m, t_cstring, exact_value_string(g.name)); + + // If this class requires an implementation, save it for registration below. + if (g.class_impl_type != nullptr) { + + // Make sure the superclass has been initialized before us + lbValue superclass_value{}; + + auto& tn = g.class_impl_type->Named.type_name->TypeName; + Type *superclass = tn.objc_superclass; + if (superclass != nullptr) { + auto& superclass_global = string_map_must_get(&class_map, superclass->Named.type_name->TypeName.objc_class_name); + lb_register_objc_thing(handled, m, args, class_impls, class_map, p, superclass_global.g, call); + GB_ASSERT(superclass_global.class_value.value); + + superclass_value = superclass_global.class_value; + } + + args.count = 3; + args[0] = superclass == nullptr ? lb_const_nil(m, t_objc_Class) : superclass_value; + args[1] = class_name; + args[2] = lb_const_int(m, t_uint, 0); + class_ptr = lb_emit_runtime_call(p, "objc_allocateClassPair", args); + + array_add(&class_impls, lbObjCGlobalClass{g, class_ptr}); + } + else { + args.count = 1; + args[0] = class_name; + class_ptr = lb_emit_runtime_call(p, call, args); + } + + lb_addr_store(p, addr, class_ptr); + + lbObjCGlobalClass* class_global = string_map_get(&class_map, g.name); + if (class_global != nullptr) { + class_global->class_value = class_ptr; + } +} + gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { if (p == nullptr) { return; @@ -1186,39 +1512,238 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { string_set_init(&handled); defer (string_set_destroy(&handled)); - auto args = array_make(temporary_allocator(), 1); + auto args = array_make(temporary_allocator(), 3, 8); + auto class_impls = array_make(temporary_allocator(), 0, 16); - LLVMSetLinkage(p->value, LLVMInternalLinkage); - lb_begin_procedure_body(p); + // Ensure classes that have been implicitly referenced through + // the objc_superclass attribute have a global variable available for them. + TypeSet class_set{}; + type_set_init(&class_set, gen->objc_classes.count+16); + defer (type_set_destroy(&class_set)); - auto register_thing = [&handled, &m, &args](lbProcedure *p, lbObjCGlobal const &g, char const *call) { - if (!string_set_update(&handled, g.name)) { - lbAddr addr = {}; - lbValue *found = string_map_get(&m->members, g.global_name); - if (found) { - addr = lb_addr(*found); - } else { - lbValue v = {}; - LLVMTypeRef t = lb_type(m, g.type); - v.value = LLVMAddGlobal(m->mod, t, g.global_name); - v.type = alloc_type_pointer(g.type); - addr = lb_addr(v); - LLVMSetInitializer(v.value, LLVMConstNull(t)); - } + auto referenced_classes = array_make(temporary_allocator()); + for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { + array_add( &referenced_classes, g); - args[0] = lb_const_value(m, t_cstring, exact_value_string(g.name)); - lbValue ptr = lb_emit_runtime_call(p, call, args); - lb_addr_store(p, addr, ptr); - } - }; + Type *cls = g.class_impl_type; + while (cls) { + if (type_set_update(&class_set, cls)) { + break; + } + GB_ASSERT(cls->kind == Type_Named); - for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { - register_thing(p, g, "objc_lookUpClass"); - } + cls = cls->Named.type_name->TypeName.objc_superclass; + } + } - for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_selectors, &g); /**/) { - register_thing(p, g, "sel_registerName"); - } + for (auto pair : class_set) { + auto& tn = pair.type->Named.type_name->TypeName; + Type *class_impl = !tn.objc_is_implementation ? nullptr : pair.type; + lb_handle_objc_find_or_register_class(p, tn.objc_class_name, class_impl); + } + for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { + array_add( &referenced_classes, g ); + } + + // Add all class globals to a map so that we can look them up dynamically + // in order to resolve out-of-order because classes that are being implemented + // need their superclasses to have been registered before them. + StringMap global_class_map{}; + string_map_init(&global_class_map, (usize)gen->objc_classes.count); + defer (string_map_destroy(&global_class_map)); + + for (lbObjCGlobal g :referenced_classes) { + string_map_set(&global_class_map, g.name, lbObjCGlobalClass{g}); + } + + LLVMSetLinkage(p->value, LLVMInternalLinkage); + lb_begin_procedure_body(p); + + // Register class globals, gathering classes that must be implemented + for (auto& kv : global_class_map) { + lb_register_objc_thing(handled, m, args, class_impls, global_class_map, p, kv.value.g, "objc_lookUpClass"); + } + + // Prefetch selectors for implemented methods so that they can also be registered. + for (const auto& cd : class_impls) { + auto& g = cd.g; + Type *class_type = g.class_impl_type; + + Array* methods = map_get(&m->info->objc_method_implementations, class_type); + if (!methods) { + continue; + } + + for (const ObjcMethodData& md : *methods) { + lb_handle_objc_find_or_register_selector(p, md.ac.objc_selector); + } + } + + // Now we can register all referenced selectors + for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_selectors, &g); /**/) { + lb_register_objc_thing(handled, m, args, class_impls, global_class_map, p, g, "sel_registerName"); + } + + + // Emit method wrapper implementations and registration + auto wrapper_args = array_make(temporary_allocator(), 2, 8); + + for (const auto& cd : class_impls) { + auto& g = cd.g; + Type *class_type = g.class_impl_type; + + Array* methods = map_get(&m->info->objc_method_implementations, class_type); + if (!methods) { + continue; + } + + Type *class_ptr_type = alloc_type_pointer(class_type); + lbValue class_value = cd.class_value; + + for (const ObjcMethodData& md : *methods) { + GB_ASSERT( md.proc_entity->kind == Entity_Procedure); + Type *method_type = md.proc_entity->type; + + String proc_name = make_string_c("__$objc_method::"); + proc_name = concatenate_strings(temporary_allocator(), proc_name, g.name); + proc_name = concatenate_strings(temporary_allocator(), proc_name, str_lit("::")); + proc_name = concatenate_strings( permanent_allocator(), proc_name, md.ac.objc_name); + + wrapper_args.count = 2; + wrapper_args[0] = md.ac.objc_is_class_method ? t_objc_Class : class_ptr_type; + wrapper_args[1] = t_objc_SEL; + + auto method_param_count = (isize)method_type->Proc.param_count; + i32 method_param_offset = 0; + + // TODO(harold): Need to make sure (at checker stage) that the non-class method has the self parameter already. + // (Maybe this is already accounted for?.) + if (!md.ac.objc_is_class_method) { + GB_ASSERT(method_param_count >= 1); + method_param_count -= 1; + method_param_offset = 1; + } + + for (i32 i = 0; i < method_param_count; i++) { + array_add(&wrapper_args, method_type->Proc.params->Tuple.variables[method_param_offset+i]->type); + } + + Type *wrapper_args_tuple = alloc_type_tuple_from_field_types(wrapper_args.data, wrapper_args.count, false, true); + Type *wrapper_proc_type = alloc_type_proc(nullptr, wrapper_args_tuple, (isize)wrapper_args_tuple->Tuple.variables.count, nullptr, 0, false, ProcCC_CDecl); + + lbProcedure *wrapper_proc = lb_create_dummy_procedure(m, proc_name, wrapper_proc_type); + lb_add_attribute_to_proc(wrapper_proc->module, wrapper_proc->value, "nounwind"); + + // Emit the wrapper + LLVMSetLinkage(wrapper_proc->value, LLVMExternalLinkage); + lb_begin_procedure_body(wrapper_proc); + { + auto method_call_args = array_make(temporary_allocator(), method_param_count + (isize)method_param_offset); + + if (!md.ac.objc_is_class_method) { + method_call_args[0] = lbValue { + wrapper_proc->raw_input_parameters[0], + class_ptr_type, + }; + } + + for (isize i = 0; i < method_param_count; i++) { + method_call_args[i+method_param_offset] = lbValue { + wrapper_proc->raw_input_parameters[i+2], + method_type->Proc.params->Tuple.variables[i+method_param_offset]->type, + }; + } + lbValue method_proc_value = lb_find_procedure_value_from_entity(m, md.proc_entity); + + // Call real procedure for method from here, passing the parameters expected, if any. + lb_emit_call(wrapper_proc, method_proc_value, method_call_args); + } + lb_end_procedure_body(wrapper_proc); + + + // Add the method to the class + String method_encoding = str_lit("v"); + // TODO (harold): Checker must ensure that objc_methods have a single return value or none! + GB_ASSERT(method_type->Proc.result_count <= 1); + if (method_type->Proc.result_count != 0) { + method_encoding = lb_get_objc_type_encoding(method_type->Proc.results->Tuple.variables[0]->type, temporary_allocator()); + } + + if (!md.ac.objc_is_class_method) { + method_encoding = concatenate_strings(temporary_allocator(), method_encoding, str_lit("@:")); + } else { + method_encoding = concatenate_strings(temporary_allocator(), method_encoding, str_lit("#:")); + } + + for (i32 i = method_param_offset; i < method_param_count; i++) { + Type *param_type = method_type->Proc.params->Tuple.variables[i]->type; + String param_encoding = lb_get_objc_type_encoding(param_type, temporary_allocator()); + + method_encoding = concatenate_strings(temporary_allocator(), method_encoding, param_encoding); + } + + // Emit method registration + lbAddr* sel_address = string_map_get(&m->objc_selectors, md.ac.objc_selector); + GB_ASSERT(sel_address); + lbValue selector_value = lb_addr_load(p, *sel_address); + + args.count = 4; + args[0] = class_value; // Class + args[1] = selector_value; // SEL + args[2] = lbValue { wrapper_proc->value, wrapper_proc->type }; + args[3] = lb_const_value(m, t_cstring, exact_value_string(method_encoding)); + + // TODO(harold): Emit check BOOL result and panic if false. + lb_emit_runtime_call(p, "class_addMethod", args); + + } // End methods + + // Add ivar if we have one + Type *ivar_type = class_type->Named.type_name->TypeName.objc_ivar; + if (ivar_type != nullptr) { + // Register a single ivar for this class + Type *ivar_base = ivar_type->Named.base; + // TODO(harold): No idea if I can use this, but I assume so? + const i64 size = ivar_base->cached_size; + const i64 alignment = ivar_base->cached_align; + // TODO(harold): Checker: Alignment must be compatible with ivar rules. Or we should increase the alignment if needed. + + String ivar_name = str_lit("__$ivar"); + String ivar_types = str_lit("{= }"); + args.count = 5; + args[0] = class_value; + args[1] = lb_const_value(m, t_cstring, exact_value_string(ivar_name)); + args[2] = lb_const_value(m, t_uint, exact_value_u64((u64)size)); + args[3] = lb_const_value(m, t_u8, exact_value_u64((u64)alignment)); + args[4] = lb_const_value(m, t_cstring, exact_value_string(ivar_types)); + lb_emit_runtime_call(p, "class_addIvar", args); + } + + // Complete the class registration + args.count = 1; + args[0] = class_value; + lb_emit_runtime_call(p, "objc_registerClassPair", args); + + // If we have an ivar, store its offset globally for an intrinsic + // TODO(harold): Only do this for types that had ivar_get calls registered! + if (ivar_type != nullptr) { + args.count = 2; + args[0] = class_value; + args[1] = lb_const_value(m, t_cstring, exact_value_string(str_lit("__$ivar"))); + lbValue ivar = lb_emit_runtime_call(p, "class_getInstanceVariable", args); + + args.count = 1; + args[0] = ivar; + lbValue ivar_offset = lb_emit_runtime_call(p, "ivar_getOffset", args); + lbValue ivar_offset_u32 = lb_emit_conv(p, ivar_offset, t_u32); + + String class_name = class_type->Named.type_name->TypeName.objc_class_name; + // TODO(harold): Oops! This is wrong, that map is there to prevent re-entry. + // Simply emit from referred ivars. For now use a single module only. + lbAddr ivar_addr = string_map_must_get(&m->objc_ivars, class_name); + lb_addr_store(p, ivar_addr, ivar_offset_u32); + } + } lb_end_procedure_body(p); } diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 6177fcf6e..7694c65c3 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -196,6 +196,7 @@ struct lbModule { StringMap objc_classes; StringMap objc_selectors; + StringMap objc_ivars; PtrMap map_cell_info_map; // address of runtime.Map_Info PtrMap map_info_map; // address of runtime.Map_Cell_Info @@ -219,6 +220,7 @@ struct lbObjCGlobal { gbString global_name; String name; Type * type; + Type * class_impl_type; // This is set when the class has the objc_implement attribute set to true. }; struct lbGenerator : LinkerData { @@ -240,6 +242,7 @@ struct lbGenerator : LinkerData { MPSCQueue entities_to_correct_linkage; MPSCQueue objc_selectors; MPSCQueue objc_classes; + MPSCQueue objc_ivars; }; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 421720c4c..7f012e006 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -101,6 +101,7 @@ gb_internal void lb_init_module(lbModule *m, Checker *c) { string_map_init(&m->objc_classes); string_map_init(&m->objc_selectors); + string_map_init(&m->objc_ivars); map_init(&m->map_info_map, 0); map_init(&m->map_cell_info_map, 0); @@ -173,6 +174,7 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { mpsc_init(&gen->entities_to_correct_linkage, heap_allocator()); mpsc_init(&gen->objc_selectors, heap_allocator()); mpsc_init(&gen->objc_classes, heap_allocator()); + mpsc_init(&gen->objc_ivars, heap_allocator()); return true; } diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 3212abd9a..bf4ebf377 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -3290,6 +3290,7 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu case BuiltinProc_objc_find_class: return lb_handle_objc_find_class(p, expr); case BuiltinProc_objc_register_selector: return lb_handle_objc_register_selector(p, expr); case BuiltinProc_objc_register_class: return lb_handle_objc_register_class(p, expr); + case BuiltinProc_objc_ivar_get: return lb_handle_objc_ivar_get(p, expr); case BuiltinProc_constant_utf16_cstring: diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index bfeebfcbe..897b71b5b 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -2125,7 +2125,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_selector(lbProcedure *p, Stri return addr; } -gb_internal lbAddr lb_handle_objc_find_or_register_class(lbProcedure *p, String const &name) { +gb_internal lbAddr lb_handle_objc_find_or_register_class(lbProcedure *p, String const &name, Type *class_impl_type) { lbModule *m = p->module; lbAddr *found = string_map_get(&m->objc_classes, name); if (found) { @@ -2148,13 +2148,72 @@ gb_internal lbAddr lb_handle_objc_find_or_register_class(lbProcedure *p, String } else { LLVMSetLinkage(g.value, LLVMExternalLinkage); } - mpsc_enqueue(&m->gen->objc_classes, lbObjCGlobal{m, global_name, name, t_objc_Class}); + mpsc_enqueue(&m->gen->objc_classes, lbObjCGlobal{m, global_name, name, t_objc_Class, class_impl_type}); lbAddr addr = lb_addr(g); string_map_set(&m->objc_classes, name, addr); return addr; } +gb_internal lbAddr lb_handle_objc_find_or_register_ivar(lbModule *m, Type *self_type) { + + String name = self_type->Named.type_name->TypeName.objc_class_name; + GB_ASSERT(name != ""); + + lbAddr *found = string_map_get(&m->objc_ivars, name); + if (found) { + return *found; + } + + + lbModule *default_module = &m->gen->default_module; + + gbString global_name = gb_string_make(permanent_allocator(), "__$objc_ivar::"); + global_name = gb_string_append_length(global_name, name.text, name.len); + + // Create a global variable to store offset of the ivar in an instance of an object + Type *p_ivar_offset = alloc_type_pointer(t_u32); + + LLVMTypeRef t = lb_type(m, p_ivar_offset); + lbValue g = {}; + g.value = LLVMAddGlobal(m->mod, t, global_name); + g.type = p_ivar_offset; + + if (default_module == m) { + LLVMSetInitializer(g.value, LLVMConstNull(t)); + lb_add_member(m, make_string_c(global_name), g); + } else { + LLVMSetLinkage(g.value, LLVMExternalLinkage); + } + + mpsc_enqueue(&m->gen->objc_ivars, lbObjCGlobal{m, global_name, name, self_type}); + + lbAddr addr = lb_addr(g); + string_map_set(&m->objc_ivars, name, addr); + return addr; +} + +gb_internal lbValue lb_handle_objc_ivar_get(lbProcedure *p, Ast *expr) { + ast_node(ce, CallExpr, expr); + lbModule *m = p->module; + + GB_ASSERT(ce->args[0]->tav.type->kind == Type_Pointer); + Type *self_type = ce->args[0]->tav.type->Pointer.elem; + Type *ivar_type = self_type->Named.type_name->TypeName.objc_ivar; + + Type* p_ivar = alloc_type_pointer(ivar_type); + + lbValue ivar_offset = lb_addr_load(p, lb_handle_objc_find_or_register_ivar(m, self_type)); + lbValue ivar_offset_uptr = lb_emit_conv(p, ivar_offset, t_uintptr); + + lbValue self = lb_build_expr(p, ce->args[0]); + lbValue self_uptr = lb_emit_conv(p, self, t_uintptr); + + lbValue ivar_uptr = lb_emit_arith(p, Token_Add, self_uptr, ivar_offset_uptr, t_uintptr); + + return lb_emit_conv(p, ivar_uptr, p_ivar); +} + gb_internal lbValue lb_handle_objc_find_selector(lbProcedure *p, Ast *expr) { ast_node(ce, CallExpr, expr); @@ -2188,7 +2247,7 @@ gb_internal lbValue lb_handle_objc_find_class(lbProcedure *p, Ast *expr) { auto tav = ce->args[0]->tav; GB_ASSERT(tav.value.kind == ExactValue_String); String name = tav.value.value_string; - return lb_addr_load(p, lb_handle_objc_find_or_register_class(p, name)); + return lb_addr_load(p, lb_handle_objc_find_or_register_class(p, name, nullptr)); } gb_internal lbValue lb_handle_objc_register_class(lbProcedure *p, Ast *expr) { @@ -2198,7 +2257,7 @@ gb_internal lbValue lb_handle_objc_register_class(lbProcedure *p, Ast *expr) { auto tav = ce->args[0]->tav; GB_ASSERT(tav.value.kind == ExactValue_String); String name = tav.value.value_string; - lbAddr dst = lb_handle_objc_find_or_register_class(p, name); + lbAddr dst = lb_handle_objc_find_or_register_class(p, name, nullptr); auto args = array_make(permanent_allocator(), 3); args[0] = lb_const_nil(m, t_objc_Class); @@ -2220,7 +2279,9 @@ gb_internal lbValue lb_handle_objc_id(lbProcedure *p, Ast *expr) { GB_ASSERT(e->kind == Entity_TypeName); String name = e->TypeName.objc_class_name; - return lb_addr_load(p, lb_handle_objc_find_or_register_class(p, name)); + Type *class_impl_type = e->TypeName.objc_is_implementation ? type : nullptr; + + return lb_addr_load(p, lb_handle_objc_find_or_register_class(p, name, class_impl_type)); } return lb_build_expr(p, expr); @@ -2266,9 +2327,6 @@ gb_internal lbValue lb_handle_objc_send(lbProcedure *p, Ast *expr) { return lb_emit_call(p, the_proc, args); } - - - gb_internal LLVMAtomicOrdering llvm_atomic_ordering_from_odin(ExactValue const &value) { GB_ASSERT(value.kind == ExactValue_Integer); i64 v = exact_value_to_i64(value); diff --git a/src/types.cpp b/src/types.cpp index 9c9472a28..1b2545279 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -729,10 +729,12 @@ gb_global Type *t_map_set_proc = nullptr; gb_global Type *t_objc_object = nullptr; gb_global Type *t_objc_selector = nullptr; gb_global Type *t_objc_class = nullptr; +gb_global Type *t_objc_ivar = nullptr; gb_global Type *t_objc_id = nullptr; gb_global Type *t_objc_SEL = nullptr; gb_global Type *t_objc_Class = nullptr; +gb_global Type *t_objc_Ivar = nullptr; enum OdinAtomicMemoryOrder : i32 { OdinAtomicMemoryOrder_relaxed = 0, // unordered From b3b4d501ca6c1af70c0ceef7610f6c5d83a2d296 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Mon, 21 Apr 2025 02:42:02 -0400 Subject: [PATCH 003/120] Fix ivar in multi-module mode. --- src/llvm_backend.cpp | 69 +++++++++++++++++++++++++----------- src/llvm_backend_utility.cpp | 14 ++++---- 2 files changed, 54 insertions(+), 29 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 23ad81847..ef975b8c1 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1588,6 +1588,13 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // Emit method wrapper implementations and registration auto wrapper_args = array_make(temporary_allocator(), 2, 8); + PtrMap ivar_map{}; + map_init(&ivar_map, gen->objc_ivars.count); + + for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_ivars, &g); /**/) { + map_set(&ivar_map, g.class_impl_type, g); + } + for (const auto& cd : class_impls) { auto& g = cd.g; Type *class_type = g.class_impl_type; @@ -1700,7 +1707,9 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // Add ivar if we have one Type *ivar_type = class_type->Named.type_name->TypeName.objc_ivar; - if (ivar_type != nullptr) { + lbObjCGlobal *g_ivar = map_get(&ivar_map, class_type); + + if (ivar_type != nullptr && g_ivar != nullptr) { // Register a single ivar for this class Type *ivar_base = ivar_type->Named.base; // TODO(harold): No idea if I can use this, but I assume so? @@ -1723,28 +1732,46 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { args.count = 1; args[0] = class_value; lb_emit_runtime_call(p, "objc_registerClassPair", args); - - // If we have an ivar, store its offset globally for an intrinsic - // TODO(harold): Only do this for types that had ivar_get calls registered! - if (ivar_type != nullptr) { - args.count = 2; - args[0] = class_value; - args[1] = lb_const_value(m, t_cstring, exact_value_string(str_lit("__$ivar"))); - lbValue ivar = lb_emit_runtime_call(p, "class_getInstanceVariable", args); - - args.count = 1; - args[0] = ivar; - lbValue ivar_offset = lb_emit_runtime_call(p, "ivar_getOffset", args); - lbValue ivar_offset_u32 = lb_emit_conv(p, ivar_offset, t_u32); - - String class_name = class_type->Named.type_name->TypeName.objc_class_name; - // TODO(harold): Oops! This is wrong, that map is there to prevent re-entry. - // Simply emit from referred ivars. For now use a single module only. - lbAddr ivar_addr = string_map_must_get(&m->objc_ivars, class_name); - lb_addr_store(p, ivar_addr, ivar_offset_u32); - } } + // Register ivars + Type *ptr_u32 = alloc_type_pointer(t_u32); + for (auto const& kv : ivar_map) { + lbObjCGlobal const& g = kv.value; + lbAddr ivar_addr = {}; + lbValue *found = string_map_get(&m->members, g.global_name); + + if (found) { + ivar_addr = lb_addr(*found); + } else { + // Defined in an external package, must define now + LLVMTypeRef t = lb_type(m, t_u32); + + lbValue global{}; + global.value = LLVMAddGlobal(m->mod, t, g.global_name); + global.type = ptr_u32; + + LLVMSetInitializer(global.value, LLVMConstInt(t, 0, true)); + + ivar_addr = lb_addr(global); + } + + String class_name = g.class_impl_type->Named.type_name->TypeName.objc_class_name; + lbValue class_value = string_map_must_get(&global_class_map, class_name).class_value; + + args.count = 2; + args[0] = class_value; + args[1] = lb_const_value(m, t_cstring, exact_value_string(str_lit("__$ivar"))); + lbValue ivar = lb_emit_runtime_call(p, "class_getInstanceVariable", args); + + args.count = 1; + args[0] = ivar; + lbValue ivar_offset = lb_emit_runtime_call(p, "ivar_getOffset", args); + lbValue ivar_offset_u32 = lb_emit_conv(p, ivar_offset, t_u32); + + lb_addr_store(p, ivar_addr, ivar_offset_u32); + } + lb_end_procedure_body(p); } diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 897b71b5b..ae7842ce6 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -2165,28 +2165,26 @@ gb_internal lbAddr lb_handle_objc_find_or_register_ivar(lbModule *m, Type *self_ return *found; } - lbModule *default_module = &m->gen->default_module; gbString global_name = gb_string_make(permanent_allocator(), "__$objc_ivar::"); global_name = gb_string_append_length(global_name, name.text, name.len); // Create a global variable to store offset of the ivar in an instance of an object - Type *p_ivar_offset = alloc_type_pointer(t_u32); + LLVMTypeRef t = lb_type(m, t_u32); - LLVMTypeRef t = lb_type(m, p_ivar_offset); lbValue g = {}; g.value = LLVMAddGlobal(m->mod, t, global_name); - g.type = p_ivar_offset; + g.type = alloc_type_pointer(t_u32); if (default_module == m) { - LLVMSetInitializer(g.value, LLVMConstNull(t)); + LLVMSetInitializer(g.value, LLVMConstInt(t, 0, true)); lb_add_member(m, make_string_c(global_name), g); } else { LLVMSetLinkage(g.value, LLVMExternalLinkage); } - mpsc_enqueue(&m->gen->objc_ivars, lbObjCGlobal{m, global_name, name, self_type}); + mpsc_enqueue(&m->gen->objc_ivars, lbObjCGlobal{m, global_name, name, t_u32, self_type}); lbAddr addr = lb_addr(g); string_map_set(&m->objc_ivars, name, addr); @@ -2206,8 +2204,8 @@ gb_internal lbValue lb_handle_objc_ivar_get(lbProcedure *p, Ast *expr) { lbValue ivar_offset = lb_addr_load(p, lb_handle_objc_find_or_register_ivar(m, self_type)); lbValue ivar_offset_uptr = lb_emit_conv(p, ivar_offset, t_uintptr); - lbValue self = lb_build_expr(p, ce->args[0]); - lbValue self_uptr = lb_emit_conv(p, self, t_uintptr); + lbValue self = lb_build_expr(p, ce->args[0]); + lbValue self_uptr = lb_emit_conv(p, self, t_uintptr); lbValue ivar_uptr = lb_emit_arith(p, Token_Add, self_uptr, ivar_offset_uptr, t_uintptr); From bca02f81cd5affa288bac0cc0ed08fe730072aec Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Tue, 22 Apr 2025 19:16:29 -0400 Subject: [PATCH 004/120] Include the ivar in the Objective-C class unconditionally of it being used or not. Allow pseudo-fields for ivar access. --- src/llvm_backend.cpp | 5 ++--- src/llvm_backend_expr.cpp | 32 ++++++++++++++++++++++++-------- src/llvm_backend_utility.cpp | 33 +++++++++++++++++++-------------- src/types.cpp | 9 +++++++++ 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index ef975b8c1..257625849 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1707,9 +1707,8 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // Add ivar if we have one Type *ivar_type = class_type->Named.type_name->TypeName.objc_ivar; - lbObjCGlobal *g_ivar = map_get(&ivar_map, class_type); - if (ivar_type != nullptr && g_ivar != nullptr) { + if (ivar_type != nullptr) { // Register a single ivar for this class Type *ivar_base = ivar_type->Named.base; // TODO(harold): No idea if I can use this, but I assume so? @@ -1734,7 +1733,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { lb_emit_runtime_call(p, "objc_registerClassPair", args); } - // Register ivars + // Register ivar offsets for any `objc_ivar_get` expressions emitted. Type *ptr_u32 = alloc_type_pointer(t_u32); for (auto const& kv : ivar_map) { lbObjCGlobal const& g = kv.value; diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index c5ea0ddac..b9c01ad03 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -5138,8 +5138,6 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { return lb_build_addr(p, unparen_expr(se->selector)); } - - Type *type = base_type(tav.type); if (tav.mode == Addressing_Type) { // Addressing_Type Selection sel = lookup_field(tav.type, selector, true); if (sel.pseudo_field) { @@ -5174,18 +5172,37 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { return lb_addr_swizzle(a, type, swizzle_count, swizzle_indices); } - Selection sel = lookup_field(type, selector, false); + Selection sel = lookup_field(tav.type, selector, false); GB_ASSERT(sel.entity != nullptr); - if (sel.pseudo_field) { - GB_ASSERT(sel.entity->kind == Entity_Procedure || sel.entity->kind == Entity_ProcGroup); + if (sel.pseudo_field && (sel.entity->kind == Entity_Procedure || sel.entity->kind == Entity_ProcGroup)) { + // GB_ASSERT(sel.entity->kind == Entity_Procedure || sel.entity->kind == Entity_ProcGroup); Entity *e = entity_of_node(sel_node); GB_ASSERT(e->kind == Entity_Procedure); return lb_addr(lb_find_value_from_entity(p->module, e)); } - if (sel.is_bit_field) { - lbAddr addr = lb_build_addr(p, se->expr); + lbAddr addr = lb_build_addr(p, se->expr); + // TODO(harold): Ensure objc_ivar is always null when objc_implement is not set! + Type *d_type = type_deref(tav.type); //base_type(tav.type); + if (d_type->kind == Type_Named && d_type->Named.type_name->TypeName.objc_ivar) { + // NOTE(harold): We need to load the ivar from the current address and + // replace addr with the loaded ivar addr to apply the selector load properly. + + // If it's a deep pointer, dereference it first + // TODO(harold): Ensure this is save to do here. lb_emit_deep_field_gep() has several derefs, once per index. + // Not sure what multiple indices represent... + Type* type = tav.type; + if (is_type_pointer(type)) { + type = type_deref(type); + addr = lb_addr(lb_emit_load(p, addr.addr)); + } + + lbValue ivar_ptr = lb_handle_objc_ivar_for_objc_object_pointer(p, addr.addr); + addr = lb_addr(ivar_ptr); + } + + if (sel.is_bit_field) { Selection sub_sel = sel; sub_sel.index.count -= 1; @@ -5211,7 +5228,6 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { } { - lbAddr addr = lb_build_addr(p, se->expr); if (addr.kind == lbAddr_Map) { lbValue v = lb_addr_load(p, addr); lbValue a = lb_address_from_load_or_generate_local(p, v); diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index ae7842ce6..33211395a 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -2191,25 +2191,30 @@ gb_internal lbAddr lb_handle_objc_find_or_register_ivar(lbModule *m, Type *self_ return addr; } +gb_internal lbValue lb_handle_objc_ivar_for_objc_object_pointer(lbProcedure *p, lbValue self) { + GB_ASSERT(self.type->kind == Type_Pointer && self.type->Pointer.elem->kind == Type_Named); + + Type *self_type = self.type->Pointer.elem; + + lbValue self_uptr = lb_emit_conv(p, self, t_uintptr); + + lbValue ivar_offset = lb_addr_load(p, lb_handle_objc_find_or_register_ivar(p->module, self_type)); + lbValue ivar_offset_uptr = lb_emit_conv(p, ivar_offset, t_uintptr); + + + lbValue ivar_uptr = lb_emit_arith(p, Token_Add, self_uptr, ivar_offset_uptr, t_uintptr); + + Type *ivar_type = self_type->Named.type_name->TypeName.objc_ivar; + return lb_emit_conv(p, ivar_uptr, alloc_type_pointer(ivar_type)); +} + gb_internal lbValue lb_handle_objc_ivar_get(lbProcedure *p, Ast *expr) { ast_node(ce, CallExpr, expr); - lbModule *m = p->module; GB_ASSERT(ce->args[0]->tav.type->kind == Type_Pointer); - Type *self_type = ce->args[0]->tav.type->Pointer.elem; - Type *ivar_type = self_type->Named.type_name->TypeName.objc_ivar; + lbValue self = lb_build_expr(p, ce->args[0]); - Type* p_ivar = alloc_type_pointer(ivar_type); - - lbValue ivar_offset = lb_addr_load(p, lb_handle_objc_find_or_register_ivar(m, self_type)); - lbValue ivar_offset_uptr = lb_emit_conv(p, ivar_offset, t_uintptr); - - lbValue self = lb_build_expr(p, ce->args[0]); - lbValue self_uptr = lb_emit_conv(p, self, t_uintptr); - - lbValue ivar_uptr = lb_emit_arith(p, Token_Add, self_uptr, ivar_offset_uptr, t_uintptr); - - return lb_emit_conv(p, ivar_uptr, p_ivar); + return lb_handle_objc_ivar_for_objc_object_pointer(p, self); } gb_internal lbValue lb_handle_objc_find_selector(lbProcedure *p, Ast *expr) { diff --git a/src/types.cpp b/src/types.cpp index 1b2545279..96c17f49a 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3329,6 +3329,15 @@ gb_internal Selection lookup_field_with_selection(Type *type_, String field_name } } } + + Type *objc_ivar_type = e->TypeName.objc_ivar; + if (objc_ivar_type != nullptr) { + sel = lookup_field_with_selection(objc_ivar_type, field_name, false, sel, allow_blank_ident); + if (sel.entity != nullptr) { + sel.pseudo_field = true; + return sel; + } + } } if (is_type_polymorphic(type)) { From 53adff38f08f676bf2e9c40de9040a59c9a8fda6 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Tue, 22 Apr 2025 21:44:32 -0400 Subject: [PATCH 005/120] Fixes to Ivar pseudo fields. --- src/llvm_backend_expr.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index b9c01ad03..cc49a7be8 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -5192,7 +5192,13 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { // If it's a deep pointer, dereference it first // TODO(harold): Ensure this is save to do here. lb_emit_deep_field_gep() has several derefs, once per index. // Not sure what multiple indices represent... - Type* type = tav.type; + Type* type = type_deref(addr.addr.type); + + // TODO(harold): Checker: Must NOT allow ivar dereferencing on non-pointer types. + // this would access memory outside the size of the value. + // In fact, locals/globals of Objective-C types ought not be allowed at all. + GB_ASSERT(is_type_pointer(type)); + if (is_type_pointer(type)) { type = type_deref(type); addr = lb_addr(lb_emit_load(p, addr.addr)); From 730c844fc66a9afa6cb8f5ac599cf18c475c7fec Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Tue, 22 Apr 2025 21:45:34 -0400 Subject: [PATCH 006/120] Fix bug in @encode implementation. --- src/llvm_backend.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 257625849..80b720984 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1336,7 +1336,7 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d s = gb_string_append_length(s, "=", 1); if (!is_union) { - for( auto& f : t->Struct.fields ) { + for( auto& f : base->Struct.fields ) { String field_type = lb_get_objc_type_encoding(f->type, allocator, pointer_depth); s = gb_string_append_length(s, field_type.text, field_type.len); } @@ -1717,7 +1717,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // TODO(harold): Checker: Alignment must be compatible with ivar rules. Or we should increase the alignment if needed. String ivar_name = str_lit("__$ivar"); - String ivar_types = str_lit("{= }"); + String ivar_types = str_lit("{= }"); //lb_get_objc_type_encoding(ivar_type, temporary_allocator());// str_lit("{= }"); args.count = 5; args[0] = class_value; args[1] = lb_const_value(m, t_cstring, exact_value_string(ivar_name)); From 47abea12290647f371b0488a179d3b254c7489a5 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 23 Apr 2025 01:41:38 -0400 Subject: [PATCH 007/120] Add support for Objective-C method implementation with Odin calling convention. Use @objc_context_provider to provide a context for a type. --- src/check_decl.cpp | 58 ++++++++++++++++++++++++++------------- src/checker.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++ src/checker.hpp | 2 ++ src/entity.cpp | 1 + src/llvm_backend.cpp | 43 ++++++++++++++++++++++++++--- src/types.cpp | 23 ++++++++++++++++ 6 files changed, 169 insertions(+), 22 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index dffe0b48e..e67241b31 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -528,13 +528,21 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, e->TypeName.objc_class_name = ac.objc_class; e->TypeName.objc_superclass = ac.objc_superclass; e->TypeName.objc_ivar = ac.objc_ivar; + e->TypeName.objc_context_provider = ac.objc_context_provider; if (ac.objc_is_implementation) { e->TypeName.objc_is_implementation = true; - mpsc_enqueue(&ctx->info->objc_class_implementations, e); // TODO(harold): Don't need this for anything. Remove. + mpsc_enqueue(&ctx->info->objc_class_implementations, e); // TODO(harold): Don't need this for anything? See if needed when using explicit @export GB_ASSERT(e->TypeName.objc_ivar == nullptr || e->TypeName.objc_ivar->kind == Type_Named); + // Enqueue the proc to be checked when resolved + if (e->TypeName.objc_context_provider != nullptr) { + mpsc_enqueue(&ctx->checker->procs_with_objc_context_provider_to_check, e); + } + + // @TODO(harold): I think there's a Check elsewhere in the checker for checking cycles. + // See about moving this to the right location. // Ensure superclass hierarchy are all Objective-C classes and does not cycle Type *super = ac.objc_superclass; if (super != nullptr) { @@ -571,8 +579,14 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); } } - } else if (e->TypeName.objc_superclass != nullptr) { - error(e->token, "@(objc_superclass) can only be applied when the obj_implement attribute is also applied"); + } else { + if (e->TypeName.objc_superclass != nullptr) { + error(e->token, "@(objc_superclass) can only be applied when the @(obj_implement) attribute is also applied"); + } else if (e->TypeName.objc_ivar != nullptr) { + error(e->token, "@(objc_ivar) can only be applied when the @(obj_implement) attribute is also applied"); + } else if (e->TypeName.objc_context_provider != nullptr) { + error(e->token, "@(objc_context_provider) can only be applied when the @(obj_implement) attribute is also applied"); + } } if (type_size_of(e->type) > 0) { @@ -994,25 +1008,33 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon if (ac.objc_is_implementation) { GB_ASSERT(e->kind == Entity_Procedure); - CheckerInfo *info = ctx->info; - mutex_lock(&info->objc_method_mutex); - defer (mutex_unlock(&info->objc_method_mutex)); + Type *proc_type = e->type; - auto method = ObjcMethodData{ ac, e }; + if (!tn->TypeName.objc_is_implementation) { + error(e->token, "@(objc_is_implement) attribute may only be applied to procedures whose class also have @(objc_is_implement) applied"); + } else if (proc_type->Proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { + error(e->token, "Objective-C methods with Odin calling convention can only be used with classes that have @(objc_context_provider) set"); + } else if (ac.objc_is_class_method && proc_type->Proc.calling_convention != ProcCC_CDecl) { + error(e->token, "Objective-C class methods (objc_is_class_method=true) that have @objc_is_implementation can only use \"c\" calling convention"); + } else { - if (ac.objc_selector == "") { - method.ac.objc_selector = ac.objc_name; - } + auto method = ObjcMethodData{ ac, e }; + method.ac.objc_selector = ac.objc_selector != "" ? ac.objc_selector : ac.objc_name; - Array* method_list = map_get(&info->objc_method_implementations, t); - if (method_list) { - array_add(method_list, method); - } else { - auto list = array_make(permanent_allocator(), 1, 8); - list[0] = method; + CheckerInfo *info = ctx->info; + mutex_lock(&info->objc_method_mutex); + defer (mutex_unlock(&info->objc_method_mutex)); - map_set(&info->objc_method_implementations, t, list); - } + Array* method_list = map_get(&info->objc_method_implementations, t); + if (method_list) { + array_add(method_list, method); + } else { + auto list = array_make(permanent_allocator(), 1, 8); + list[0] = method; + + map_set(&info->objc_method_implementations, t, list); + } + } } mutex_lock(&global_type_name_objc_metadata_mutex); diff --git a/src/checker.cpp b/src/checker.cpp index 29ef7d2b3..79c773a3c 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1502,6 +1502,8 @@ gb_internal void init_checker(Checker *c) { TIME_SECTION("init proc queues"); mpsc_init(&c->procs_with_deferred_to_check, a); //, 1<<10); + mpsc_init(&c->procs_with_objc_context_provider_to_check, a); + // NOTE(bill): 1 Mi elements should be enough on average array_init(&c->procs_to_check, heap_allocator(), 0, 1<<20); @@ -3974,6 +3976,23 @@ gb_internal DECL_ATTRIBUTE_PROC(type_decl_attribute) { error(value, "'%.*s' expected a named type", LIT(name)); } return true; + } else if (name == "objc_context_provider") { + Operand o = {}; + check_expr(c, &o, value); + Entity *e = entity_of_node(o.expr); + + if (e != nullptr) { + if (ac->objc_context_provider != nullptr) { + error(elem, "Previous usage of a 'objc_context_provider' attribute"); + } + if (e->kind != Entity_Procedure) { + error(elem, "'objc_context_provider' must refer to a procedure"); + } else { + ac->objc_context_provider = e; + } + + return true; + } } return false; } @@ -6462,6 +6481,47 @@ gb_internal void check_deferred_procedures(Checker *c) { } +gb_internal void check_objc_context_provider_procedures(Checker *c) { + for (Entity *e = nullptr; mpsc_dequeue(&c->procs_with_objc_context_provider_to_check, &e); /**/) { + GB_ASSERT(e->kind == Entity_TypeName); + + Entity *proc_entity = e->TypeName.objc_context_provider; + GB_ASSERT(proc_entity->kind == Entity_Procedure); + + Type *proc_type = proc_entity->type; + + // TODO(harold): Give better errors here (specify exactly what's wrong) + const char* signature_error = "The procedure for @(objc_context_provider) has an incorrect signature."; + + if (proc_type->Proc.param_count != 1 || proc_type->Proc.result_count != 1) { + error(proc_entity->token, signature_error); + } else { + Type *self_param = base_type(proc_type->Proc.params->Tuple.variables[0]->type); + Type *return_type = base_named_type(proc_type->Proc.results->Tuple.variables[0]->type); + + if (self_param->kind != Type_Pointer) { + error(proc_entity->token, signature_error); + continue; + } + + self_param = base_named_type(self_param->Pointer.elem); + + if (return_type != t_context) { + error(e->token, signature_error); + } else if (!internal_check_is_assignable_to(self_param, e->type) && + (e->TypeName.objc_ivar && !internal_check_is_assignable_to(self_param, e->TypeName.objc_ivar)) + ) { + error(e->token, signature_error); + } else if (proc_type->Proc.calling_convention != ProcCC_CDecl && + proc_type->Proc.calling_convention != ProcCC_Contextless) { + error(e->token, signature_error); + } else if (proc_type->Proc.is_polymorphic) { + error(e->token, signature_error); + } + } + } +} + gb_internal void check_unique_package_names(Checker *c) { ERROR_BLOCK(); @@ -6609,6 +6669,7 @@ gb_internal void check_update_dependency_tree_for_procedures(Checker *c) { } } + gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("map full filepaths to scope"); add_type_info_type(&c->builtin_ctx, t_invalid); @@ -6718,6 +6779,9 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("check deferred procedures"); check_deferred_procedures(c); + TIME_SECTION("check objc context provider procedures"); + check_objc_context_provider_procedures(c); + TIME_SECTION("calculate global init order"); calculate_global_init_order(c); diff --git a/src/checker.hpp b/src/checker.hpp index 9910ed17b..574c71c7f 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -152,6 +152,7 @@ struct AttributeContext { Type * objc_type; Type * objc_superclass; Type * objc_ivar; + Entity *objc_context_provider; bool objc_is_class_method : 1; bool objc_is_implementation : 1; // This struct or proc provides a class/method implementation, not a binding to an existing type. @@ -570,6 +571,7 @@ struct Checker { CheckerContext builtin_ctx; MPSCQueue procs_with_deferred_to_check; + MPSCQueue procs_with_objc_context_provider_to_check; Array procs_to_check; BlockingMutex nested_proc_lits_mutex; diff --git a/src/entity.cpp b/src/entity.cpp index 9a5996e3d..a5443cf27 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -238,6 +238,7 @@ struct Entity { bool objc_is_implementation; Type* objc_superclass; Type* objc_ivar; + Entity*objc_context_provider; String objc_class_name; TypeNameObjCMetadata *objc_metadata; } TypeName; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 80b720984..1d0ce7460 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1586,7 +1586,9 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // Emit method wrapper implementations and registration - auto wrapper_args = array_make(temporary_allocator(), 2, 8); + auto wrapper_args = array_make(temporary_allocator(), 2, 8); + auto get_context_args = array_make(temporary_allocator(), 1); + PtrMap ivar_map{}; map_init(&ivar_map, gen->objc_ivars.count); @@ -1599,6 +1601,13 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { auto& g = cd.g; Type *class_type = g.class_impl_type; + Entity *context_provider = class_type->Named.type_name->TypeName.objc_context_provider; + lbValue context_provider_proc_value{}; + if (context_provider) { + context_provider_proc_value = lb_find_procedure_value_from_entity(m, context_provider); + } + + Array* methods = map_get(&m->info->objc_method_implementations, class_type); if (!methods) { continue; @@ -1645,6 +1654,31 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { LLVMSetLinkage(wrapper_proc->value, LLVMExternalLinkage); lb_begin_procedure_body(wrapper_proc); { + if (method_type->Proc.calling_convention == ProcCC_Odin) { + GB_ASSERT(context_provider); + + // Emit the get odin context call + + // TODO(harold): Get these values at the top, at the start of the method loop for a class + Type *ctx_provider_proc = context_provider->type; + + Type *self_param_ptr_type = base_type(ctx_provider_proc->Proc.params->Tuple.variables[0]->type); + GB_ASSERT(self_param_ptr_type->kind == Type_Pointer); + + // TODO(harold): Set the arg type to the ivar's type, if the context provider takes the ivar's type. + // Type *self_param_type = base_named_type(type_deref(self_param_ptr_type)); + + get_context_args[0] = lbValue { + wrapper_proc->raw_input_parameters[0], + self_param_ptr_type, + }; + + lbValue context = lb_emit_call(wrapper_proc, context_provider_proc_value, get_context_args); + lbAddr context_addr = lb_addr(lb_address_from_load_or_generate_local(wrapper_proc, context)); + lb_push_context_onto_stack(wrapper_proc, context_addr); + } + + auto method_call_args = array_make(temporary_allocator(), method_param_count + (isize)method_param_offset); if (!md.ac.objc_is_class_method) { @@ -1711,11 +1745,12 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { if (ivar_type != nullptr) { // Register a single ivar for this class Type *ivar_base = ivar_type->Named.base; - // TODO(harold): No idea if I can use this, but I assume so? - const i64 size = ivar_base->cached_size; - const i64 alignment = ivar_base->cached_align; + + const i64 size = type_size_of(ivar_base); + const i64 alignment = type_align_of(ivar_base); // TODO(harold): Checker: Alignment must be compatible with ivar rules. Or we should increase the alignment if needed. + // TODO(harold): Should we pass the actual type encoding? Might not be ideal for obfuscation. String ivar_name = str_lit("__$ivar"); String ivar_types = str_lit("{= }"); //lb_get_objc_type_encoding(ivar_type, temporary_allocator());// str_lit("{= }"); args.count = 5; diff --git a/src/types.cpp b/src/types.cpp index 96c17f49a..e1386c1f5 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -874,6 +874,29 @@ gb_internal Type *base_type(Type *t) { return t; } +gb_internal Type *base_named_type(Type *t) { + if (t->kind != Type_Named) { + return t_invalid; + } + + Type *prev_named = t; + t = t->Named.base; + for (;;) { + if (t == nullptr) { + break; + } + if (t->kind != Type_Named) { + break; + } + if (t == t->Named.base) { + return t_invalid; + } + prev_named = t; + t = t->Named.base; + } + return prev_named; +} + gb_internal Type *base_enum_type(Type *t) { Type *bt = base_type(t); if (bt != nullptr && From 974a197ce1493c274a2ab67449624b14c1a405e6 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 23 Apr 2025 01:59:22 -0400 Subject: [PATCH 008/120] Allow the class's ivar to be used as a context provider receiver as well. --- src/llvm_backend.cpp | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 1d0ce7460..fad542d4a 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1600,11 +1600,25 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { for (const auto& cd : class_impls) { auto& g = cd.g; Type *class_type = g.class_impl_type; + Type *class_ptr_type = alloc_type_pointer(class_type); + lbValue class_value = cd.class_value; + + Type *ivar_type = class_type->Named.type_name->TypeName.objc_ivar; Entity *context_provider = class_type->Named.type_name->TypeName.objc_context_provider; + Type *contex_provider_self_ptr_type = nullptr; + Type *contex_provider_self_named_type = nullptr; + bool is_context_provider_ivar = false; lbValue context_provider_proc_value{}; + if (context_provider) { context_provider_proc_value = lb_find_procedure_value_from_entity(m, context_provider); + + contex_provider_self_ptr_type = base_type(context_provider->type->Proc.params->Tuple.variables[0]->type); + GB_ASSERT(contex_provider_self_ptr_type->kind == Type_Pointer); + contex_provider_self_named_type = base_named_type(type_deref(contex_provider_self_ptr_type)); + + is_context_provider_ivar = ivar_type != nullptr && internal_check_is_assignable_to(contex_provider_self_named_type, ivar_type); } @@ -1613,9 +1627,6 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { continue; } - Type *class_ptr_type = alloc_type_pointer(class_type); - lbValue class_value = cd.class_value; - for (const ObjcMethodData& md : *methods) { GB_ASSERT( md.proc_entity->kind == Entity_Procedure); Type *method_type = md.proc_entity->type; @@ -1659,20 +1670,21 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // Emit the get odin context call - // TODO(harold): Get these values at the top, at the start of the method loop for a class - Type *ctx_provider_proc = context_provider->type; - - Type *self_param_ptr_type = base_type(ctx_provider_proc->Proc.params->Tuple.variables[0]->type); - GB_ASSERT(self_param_ptr_type->kind == Type_Pointer); - - // TODO(harold): Set the arg type to the ivar's type, if the context provider takes the ivar's type. - // Type *self_param_type = base_named_type(type_deref(self_param_ptr_type)); - get_context_args[0] = lbValue { wrapper_proc->raw_input_parameters[0], - self_param_ptr_type, + contex_provider_self_ptr_type, }; + if (is_context_provider_ivar) { + // The context provider takes the ivar's type. + // Emit an obj_ivar_get call and use that pointer for 'self' instead. + lbValue real_self { + wrapper_proc->raw_input_parameters[0], + class_ptr_type + }; + get_context_args[0] = lb_handle_objc_ivar_for_objc_object_pointer(wrapper_proc, real_self); + } + lbValue context = lb_emit_call(wrapper_proc, context_provider_proc_value, get_context_args); lbAddr context_addr = lb_addr(lb_address_from_load_or_generate_local(wrapper_proc, context)); lb_push_context_onto_stack(wrapper_proc, context_addr); @@ -1740,8 +1752,6 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { } // End methods // Add ivar if we have one - Type *ivar_type = class_type->Named.type_name->TypeName.objc_ivar; - if (ivar_type != nullptr) { // Register a single ivar for this class Type *ivar_base = ivar_type->Named.base; From 6c9c239a5ef14a3365121b4964217a9bda255454 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sun, 27 Apr 2025 22:10:30 -0400 Subject: [PATCH 009/120] Fix styling issues --- src/check_builtin.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index c44d1c123..92942b4db 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -388,12 +388,12 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan return true; } break; - case BuiltinProc_objc_ivar_get: + case BuiltinProc_objc_ivar_get: { Type *self_type = nullptr; Type *ivar_type = nullptr; - Operand self {}; + Operand self = {}; check_expr_or_type(c, &self, ce->args[0]); if (!is_operand_value(self) || !check_is_assignable_to(c, &self, t_objc_id)) { @@ -403,8 +403,7 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan gb_string_free(t); gb_string_free(e); return false; - } - else if (!is_type_pointer(self.type)) { + } else if (!is_type_pointer(self.type)) { gbString e = expr_to_string(self.expr); gbString t = type_to_string(self.type); error(self.expr, "'%.*s' expected a pointer of a value derived from intrinsics.objc_object, got '%s' of type %s", LIT(builtin_name), e, t); @@ -431,7 +430,7 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan return false; } - Operand ivar {}; + Operand ivar = {}; check_expr_or_type(c, &ivar, ce->args[1]); if (ivar.mode == Addressing_Type) { ivar_type = ivar.type; From f3923ed66640ea9fd342ca851fdd2bd794405e0c Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sun, 27 Apr 2025 22:48:16 -0400 Subject: [PATCH 010/120] Fix indentations Fix Objective-C wrapper procs not forwarding return value --- src/check_builtin.cpp | 124 ++--- src/check_decl.cpp | 150 +++--- src/checker.cpp | 138 ++--- src/checker.hpp | 18 +- src/checker_builtin_procs.hpp | 4 +- src/entity.cpp | 6 +- src/llvm_backend.cpp | 954 +++++++++++++++++----------------- src/llvm_backend.hpp | 6 +- src/llvm_backend_general.cpp | 4 +- src/llvm_backend_proc.cpp | 2 +- src/llvm_backend_utility.cpp | 14 +- 11 files changed, 717 insertions(+), 703 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 92942b4db..099f99045 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -389,77 +389,77 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan } break; case BuiltinProc_objc_ivar_get: - { - Type *self_type = nullptr; - Type *ivar_type = nullptr; + { + Type *self_type = nullptr; + Type *ivar_type = nullptr; - Operand self = {}; - check_expr_or_type(c, &self, ce->args[0]); + Operand self = {}; + check_expr_or_type(c, &self, ce->args[0]); - if (!is_operand_value(self) || !check_is_assignable_to(c, &self, t_objc_id)) { - gbString e = expr_to_string(self.expr); - gbString t = type_to_string(self.type); - error(self.expr, "'%.*s' expected a type or value derived from intrinsics.objc_object, got '%s' of type %s", LIT(builtin_name), e, t); - gb_string_free(t); - gb_string_free(e); - return false; - } else if (!is_type_pointer(self.type)) { - gbString e = expr_to_string(self.expr); - gbString t = type_to_string(self.type); - error(self.expr, "'%.*s' expected a pointer of a value derived from intrinsics.objc_object, got '%s' of type %s", LIT(builtin_name), e, t); - gb_string_free(t); - gb_string_free(e); - return false; - } + if (!is_operand_value(self) || !check_is_assignable_to(c, &self, t_objc_id)) { + gbString e = expr_to_string(self.expr); + gbString t = type_to_string(self.type); + error(self.expr, "'%.*s' expected a type or value derived from intrinsics.objc_object, got '%s' of type %s", LIT(builtin_name), e, t); + gb_string_free(t); + gb_string_free(e); + return false; + } else if (!is_type_pointer(self.type)) { + gbString e = expr_to_string(self.expr); + gbString t = type_to_string(self.type); + error(self.expr, "'%.*s' expected a pointer of a value derived from intrinsics.objc_object, got '%s' of type %s", LIT(builtin_name), e, t); + gb_string_free(t); + gb_string_free(e); + return false; + } - self_type = type_deref(self.type); + self_type = type_deref(self.type); - if (!(self_type->kind == Type_Named && - self_type->Named.type_name != nullptr && - self_type->Named.type_name->TypeName.objc_class_name != "")) { - gbString t = type_to_string(self_type); - error(self.expr, "'%.*s' expected a named type with the attribute @(obj_class=) , got type %s", LIT(builtin_name), t); - gb_string_free(t); - return false; - } + if (!(self_type->kind == Type_Named && + self_type->Named.type_name != nullptr && + self_type->Named.type_name->TypeName.objc_class_name != "")) { + gbString t = type_to_string(self_type); + error(self.expr, "'%.*s' expected a named type with the attribute @(obj_class=) , got type %s", LIT(builtin_name), t); + gb_string_free(t); + return false; + } - if (self_type->Named.type_name->TypeName.objc_ivar == nullptr) { - gbString t = type_to_string(self_type); - error(self.expr, "'%.*s' requires that type %s have the attribute @(obj_ivar=).", LIT(builtin_name), t); - gb_string_free(t); - return false; - } + if (self_type->Named.type_name->TypeName.objc_ivar == nullptr) { + gbString t = type_to_string(self_type); + error(self.expr, "'%.*s' requires that type %s have the attribute @(obj_ivar=).", LIT(builtin_name), t); + gb_string_free(t); + return false; + } - Operand ivar = {}; - check_expr_or_type(c, &ivar, ce->args[1]); - if (ivar.mode == Addressing_Type) { - ivar_type = ivar.type; - } else { - return false; - } + Operand ivar = {}; + check_expr_or_type(c, &ivar, ce->args[1]); + if (ivar.mode == Addressing_Type) { + ivar_type = ivar.type; + } else { + return false; + } - if (self_type->Named.type_name->TypeName.objc_ivar != ivar_type) { - gbString name_self = type_to_string(self_type); - gbString name_expected = type_to_string(self_type->Named.type_name->TypeName.objc_ivar); - gbString name_given = type_to_string(ivar_type); - error(self.expr, "'%.*s' ivar type %s does not match @obj_ivar type %s on Objective-C class %s.", - LIT(builtin_name), name_given, name_expected, name_self); - gb_string_free(name_self); - gb_string_free(name_expected); - gb_string_free(name_given); - return false; - } + if (self_type->Named.type_name->TypeName.objc_ivar != ivar_type) { + gbString name_self = type_to_string(self_type); + gbString name_expected = type_to_string(self_type->Named.type_name->TypeName.objc_ivar); + gbString name_given = type_to_string(ivar_type); + error(self.expr, "'%.*s' ivar type %s does not match @obj_ivar type %s on Objective-C class %s.", + LIT(builtin_name), name_given, name_expected, name_self); + gb_string_free(name_self); + gb_string_free(name_expected); + gb_string_free(name_given); + return false; + } - if (type_hint != nullptr && type_hint->kind == Type_Pointer && type_hint->Pointer.elem == ivar_type) { - operand->type = type_hint; - } else { - operand->type = alloc_type_pointer(ivar_type); - } + if (type_hint != nullptr && type_hint->kind == Type_Pointer && type_hint->Pointer.elem == ivar_type) { + operand->type = type_hint; + } else { + operand->type = alloc_type_pointer(ivar_type); + } - operand->mode = Addressing_Value; + operand->mode = Addressing_Value; - return true; - } break; + return true; + } break; } } @@ -2206,7 +2206,7 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As case BuiltinProc_objc_find_class: case BuiltinProc_objc_register_selector: case BuiltinProc_objc_register_class: - case BuiltinProc_objc_ivar_get: + case BuiltinProc_objc_ivar_get: return check_builtin_objc_procedure(c, operand, call, id, type_hint); case BuiltinProc___entry_point: diff --git a/src/check_decl.cpp b/src/check_decl.cpp index e67241b31..48e5172d6 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -526,68 +526,68 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, check_decl_attributes(ctx, decl->attributes, type_decl_attribute, &ac); if (e->kind == Entity_TypeName && ac.objc_class != "") { e->TypeName.objc_class_name = ac.objc_class; - e->TypeName.objc_superclass = ac.objc_superclass; - e->TypeName.objc_ivar = ac.objc_ivar; + e->TypeName.objc_superclass = ac.objc_superclass; + e->TypeName.objc_ivar = ac.objc_ivar; e->TypeName.objc_context_provider = ac.objc_context_provider; - if (ac.objc_is_implementation) { - e->TypeName.objc_is_implementation = true; - mpsc_enqueue(&ctx->info->objc_class_implementations, e); // TODO(harold): Don't need this for anything? See if needed when using explicit @export + if (ac.objc_is_implementation) { + e->TypeName.objc_is_implementation = true; + mpsc_enqueue(&ctx->info->objc_class_implementations, e); // TODO(harold): Don't need this for anything? See if needed when using explicit @export - GB_ASSERT(e->TypeName.objc_ivar == nullptr || e->TypeName.objc_ivar->kind == Type_Named); + GB_ASSERT(e->TypeName.objc_ivar == nullptr || e->TypeName.objc_ivar->kind == Type_Named); - // Enqueue the proc to be checked when resolved - if (e->TypeName.objc_context_provider != nullptr) { - mpsc_enqueue(&ctx->checker->procs_with_objc_context_provider_to_check, e); - } + // Enqueue the proc to be checked when resolved + if (e->TypeName.objc_context_provider != nullptr) { + mpsc_enqueue(&ctx->checker->procs_with_objc_context_provider_to_check, e); + } - // @TODO(harold): I think there's a Check elsewhere in the checker for checking cycles. - // See about moving this to the right location. - // Ensure superclass hierarchy are all Objective-C classes and does not cycle - Type *super = ac.objc_superclass; - if (super != nullptr) { - TypeSet super_set{}; - type_set_init(&super_set, 8); - defer (type_set_destroy(&super_set)); + // @TODO(harold): I think there's a Check elsewhere in the checker for checking cycles. + // See about moving this to the right location. + // Ensure superclass hierarchy are all Objective-C classes and does not cycle + Type *super = ac.objc_superclass; + if (super != nullptr) { + TypeSet super_set{}; + type_set_init(&super_set, 8); + defer (type_set_destroy(&super_set)); - type_set_update(&super_set, e->type); + type_set_update(&super_set, e->type); - for (;;) { - if (type_set_update(&super_set, super)) { - error(e->token, "@(objc_superclass) Superclass hierarchy cycle encountered"); - break; - } + for (;;) { + if (type_set_update(&super_set, super)) { + error(e->token, "@(objc_superclass) Superclass hierarchy cycle encountered"); + break; + } - if (super->kind != Type_Named) { - error(e->token, "@(objc_superclass) References type must be a named struct."); - break; - } + if (super->kind != Type_Named) { + error(e->token, "@(objc_superclass) References type must be a named struct."); + break; + } - Type* named_type = base_type(super->Named.type_name->type); - if (!is_type_objc_object(named_type)) { - error(e->token, "@(objc_superclass) Superclass must be an Objective-C class."); - break; - } + Type* named_type = base_type(super->Named.type_name->type); + if (!is_type_objc_object(named_type)) { + error(e->token, "@(objc_superclass) Superclass must be an Objective-C class."); + break; + } - super = super->Named.type_name->TypeName.objc_superclass; - if (super == nullptr) { - break; - } + super = super->Named.type_name->TypeName.objc_superclass; + if (super == nullptr) { + break; + } - // TODO(harold): Is this the right way to do this??? The referenced entity must be already resolved - // so that we can access its objc_superclass attribute - check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); - } - } - } else { - if (e->TypeName.objc_superclass != nullptr) { - error(e->token, "@(objc_superclass) can only be applied when the @(obj_implement) attribute is also applied"); - } else if (e->TypeName.objc_ivar != nullptr) { - error(e->token, "@(objc_ivar) can only be applied when the @(obj_implement) attribute is also applied"); - } else if (e->TypeName.objc_context_provider != nullptr) { - error(e->token, "@(objc_context_provider) can only be applied when the @(obj_implement) attribute is also applied"); - } - } + // TODO(harold): Is this the right way to do this??? The referenced entity must be already resolved + // so that we can access its objc_superclass attribute + check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); + } + } + } else { + if (e->TypeName.objc_superclass != nullptr) { + error(e->token, "@(objc_superclass) can only be applied when the @(obj_implement) attribute is also applied"); + } else if (e->TypeName.objc_ivar != nullptr) { + error(e->token, "@(objc_ivar) can only be applied when the @(obj_implement) attribute is also applied"); + } else if (e->TypeName.objc_context_provider != nullptr) { + error(e->token, "@(objc_context_provider) can only be applied when the @(obj_implement) attribute is also applied"); + } + } if (type_size_of(e->type) > 0) { error(e->token, "@(objc_class) marked type must be of zero size"); @@ -1005,37 +1005,37 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon error(e->token, "@(objc_name) attribute may only be applied to procedures and types within the same scope"); } else { - if (ac.objc_is_implementation) { - GB_ASSERT(e->kind == Entity_Procedure); + if (ac.objc_is_implementation) { + GB_ASSERT(e->kind == Entity_Procedure); - Type *proc_type = e->type; + Type *proc_type = e->type; - if (!tn->TypeName.objc_is_implementation) { - error(e->token, "@(objc_is_implement) attribute may only be applied to procedures whose class also have @(objc_is_implement) applied"); - } else if (proc_type->Proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { - error(e->token, "Objective-C methods with Odin calling convention can only be used with classes that have @(objc_context_provider) set"); - } else if (ac.objc_is_class_method && proc_type->Proc.calling_convention != ProcCC_CDecl) { - error(e->token, "Objective-C class methods (objc_is_class_method=true) that have @objc_is_implementation can only use \"c\" calling convention"); - } else { + if (!tn->TypeName.objc_is_implementation) { + error(e->token, "@(objc_is_implement) attribute may only be applied to procedures whose class also have @(objc_is_implement) applied"); + } else if (proc_type->Proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { + error(e->token, "Objective-C methods with Odin calling convention can only be used with classes that have @(objc_context_provider) set"); + } else if (ac.objc_is_class_method && proc_type->Proc.calling_convention != ProcCC_CDecl) { + error(e->token, "Objective-C class methods (objc_is_class_method=true) that have @objc_is_implementation can only use \"c\" calling convention"); + } else { auto method = ObjcMethodData{ ac, e }; - method.ac.objc_selector = ac.objc_selector != "" ? ac.objc_selector : ac.objc_name; + method.ac.objc_selector = ac.objc_selector != "" ? ac.objc_selector : ac.objc_name; - CheckerInfo *info = ctx->info; - mutex_lock(&info->objc_method_mutex); - defer (mutex_unlock(&info->objc_method_mutex)); + CheckerInfo *info = ctx->info; + mutex_lock(&info->objc_method_mutex); + defer (mutex_unlock(&info->objc_method_mutex)); - Array* method_list = map_get(&info->objc_method_implementations, t); - if (method_list) { - array_add(method_list, method); - } else { - auto list = array_make(permanent_allocator(), 1, 8); - list[0] = method; + Array* method_list = map_get(&info->objc_method_implementations, t); + if (method_list) { + array_add(method_list, method); + } else { + auto list = array_make(permanent_allocator(), 1, 8); + list[0] = method; - map_set(&info->objc_method_implementations, t, list); - } - } - } + map_set(&info->objc_method_implementations, t, list); + } + } + } mutex_lock(&global_type_name_objc_metadata_mutex); defer (mutex_unlock(&global_type_name_objc_metadata_mutex)); diff --git a/src/checker.cpp b/src/checker.cpp index 79c773a3c..6563b1c58 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1351,12 +1351,12 @@ gb_internal void init_universal(void) { t_objc_object = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_object"), alloc_type_struct_complete()); t_objc_selector = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_selector"), alloc_type_struct_complete()); t_objc_class = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_class"), alloc_type_struct_complete()); - t_objc_ivar = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_ivar"), alloc_type_struct_complete()); + t_objc_ivar = add_global_type_name(intrinsics_pkg->scope, str_lit("objc_ivar"), alloc_type_struct_complete()); t_objc_id = alloc_type_pointer(t_objc_object); t_objc_SEL = alloc_type_pointer(t_objc_selector); t_objc_Class = alloc_type_pointer(t_objc_class); - t_objc_Ivar = alloc_type_pointer(t_objc_ivar); + t_objc_Ivar = alloc_type_pointer(t_objc_ivar); } } @@ -1389,8 +1389,8 @@ gb_internal void init_checker_info(CheckerInfo *i) { array_init(&i->defineables, a); map_init(&i->objc_msgSend_types); - mpsc_init(&i->objc_class_implementations, a); - map_init(&i->objc_method_implementations); + mpsc_init(&i->objc_class_implementations, a); + map_init(&i->objc_method_implementations); string_map_init(&i->load_file_cache); array_init(&i->all_procedures, heap_allocator()); @@ -3352,10 +3352,10 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { ac->test = true; return true; } else if (name == "export") { - if (ac->objc_is_implementation) { - error(value, "Setting @(export) explicitly is not allowed when @(objc_implement) is set. It is exported implicitly."); - return false; - } + if (ac->objc_is_implementation) { + error(value, "Setting @(export) explicitly is not allowed when @(objc_implement) is set. It is exported implicitly."); + return false; + } ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind == ExactValue_Invalid) { @@ -3369,10 +3369,10 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { return true; } else if (name == "linkage") { - if (ac->objc_is_implementation) { - error(value, "Explicit linkage not allowed when @(objc_implement) is set. It is set implicitly"); - return false; - } + if (ac->objc_is_implementation) { + error(value, "Explicit linkage not allowed when @(objc_implement) is set. It is set implicitly"); + return false; + } ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind != ExactValue_String) { @@ -3681,23 +3681,23 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { } return true; } else if (name == "objc_implement") { - ExactValue ev = check_decl_attribute_value(c, value); - if (ev.kind == ExactValue_Bool) { - ac->objc_is_implementation = ev.value_bool; - } else if (ev.kind == ExactValue_Invalid) { - ac->objc_is_implementation = true; - } else { - error(elem, "Expected a boolean value, or no value, for '%.*s'", LIT(name)); - } + ExactValue ev = check_decl_attribute_value(c, value); + if (ev.kind == ExactValue_Bool) { + ac->objc_is_implementation = ev.value_bool; + } else if (ev.kind == ExactValue_Invalid) { + ac->objc_is_implementation = true; + } else { + error(elem, "Expected a boolean value, or no value, for '%.*s'", LIT(name)); + } - // This implies exported, strongly linked - if (ac->objc_is_implementation) { - ac->is_export = true; - ac->linkage = str_lit("strong"); - } + // This implies exported, strongly linked + if (ac->objc_is_implementation) { + ac->is_export = true; + ac->linkage = str_lit("strong"); + } - return true; - } else if (name == "objc_selector") { + return true; + } else if (name == "objc_selector") { ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind == ExactValue_String) { if (string_is_valid_identifier(ev.value_string)) { @@ -3949,52 +3949,52 @@ gb_internal DECL_ATTRIBUTE_PROC(type_decl_attribute) { } return true; } else if (name == "objc_implement") { - ExactValue ev = check_decl_attribute_value(c, value); - if (ev.kind == ExactValue_Bool) { - ac->objc_is_implementation = ev.value_bool; - } else if (ev.kind == ExactValue_Invalid) { - ac->objc_is_implementation = true; - } else { - error(elem, "Expected a boolean value, or no value, for '%.*s'", LIT(name)); - } - return true; - } else if (name == "objc_superclass") { - Type *objc_superclass = check_type(c, value); + ExactValue ev = check_decl_attribute_value(c, value); + if (ev.kind == ExactValue_Bool) { + ac->objc_is_implementation = ev.value_bool; + } else if (ev.kind == ExactValue_Invalid) { + ac->objc_is_implementation = true; + } else { + error(elem, "Expected a boolean value, or no value, for '%.*s'", LIT(name)); + } + return true; + } else if (name == "objc_superclass") { + Type *objc_superclass = check_type(c, value); - if (objc_superclass != nullptr) { - ac->objc_superclass = objc_superclass; - } else { - error(value, "'%.*s' expected a named type", LIT(name)); - } - return true; - } else if (name == "objc_ivar") { - Type *objc_ivar = check_type(c, value); + if (objc_superclass != nullptr) { + ac->objc_superclass = objc_superclass; + } else { + error(value, "'%.*s' expected a named type", LIT(name)); + } + return true; + } else if (name == "objc_ivar") { + Type *objc_ivar = check_type(c, value); - if (objc_ivar != nullptr) { - ac->objc_ivar = objc_ivar; - } else { - error(value, "'%.*s' expected a named type", LIT(name)); - } - return true; - } else if (name == "objc_context_provider") { - Operand o = {}; - check_expr(c, &o, value); - Entity *e = entity_of_node(o.expr); + if (objc_ivar != nullptr) { + ac->objc_ivar = objc_ivar; + } else { + error(value, "'%.*s' expected a named type", LIT(name)); + } + return true; + } else if (name == "objc_context_provider") { + Operand o = {}; + check_expr(c, &o, value); + Entity *e = entity_of_node(o.expr); - if (e != nullptr) { - if (ac->objc_context_provider != nullptr) { - error(elem, "Previous usage of a 'objc_context_provider' attribute"); - } - if (e->kind != Entity_Procedure) { - error(elem, "'objc_context_provider' must refer to a procedure"); - } else { - ac->objc_context_provider = e; - } + if (e != nullptr) { + if (ac->objc_context_provider != nullptr) { + error(elem, "Previous usage of a 'objc_context_provider' attribute"); + } + if (e->kind != Entity_Procedure) { + error(elem, "'objc_context_provider' must refer to a procedure"); + } else { + ac->objc_context_provider = e; + } - return true; - } - } - return false; + return true; + } + } + return false; } diff --git a/src/checker.hpp b/src/checker.hpp index 574c71c7f..336f09a7e 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -148,13 +148,13 @@ struct AttributeContext { String objc_class; String objc_name; - String objc_selector; + String objc_selector; Type * objc_type; - Type * objc_superclass; - Type * objc_ivar; + Type * objc_superclass; + Type * objc_ivar; Entity *objc_context_provider; bool objc_is_class_method : 1; - bool objc_is_implementation : 1; // This struct or proc provides a class/method implementation, not a binding to an existing type. + bool objc_is_implementation : 1; // This struct or proc provides a class/method implementation, not a binding to an existing type. String require_target_feature; // required by the target micro-architecture String enable_target_feature; // will be enabled for the procedure only @@ -371,8 +371,8 @@ struct ObjcMsgData { }; struct ObjcMethodData { - AttributeContext ac; - Entity *proc_entity; + AttributeContext ac; + Entity *proc_entity; }; enum LoadFileTier { @@ -489,10 +489,10 @@ struct CheckerInfo { BlockingMutex objc_types_mutex; PtrMap objc_msgSend_types; - MPSCQueue objc_class_implementations; + MPSCQueue objc_class_implementations; - BlockingMutex objc_method_mutex; - PtrMap> objc_method_implementations; + BlockingMutex objc_method_mutex; + PtrMap> objc_method_implementations; BlockingMutex load_file_mutex; diff --git a/src/checker_builtin_procs.hpp b/src/checker_builtin_procs.hpp index cb2ce3915..ce7d8349b 100644 --- a/src/checker_builtin_procs.hpp +++ b/src/checker_builtin_procs.hpp @@ -331,7 +331,7 @@ BuiltinProc__type_end, BuiltinProc_objc_find_class, BuiltinProc_objc_register_selector, BuiltinProc_objc_register_class, - BuiltinProc_objc_ivar_get, + BuiltinProc_objc_ivar_get, BuiltinProc_constant_utf16_cstring, @@ -674,7 +674,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = { {STR_LIT("objc_find_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, {STR_LIT("objc_register_selector"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("objc_register_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, - {STR_LIT("ivar_get"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, + {STR_LIT("ivar_get"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("constant_utf16_cstring"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, diff --git a/src/entity.cpp b/src/entity.cpp index a5443cf27..cc41b5e59 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -235,9 +235,9 @@ struct Entity { Type * type_parameter_specialization; String ir_mangled_name; bool is_type_alias; - bool objc_is_implementation; - Type* objc_superclass; - Type* objc_ivar; + bool objc_is_implementation; + Type* objc_superclass; + Type* objc_ivar; Entity*objc_context_provider; String objc_class_name; TypeNameObjCMetadata *objc_metadata; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index fad542d4a..7ffd4ea30 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1176,327 +1176,327 @@ gb_internal lbProcedure *lb_create_objc_names(lbModule *main_module) { // TODO(harold): Move this out of here and into a more suitable place. // TODO(harold): Should not take an allocator, but always use temp, as we return string literals as well. String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_depth = 0) { - // NOTE(harold): See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100 + // NOTE(harold): See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100 - // NOTE(harold): Darwin targets are always 64-bit. Should we drop this and assume "q" always? - #define INT_SIZE_ENCODING (build_context.metrics.ptr_size == 4 ? "i" : "q") - switch (t->kind) { - case Type_Basic: { - switch (t->Basic.kind) { - case Basic_Invalid: - return str_lit("?"); + // NOTE(harold): Darwin targets are always 64-bit. Should we drop this and assume "q" always? + #define INT_SIZE_ENCODING (build_context.metrics.ptr_size == 4 ? "i" : "q") + switch (t->kind) { + case Type_Basic: { + switch (t->Basic.kind) { + case Basic_Invalid: + return str_lit("?"); - case Basic_llvm_bool: - case Basic_bool: - case Basic_b8: - return str_lit("B"); + case Basic_llvm_bool: + case Basic_bool: + case Basic_b8: + return str_lit("B"); - case Basic_b16: - return str_lit("C"); - case Basic_b32: - return str_lit("I"); - case Basic_b64: - return str_lit("q"); - case Basic_i8: - return str_lit("c"); - case Basic_u8: - return str_lit("C"); - case Basic_i16: - case Basic_i16le: - case Basic_i16be: - return str_lit("s"); - case Basic_u16: - case Basic_u16le: - case Basic_u16be: - return str_lit("S"); - case Basic_i32: - case Basic_i32le: - case Basic_i32be: - return str_lit("i"); - case Basic_u32le: - case Basic_u32: - case Basic_u32be: - return str_lit("I"); - case Basic_i64: - case Basic_i64le: - case Basic_i64be: - return str_lit("q"); - case Basic_u64: - case Basic_u64le: - case Basic_u64be: - return str_lit("Q"); - case Basic_i128: - case Basic_i128le: - case Basic_i128be: - return str_lit("t"); - case Basic_u128: - case Basic_u128le: - case Basic_u128be: - return str_lit("T"); - case Basic_rune: - return str_lit("I"); - case Basic_f16: - case Basic_f16le: - case Basic_f16be: - return str_lit("s"); // @harold: Closest we've got? - case Basic_f32: - case Basic_f32le: - case Basic_f32be: - return str_lit("f"); - case Basic_f64: - case Basic_f64le: - case Basic_f64be: - return str_lit("d"); + case Basic_b16: + return str_lit("C"); + case Basic_b32: + return str_lit("I"); + case Basic_b64: + return str_lit("q"); + case Basic_i8: + return str_lit("c"); + case Basic_u8: + return str_lit("C"); + case Basic_i16: + case Basic_i16le: + case Basic_i16be: + return str_lit("s"); + case Basic_u16: + case Basic_u16le: + case Basic_u16be: + return str_lit("S"); + case Basic_i32: + case Basic_i32le: + case Basic_i32be: + return str_lit("i"); + case Basic_u32le: + case Basic_u32: + case Basic_u32be: + return str_lit("I"); + case Basic_i64: + case Basic_i64le: + case Basic_i64be: + return str_lit("q"); + case Basic_u64: + case Basic_u64le: + case Basic_u64be: + return str_lit("Q"); + case Basic_i128: + case Basic_i128le: + case Basic_i128be: + return str_lit("t"); + case Basic_u128: + case Basic_u128le: + case Basic_u128be: + return str_lit("T"); + case Basic_rune: + return str_lit("I"); + case Basic_f16: + case Basic_f16le: + case Basic_f16be: + return str_lit("s"); // @harold: Closest we've got? + case Basic_f32: + case Basic_f32le: + case Basic_f32be: + return str_lit("f"); + case Basic_f64: + case Basic_f64le: + case Basic_f64be: + return str_lit("d"); - // TODO(harold) These: - case Basic_complex32: - case Basic_complex64: - case Basic_complex128: - case Basic_quaternion64: - case Basic_quaternion128: - case Basic_quaternion256: - return str_lit("?"); + // TODO(harold) These: + case Basic_complex32: + case Basic_complex64: + case Basic_complex128: + case Basic_quaternion64: + case Basic_quaternion128: + case Basic_quaternion256: + return str_lit("?"); - case Basic_int: - return str_lit(INT_SIZE_ENCODING); - case Basic_uint: - return build_context.metrics.ptr_size == 4 ? str_lit("I") : str_lit("Q"); - case Basic_uintptr: - case Basic_rawptr: - return str_lit("^v"); + case Basic_int: + return str_lit(INT_SIZE_ENCODING); + case Basic_uint: + return build_context.metrics.ptr_size == 4 ? str_lit("I") : str_lit("Q"); + case Basic_uintptr: + case Basic_rawptr: + return str_lit("^v"); - case Basic_string: - return build_context.metrics.ptr_size == 4 ? str_lit("{string=*i}") : str_lit("{string=*q}"); + case Basic_string: + return build_context.metrics.ptr_size == 4 ? str_lit("{string=*i}") : str_lit("{string=*q}"); - case Basic_cstring: return str_lit("*"); - case Basic_any: return str_lit("{any=^v^v"); // rawptr + ^Type_Info + case Basic_cstring: return str_lit("*"); + case Basic_any: return str_lit("{any=^v^v"); // rawptr + ^Type_Info - case Basic_typeid: - GB_ASSERT(t->Basic.size == 8); - return str_lit("q"); + case Basic_typeid: + GB_ASSERT(t->Basic.size == 8); + return str_lit("q"); - // Untyped types - case Basic_UntypedBool: - case Basic_UntypedInteger: - case Basic_UntypedFloat: - case Basic_UntypedComplex: - case Basic_UntypedQuaternion: - case Basic_UntypedString: - case Basic_UntypedRune: - case Basic_UntypedNil: - case Basic_UntypedUninit: - GB_PANIC("Untyped types cannot be @encoded()"); - return str_lit("?"); - } - break; - } + // Untyped types + case Basic_UntypedBool: + case Basic_UntypedInteger: + case Basic_UntypedFloat: + case Basic_UntypedComplex: + case Basic_UntypedQuaternion: + case Basic_UntypedString: + case Basic_UntypedRune: + case Basic_UntypedNil: + case Basic_UntypedUninit: + GB_PANIC("Untyped types cannot be @encoded()"); + return str_lit("?"); + } + break; + } - case Type_Named: - case Type_Struct: - case Type_Union: { - Type* base = t; - if (base->kind == Type_Named) { - base = base_type(base); - if(base->kind != Type_Struct && base->kind != Type_Union) { - return lb_get_objc_type_encoding(base, allocator, pointer_depth); - } - } + case Type_Named: + case Type_Struct: + case Type_Union: { + Type* base = t; + if (base->kind == Type_Named) { + base = base_type(base); + if(base->kind != Type_Struct && base->kind != Type_Union) { + return lb_get_objc_type_encoding(base, allocator, pointer_depth); + } + } - const bool is_union = base->kind == Type_Union; - if (!is_union) { - // Check for objc_SEL - if (internal_check_is_assignable_to(base, t_objc_SEL)) { - return str_lit(":"); - } + const bool is_union = base->kind == Type_Union; + if (!is_union) { + // Check for objc_SEL + if (internal_check_is_assignable_to(base, t_objc_SEL)) { + return str_lit(":"); + } - // Check for objc_Class - if (internal_check_is_assignable_to(base, t_objc_SEL)) { - return str_lit("#"); - } + // Check for objc_Class + if (internal_check_is_assignable_to(base, t_objc_SEL)) { + return str_lit("#"); + } - // Treat struct as an Objective-C Class? - if (has_type_got_objc_class_attribute(base) && pointer_depth == 0) { - return str_lit("#"); - } - } + // Treat struct as an Objective-C Class? + if (has_type_got_objc_class_attribute(base) && pointer_depth == 0) { + return str_lit("#"); + } + } - if (is_type_objc_object(base)) { - return str_lit("@"); - } + if (is_type_objc_object(base)) { + return str_lit("@"); + } - gbString s = gb_string_make_reserve(allocator, 16); - s = gb_string_append_length(s, is_union ? "(" :"{", 1); - if (t->kind == Type_Named) { - s = gb_string_append_length(s, t->Named.name.text, t->Named.name.len); - } + gbString s = gb_string_make_reserve(allocator, 16); + s = gb_string_append_length(s, is_union ? "(" :"{", 1); + if (t->kind == Type_Named) { + s = gb_string_append_length(s, t->Named.name.text, t->Named.name.len); + } - // Write fields - if (pointer_depth < 2) { - s = gb_string_append_length(s, "=", 1); + // Write fields + if (pointer_depth < 2) { + s = gb_string_append_length(s, "=", 1); - if (!is_union) { - for( auto& f : base->Struct.fields ) { - String field_type = lb_get_objc_type_encoding(f->type, allocator, pointer_depth); - s = gb_string_append_length(s, field_type.text, field_type.len); - } - } else { - // #TODO(harold): Encode fields - } - } + if (!is_union) { + for( auto& f : base->Struct.fields ) { + String field_type = lb_get_objc_type_encoding(f->type, allocator, pointer_depth); + s = gb_string_append_length(s, field_type.text, field_type.len); + } + } else { + // #TODO(harold): Encode fields + } + } - s = gb_string_append_length(s, is_union ? ")" :"}", 1); + s = gb_string_append_length(s, is_union ? ")" :"}", 1); - return make_string_c(s); - } + return make_string_c(s); + } - case Type_Generic: - GB_PANIC("Generic types cannot be @encoded()"); - return str_lit("?"); + case Type_Generic: + GB_PANIC("Generic types cannot be @encoded()"); + return str_lit("?"); - case Type_Pointer: { - String pointee = lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1); - // Special case for Objective-C Objects - if (pointer_depth == 0 && pointee == "@") { - return pointee; - } + case Type_Pointer: { + String pointee = lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1); + // Special case for Objective-C Objects + if (pointer_depth == 0 && pointee == "@") { + return pointee; + } - return concatenate_strings(allocator, str_lit("^"), pointee); - } + return concatenate_strings(allocator, str_lit("^"), pointee); + } - case Type_MultiPointer: - return concatenate_strings(allocator, str_lit("^"), lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1)); + case Type_MultiPointer: + return concatenate_strings(allocator, str_lit("^"), lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1)); - case Type_Array: { - String type_str = lb_get_objc_type_encoding(t->Array.elem, allocator, pointer_depth); + case Type_Array: { + String type_str = lb_get_objc_type_encoding(t->Array.elem, allocator, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); - s = gb_string_append_fmt(s, "[%lld%s]", t->Array.count, type_str.text); - return make_string_c(s); - } + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "[%lld%s]", t->Array.count, type_str.text); + return make_string_c(s); + } - case Type_EnumeratedArray: { - String type_str = lb_get_objc_type_encoding(t->EnumeratedArray.elem, allocator, pointer_depth); + case Type_EnumeratedArray: { + String type_str = lb_get_objc_type_encoding(t->EnumeratedArray.elem, allocator, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); - s = gb_string_append_fmt(s, "[%lld%s]", t->EnumeratedArray.count, type_str.text); - return make_string_c(s); - } + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "[%lld%s]", t->EnumeratedArray.count, type_str.text); + return make_string_c(s); + } - case Type_Slice: { - String type_str = lb_get_objc_type_encoding(t->Slice.elem, allocator, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); - s = gb_string_append_fmt(s, "{slice=^%s%s}", type_str, INT_SIZE_ENCODING); - return make_string_c(s); - } + case Type_Slice: { + String type_str = lb_get_objc_type_encoding(t->Slice.elem, allocator, pointer_depth); + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "{slice=^%s%s}", type_str, INT_SIZE_ENCODING); + return make_string_c(s); + } - case Type_DynamicArray: { - String type_str = lb_get_objc_type_encoding(t->DynamicArray.elem, allocator, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); - s = gb_string_append_fmt(s, "{dynamic=^%s%s%sAllocator={?^v}}", type_str, INT_SIZE_ENCODING, INT_SIZE_ENCODING); - return make_string_c(s); - } + case Type_DynamicArray: { + String type_str = lb_get_objc_type_encoding(t->DynamicArray.elem, allocator, pointer_depth); + gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + s = gb_string_append_fmt(s, "{dynamic=^%s%s%sAllocator={?^v}}", type_str, INT_SIZE_ENCODING, INT_SIZE_ENCODING); + return make_string_c(s); + } - case Type_Map: - return str_lit("{^v^v{Allocator=?^v}}"); - case Type_Enum: - return lb_get_objc_type_encoding(t->Enum.base_type, allocator, pointer_depth); - case Type_Tuple: - // NOTE(harold): Is this allowed here? - return str_lit("?"); - case Type_Proc: - return str_lit("?"); - case Type_BitSet: - return lb_get_objc_type_encoding(t->BitSet.underlying, allocator, pointer_depth); - case Type_SimdVector: - break; - case Type_Matrix: - break; - case Type_BitField: - return lb_get_objc_type_encoding(t->BitField.backing_type, allocator, pointer_depth); - case Type_SoaPointer: { - gbString s = gb_string_make_reserve(allocator, 8); - s = gb_string_append_fmt(s, "{=^v%s}", INT_SIZE_ENCODING); - return make_string_c(s); - } + case Type_Map: + return str_lit("{^v^v{Allocator=?^v}}"); + case Type_Enum: + return lb_get_objc_type_encoding(t->Enum.base_type, allocator, pointer_depth); + case Type_Tuple: + // NOTE(harold): Is this allowed here? + return str_lit("?"); + case Type_Proc: + return str_lit("?"); + case Type_BitSet: + return lb_get_objc_type_encoding(t->BitSet.underlying, allocator, pointer_depth); + case Type_SimdVector: + break; + case Type_Matrix: + break; + case Type_BitField: + return lb_get_objc_type_encoding(t->BitField.backing_type, allocator, pointer_depth); + case Type_SoaPointer: { + gbString s = gb_string_make_reserve(allocator, 8); + s = gb_string_append_fmt(s, "{=^v%s}", INT_SIZE_ENCODING); + return make_string_c(s); + } - } // End switch t->kind - #undef INT_SIZE_ENCODING + } // End switch t->kind + #undef INT_SIZE_ENCODING - GB_PANIC("Unreachable"); + GB_PANIC("Unreachable"); } struct lbObjCGlobalClass { - lbObjCGlobal g; - lbValue class_value; // Local registered class value + lbObjCGlobal g; + lbValue class_value; // Local registered class value }; gb_internal void lb_register_objc_thing( - StringSet &handled, - lbModule *m, - Array &args, - Array &class_impls, - StringMap &class_map, - lbProcedure *p, - lbObjCGlobal const &g, - char const *call + StringSet &handled, + lbModule *m, + Array &args, + Array &class_impls, + StringMap &class_map, + lbProcedure *p, + lbObjCGlobal const &g, + char const *call ) { - if (string_set_update(&handled, g.name)) { - return; - } + if (string_set_update(&handled, g.name)) { + return; + } - lbAddr addr = {}; - lbValue *found = string_map_get(&m->members, g.global_name); - if (found) { - addr = lb_addr(*found); - } else { - lbValue v = {}; - LLVMTypeRef t = lb_type(m, g.type); - v.value = LLVMAddGlobal(m->mod, t, g.global_name); - v.type = alloc_type_pointer(g.type); - addr = lb_addr(v); - LLVMSetInitializer(v.value, LLVMConstNull(t)); - } + lbAddr addr = {}; + lbValue *found = string_map_get(&m->members, g.global_name); + if (found) { + addr = lb_addr(*found); + } else { + lbValue v = {}; + LLVMTypeRef t = lb_type(m, g.type); + v.value = LLVMAddGlobal(m->mod, t, g.global_name); + v.type = alloc_type_pointer(g.type); + addr = lb_addr(v); + LLVMSetInitializer(v.value, LLVMConstNull(t)); + } - lbValue class_ptr{}; - lbValue class_name = lb_const_value(m, t_cstring, exact_value_string(g.name)); + lbValue class_ptr{}; + lbValue class_name = lb_const_value(m, t_cstring, exact_value_string(g.name)); - // If this class requires an implementation, save it for registration below. - if (g.class_impl_type != nullptr) { + // If this class requires an implementation, save it for registration below. + if (g.class_impl_type != nullptr) { - // Make sure the superclass has been initialized before us - lbValue superclass_value{}; + // Make sure the superclass has been initialized before us + lbValue superclass_value{}; - auto& tn = g.class_impl_type->Named.type_name->TypeName; - Type *superclass = tn.objc_superclass; - if (superclass != nullptr) { - auto& superclass_global = string_map_must_get(&class_map, superclass->Named.type_name->TypeName.objc_class_name); - lb_register_objc_thing(handled, m, args, class_impls, class_map, p, superclass_global.g, call); - GB_ASSERT(superclass_global.class_value.value); + auto& tn = g.class_impl_type->Named.type_name->TypeName; + Type *superclass = tn.objc_superclass; + if (superclass != nullptr) { + auto& superclass_global = string_map_must_get(&class_map, superclass->Named.type_name->TypeName.objc_class_name); + lb_register_objc_thing(handled, m, args, class_impls, class_map, p, superclass_global.g, call); + GB_ASSERT(superclass_global.class_value.value); - superclass_value = superclass_global.class_value; - } + superclass_value = superclass_global.class_value; + } - args.count = 3; - args[0] = superclass == nullptr ? lb_const_nil(m, t_objc_Class) : superclass_value; - args[1] = class_name; - args[2] = lb_const_int(m, t_uint, 0); - class_ptr = lb_emit_runtime_call(p, "objc_allocateClassPair", args); + args.count = 3; + args[0] = superclass == nullptr ? lb_const_nil(m, t_objc_Class) : superclass_value; + args[1] = class_name; + args[2] = lb_const_int(m, t_uint, 0); + class_ptr = lb_emit_runtime_call(p, "objc_allocateClassPair", args); - array_add(&class_impls, lbObjCGlobalClass{g, class_ptr}); - } - else { - args.count = 1; - args[0] = class_name; - class_ptr = lb_emit_runtime_call(p, call, args); - } + array_add(&class_impls, lbObjCGlobalClass{g, class_ptr}); + } + else { + args.count = 1; + args[0] = class_name; + class_ptr = lb_emit_runtime_call(p, call, args); + } - lb_addr_store(p, addr, class_ptr); + lb_addr_store(p, addr, class_ptr); - lbObjCGlobalClass* class_global = string_map_get(&class_map, g.name); - if (class_global != nullptr) { - class_global->class_value = class_ptr; - } + lbObjCGlobalClass* class_global = string_map_get(&class_map, g.name); + if (class_global != nullptr) { + class_global->class_value = class_ptr; + } } gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { @@ -1513,80 +1513,80 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { defer (string_set_destroy(&handled)); auto args = array_make(temporary_allocator(), 3, 8); - auto class_impls = array_make(temporary_allocator(), 0, 16); + auto class_impls = array_make(temporary_allocator(), 0, 16); - // Ensure classes that have been implicitly referenced through - // the objc_superclass attribute have a global variable available for them. - TypeSet class_set{}; - type_set_init(&class_set, gen->objc_classes.count+16); - defer (type_set_destroy(&class_set)); + // Ensure classes that have been implicitly referenced through + // the objc_superclass attribute have a global variable available for them. + TypeSet class_set{}; + type_set_init(&class_set, gen->objc_classes.count+16); + defer (type_set_destroy(&class_set)); - auto referenced_classes = array_make(temporary_allocator()); - for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { - array_add( &referenced_classes, g); + auto referenced_classes = array_make(temporary_allocator()); + for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { + array_add( &referenced_classes, g); - Type *cls = g.class_impl_type; - while (cls) { - if (type_set_update(&class_set, cls)) { - break; - } - GB_ASSERT(cls->kind == Type_Named); + Type *cls = g.class_impl_type; + while (cls) { + if (type_set_update(&class_set, cls)) { + break; + } + GB_ASSERT(cls->kind == Type_Named); - cls = cls->Named.type_name->TypeName.objc_superclass; - } - } + cls = cls->Named.type_name->TypeName.objc_superclass; + } + } - for (auto pair : class_set) { - auto& tn = pair.type->Named.type_name->TypeName; - Type *class_impl = !tn.objc_is_implementation ? nullptr : pair.type; - lb_handle_objc_find_or_register_class(p, tn.objc_class_name, class_impl); - } - for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { - array_add( &referenced_classes, g ); - } + for (auto pair : class_set) { + auto& tn = pair.type->Named.type_name->TypeName; + Type *class_impl = !tn.objc_is_implementation ? nullptr : pair.type; + lb_handle_objc_find_or_register_class(p, tn.objc_class_name, class_impl); + } + for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { + array_add( &referenced_classes, g ); + } - // Add all class globals to a map so that we can look them up dynamically - // in order to resolve out-of-order because classes that are being implemented - // need their superclasses to have been registered before them. - StringMap global_class_map{}; - string_map_init(&global_class_map, (usize)gen->objc_classes.count); - defer (string_map_destroy(&global_class_map)); + // Add all class globals to a map so that we can look them up dynamically + // in order to resolve out-of-order because classes that are being implemented + // need their superclasses to have been registered before them. + StringMap global_class_map{}; + string_map_init(&global_class_map, (usize)gen->objc_classes.count); + defer (string_map_destroy(&global_class_map)); - for (lbObjCGlobal g :referenced_classes) { - string_map_set(&global_class_map, g.name, lbObjCGlobalClass{g}); - } + for (lbObjCGlobal g :referenced_classes) { + string_map_set(&global_class_map, g.name, lbObjCGlobalClass{g}); + } - LLVMSetLinkage(p->value, LLVMInternalLinkage); - lb_begin_procedure_body(p); + LLVMSetLinkage(p->value, LLVMInternalLinkage); + lb_begin_procedure_body(p); - // Register class globals, gathering classes that must be implemented - for (auto& kv : global_class_map) { - lb_register_objc_thing(handled, m, args, class_impls, global_class_map, p, kv.value.g, "objc_lookUpClass"); - } + // Register class globals, gathering classes that must be implemented + for (auto& kv : global_class_map) { + lb_register_objc_thing(handled, m, args, class_impls, global_class_map, p, kv.value.g, "objc_lookUpClass"); + } - // Prefetch selectors for implemented methods so that they can also be registered. - for (const auto& cd : class_impls) { - auto& g = cd.g; - Type *class_type = g.class_impl_type; + // Prefetch selectors for implemented methods so that they can also be registered. + for (const auto& cd : class_impls) { + auto& g = cd.g; + Type *class_type = g.class_impl_type; - Array* methods = map_get(&m->info->objc_method_implementations, class_type); - if (!methods) { - continue; - } + Array* methods = map_get(&m->info->objc_method_implementations, class_type); + if (!methods) { + continue; + } - for (const ObjcMethodData& md : *methods) { - lb_handle_objc_find_or_register_selector(p, md.ac.objc_selector); - } - } + for (const ObjcMethodData& md : *methods) { + lb_handle_objc_find_or_register_selector(p, md.ac.objc_selector); + } + } - // Now we can register all referenced selectors - for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_selectors, &g); /**/) { - lb_register_objc_thing(handled, m, args, class_impls, global_class_map, p, g, "sel_registerName"); - } + // Now we can register all referenced selectors + for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_selectors, &g); /**/) { + lb_register_objc_thing(handled, m, args, class_impls, global_class_map, p, g, "sel_registerName"); + } - // Emit method wrapper implementations and registration - auto wrapper_args = array_make(temporary_allocator(), 2, 8); + // Emit method wrapper implementations and registration + auto wrapper_args = array_make(temporary_allocator(), 2, 8); auto get_context_args = array_make(temporary_allocator(), 1); @@ -1597,186 +1597,200 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { map_set(&ivar_map, g.class_impl_type, g); } - for (const auto& cd : class_impls) { - auto& g = cd.g; - Type *class_type = g.class_impl_type; - Type *class_ptr_type = alloc_type_pointer(class_type); - lbValue class_value = cd.class_value; + for (const auto& cd : class_impls) { + auto& g = cd.g; + Type *class_type = g.class_impl_type; + Type *class_ptr_type = alloc_type_pointer(class_type); + lbValue class_value = cd.class_value; - Type *ivar_type = class_type->Named.type_name->TypeName.objc_ivar; + Type *ivar_type = class_type->Named.type_name->TypeName.objc_ivar; - Entity *context_provider = class_type->Named.type_name->TypeName.objc_context_provider; - Type *contex_provider_self_ptr_type = nullptr; - Type *contex_provider_self_named_type = nullptr; - bool is_context_provider_ivar = false; - lbValue context_provider_proc_value{}; + Entity *context_provider = class_type->Named.type_name->TypeName.objc_context_provider; + Type *contex_provider_self_ptr_type = nullptr; + Type *contex_provider_self_named_type = nullptr; + bool is_context_provider_ivar = false; + lbValue context_provider_proc_value{}; - if (context_provider) { - context_provider_proc_value = lb_find_procedure_value_from_entity(m, context_provider); + if (context_provider) { + context_provider_proc_value = lb_find_procedure_value_from_entity(m, context_provider); - contex_provider_self_ptr_type = base_type(context_provider->type->Proc.params->Tuple.variables[0]->type); - GB_ASSERT(contex_provider_self_ptr_type->kind == Type_Pointer); - contex_provider_self_named_type = base_named_type(type_deref(contex_provider_self_ptr_type)); + contex_provider_self_ptr_type = base_type(context_provider->type->Proc.params->Tuple.variables[0]->type); + GB_ASSERT(contex_provider_self_ptr_type->kind == Type_Pointer); + contex_provider_self_named_type = base_named_type(type_deref(contex_provider_self_ptr_type)); - is_context_provider_ivar = ivar_type != nullptr && internal_check_is_assignable_to(contex_provider_self_named_type, ivar_type); - } + is_context_provider_ivar = ivar_type != nullptr && internal_check_is_assignable_to(contex_provider_self_named_type, ivar_type); + } - Array* methods = map_get(&m->info->objc_method_implementations, class_type); - if (!methods) { - continue; - } + Array* methods = map_get(&m->info->objc_method_implementations, class_type); + if (!methods) { + continue; + } - for (const ObjcMethodData& md : *methods) { - GB_ASSERT( md.proc_entity->kind == Entity_Procedure); - Type *method_type = md.proc_entity->type; + for (const ObjcMethodData& md : *methods) { + GB_ASSERT( md.proc_entity->kind == Entity_Procedure); + Type *method_type = md.proc_entity->type; - String proc_name = make_string_c("__$objc_method::"); - proc_name = concatenate_strings(temporary_allocator(), proc_name, g.name); - proc_name = concatenate_strings(temporary_allocator(), proc_name, str_lit("::")); - proc_name = concatenate_strings( permanent_allocator(), proc_name, md.ac.objc_name); + String proc_name = make_string_c("__$objc_method::"); + proc_name = concatenate_strings(temporary_allocator(), proc_name, g.name); + proc_name = concatenate_strings(temporary_allocator(), proc_name, str_lit("::")); + proc_name = concatenate_strings( permanent_allocator(), proc_name, md.ac.objc_name); - wrapper_args.count = 2; - wrapper_args[0] = md.ac.objc_is_class_method ? t_objc_Class : class_ptr_type; - wrapper_args[1] = t_objc_SEL; + wrapper_args.count = 2; + wrapper_args[0] = md.ac.objc_is_class_method ? t_objc_Class : class_ptr_type; + wrapper_args[1] = t_objc_SEL; - auto method_param_count = (isize)method_type->Proc.param_count; - i32 method_param_offset = 0; + auto method_param_count = (isize)method_type->Proc.param_count; + i32 method_param_offset = 0; - // TODO(harold): Need to make sure (at checker stage) that the non-class method has the self parameter already. - // (Maybe this is already accounted for?.) - if (!md.ac.objc_is_class_method) { - GB_ASSERT(method_param_count >= 1); - method_param_count -= 1; - method_param_offset = 1; - } + // TODO(harold): Need to make sure (at checker stage) that the non-class method has the self parameter already. + // (Maybe this is already accounted for?.) + if (!md.ac.objc_is_class_method) { + GB_ASSERT(method_param_count >= 1); + method_param_count -= 1; + method_param_offset = 1; + } - for (i32 i = 0; i < method_param_count; i++) { - array_add(&wrapper_args, method_type->Proc.params->Tuple.variables[method_param_offset+i]->type); - } + for (i32 i = 0; i < method_param_count; i++) { + array_add(&wrapper_args, method_type->Proc.params->Tuple.variables[method_param_offset+i]->type); + } - Type *wrapper_args_tuple = alloc_type_tuple_from_field_types(wrapper_args.data, wrapper_args.count, false, true); - Type *wrapper_proc_type = alloc_type_proc(nullptr, wrapper_args_tuple, (isize)wrapper_args_tuple->Tuple.variables.count, nullptr, 0, false, ProcCC_CDecl); + Type *wrapper_args_tuple = alloc_type_tuple_from_field_types(wrapper_args.data, wrapper_args.count, false, true); + Type *wrapper_results_tuple = nullptr; - lbProcedure *wrapper_proc = lb_create_dummy_procedure(m, proc_name, wrapper_proc_type); - lb_add_attribute_to_proc(wrapper_proc->module, wrapper_proc->value, "nounwind"); + if (method_type->Proc.result_count > 0) { + GB_ASSERT(method_type->Proc.result_count == 1); + wrapper_results_tuple = alloc_type_tuple_from_field_types(&method_type->Proc.results->Tuple.variables[0]->type, 1, false, true); + } - // Emit the wrapper - LLVMSetLinkage(wrapper_proc->value, LLVMExternalLinkage); - lb_begin_procedure_body(wrapper_proc); - { - if (method_type->Proc.calling_convention == ProcCC_Odin) { - GB_ASSERT(context_provider); + Type *wrapper_proc_type = alloc_type_proc(nullptr, wrapper_args_tuple, wrapper_args_tuple->Tuple.variables.count, + wrapper_results_tuple, method_type->Proc.result_count, false, ProcCC_CDecl); - // Emit the get odin context call + lbProcedure *wrapper_proc = lb_create_dummy_procedure(m, proc_name, wrapper_proc_type); + lb_add_attribute_to_proc(wrapper_proc->module, wrapper_proc->value, "nounwind"); - get_context_args[0] = lbValue { - wrapper_proc->raw_input_parameters[0], + // Emit the wrapper + LLVMSetLinkage(wrapper_proc->value, LLVMExternalLinkage); + lb_begin_procedure_body(wrapper_proc); + { + if (method_type->Proc.calling_convention == ProcCC_Odin) { + GB_ASSERT(context_provider); + + // Emit the get odin context call + + get_context_args[0] = lbValue { + wrapper_proc->raw_input_parameters[0], contex_provider_self_ptr_type, }; - if (is_context_provider_ivar) { - // The context provider takes the ivar's type. - // Emit an obj_ivar_get call and use that pointer for 'self' instead. - lbValue real_self { - wrapper_proc->raw_input_parameters[0], - class_ptr_type - }; - get_context_args[0] = lb_handle_objc_ivar_for_objc_object_pointer(wrapper_proc, real_self); - } + if (is_context_provider_ivar) { + // The context provider takes the ivar's type. + // Emit an obj_ivar_get call and use that pointer for 'self' instead. + lbValue real_self { + wrapper_proc->raw_input_parameters[0], + class_ptr_type + }; + get_context_args[0] = lb_handle_objc_ivar_for_objc_object_pointer(wrapper_proc, real_self); + } - lbValue context = lb_emit_call(wrapper_proc, context_provider_proc_value, get_context_args); - lbAddr context_addr = lb_addr(lb_address_from_load_or_generate_local(wrapper_proc, context)); - lb_push_context_onto_stack(wrapper_proc, context_addr); - } + lbValue context = lb_emit_call(wrapper_proc, context_provider_proc_value, get_context_args); + lbAddr context_addr = lb_addr(lb_address_from_load_or_generate_local(wrapper_proc, context)); + lb_push_context_onto_stack(wrapper_proc, context_addr); + } - auto method_call_args = array_make(temporary_allocator(), method_param_count + (isize)method_param_offset); + auto method_call_args = array_make(temporary_allocator(), method_param_count + (isize)method_param_offset); - if (!md.ac.objc_is_class_method) { - method_call_args[0] = lbValue { - wrapper_proc->raw_input_parameters[0], - class_ptr_type, - }; - } + if (!md.ac.objc_is_class_method) { + method_call_args[0] = lbValue { + wrapper_proc->raw_input_parameters[0], + class_ptr_type, + }; + } - for (isize i = 0; i < method_param_count; i++) { - method_call_args[i+method_param_offset] = lbValue { - wrapper_proc->raw_input_parameters[i+2], - method_type->Proc.params->Tuple.variables[i+method_param_offset]->type, - }; - } - lbValue method_proc_value = lb_find_procedure_value_from_entity(m, md.proc_entity); + for (isize i = 0; i < method_param_count; i++) { + method_call_args[i+method_param_offset] = lbValue { + wrapper_proc->raw_input_parameters[i+2], + method_type->Proc.params->Tuple.variables[i+method_param_offset]->type, + }; + } + lbValue method_proc_value = lb_find_procedure_value_from_entity(m, md.proc_entity); - // Call real procedure for method from here, passing the parameters expected, if any. - lb_emit_call(wrapper_proc, method_proc_value, method_call_args); - } - lb_end_procedure_body(wrapper_proc); + // Call real procedure for method from here, passing the parameters expected, if any. + lbValue return_value = lb_emit_call(wrapper_proc, method_proc_value, method_call_args); + + if (wrapper_results_tuple != nullptr) { + auto &result_var = method_type->Proc.results->Tuple.variables[0]; + return_value = lb_emit_conv(wrapper_proc, return_value, result_var->type); + lb_build_return_stmt_internal(wrapper_proc, return_value, result_var->token.pos); + } + } + lb_end_procedure_body(wrapper_proc); - // Add the method to the class - String method_encoding = str_lit("v"); - // TODO (harold): Checker must ensure that objc_methods have a single return value or none! - GB_ASSERT(method_type->Proc.result_count <= 1); - if (method_type->Proc.result_count != 0) { - method_encoding = lb_get_objc_type_encoding(method_type->Proc.results->Tuple.variables[0]->type, temporary_allocator()); - } + // Add the method to the class + String method_encoding = str_lit("v"); + // TODO (harold): Checker must ensure that objc_methods have a single return value or none! + GB_ASSERT(method_type->Proc.result_count <= 1); + if (method_type->Proc.result_count != 0) { + method_encoding = lb_get_objc_type_encoding(method_type->Proc.results->Tuple.variables[0]->type, temporary_allocator()); + } - if (!md.ac.objc_is_class_method) { - method_encoding = concatenate_strings(temporary_allocator(), method_encoding, str_lit("@:")); - } else { - method_encoding = concatenate_strings(temporary_allocator(), method_encoding, str_lit("#:")); - } + if (!md.ac.objc_is_class_method) { + method_encoding = concatenate_strings(temporary_allocator(), method_encoding, str_lit("@:")); + } else { + method_encoding = concatenate_strings(temporary_allocator(), method_encoding, str_lit("#:")); + } - for (i32 i = method_param_offset; i < method_param_count; i++) { - Type *param_type = method_type->Proc.params->Tuple.variables[i]->type; - String param_encoding = lb_get_objc_type_encoding(param_type, temporary_allocator()); + for (i32 i = method_param_offset; i < method_param_count; i++) { + Type *param_type = method_type->Proc.params->Tuple.variables[i]->type; + String param_encoding = lb_get_objc_type_encoding(param_type, temporary_allocator()); - method_encoding = concatenate_strings(temporary_allocator(), method_encoding, param_encoding); - } + method_encoding = concatenate_strings(temporary_allocator(), method_encoding, param_encoding); + } - // Emit method registration - lbAddr* sel_address = string_map_get(&m->objc_selectors, md.ac.objc_selector); - GB_ASSERT(sel_address); - lbValue selector_value = lb_addr_load(p, *sel_address); + // Emit method registration + lbAddr* sel_address = string_map_get(&m->objc_selectors, md.ac.objc_selector); + GB_ASSERT(sel_address); + lbValue selector_value = lb_addr_load(p, *sel_address); - args.count = 4; - args[0] = class_value; // Class - args[1] = selector_value; // SEL - args[2] = lbValue { wrapper_proc->value, wrapper_proc->type }; - args[3] = lb_const_value(m, t_cstring, exact_value_string(method_encoding)); + args.count = 4; + args[0] = class_value; // Class + args[1] = selector_value; // SEL + args[2] = lbValue { wrapper_proc->value, wrapper_proc->type }; + args[3] = lb_const_value(m, t_cstring, exact_value_string(method_encoding)); - // TODO(harold): Emit check BOOL result and panic if false. - lb_emit_runtime_call(p, "class_addMethod", args); + // TODO(harold): Emit check BOOL result and panic if false. + lb_emit_runtime_call(p, "class_addMethod", args); - } // End methods + } // End methods - // Add ivar if we have one - if (ivar_type != nullptr) { - // Register a single ivar for this class - Type *ivar_base = ivar_type->Named.base; + // Add ivar if we have one + if (ivar_type != nullptr) { + // Register a single ivar for this class + Type *ivar_base = ivar_type->Named.base; - const i64 size = type_size_of(ivar_base); - const i64 alignment = type_align_of(ivar_base); - // TODO(harold): Checker: Alignment must be compatible with ivar rules. Or we should increase the alignment if needed. + const i64 size = type_size_of(ivar_base); + const i64 alignment = type_align_of(ivar_base); + // TODO(harold): Checker: Alignment must be compatible with ivar rules. Or we should increase the alignment if needed. - // TODO(harold): Should we pass the actual type encoding? Might not be ideal for obfuscation. - String ivar_name = str_lit("__$ivar"); - String ivar_types = str_lit("{= }"); //lb_get_objc_type_encoding(ivar_type, temporary_allocator());// str_lit("{= }"); - args.count = 5; - args[0] = class_value; - args[1] = lb_const_value(m, t_cstring, exact_value_string(ivar_name)); - args[2] = lb_const_value(m, t_uint, exact_value_u64((u64)size)); - args[3] = lb_const_value(m, t_u8, exact_value_u64((u64)alignment)); - args[4] = lb_const_value(m, t_cstring, exact_value_string(ivar_types)); - lb_emit_runtime_call(p, "class_addIvar", args); - } + // TODO(harold): Should we pass the actual type encoding? Might not be ideal for obfuscation. + String ivar_name = str_lit("__$ivar"); + String ivar_types = str_lit("{= }"); //lb_get_objc_type_encoding(ivar_type, temporary_allocator());// str_lit("{= }"); + args.count = 5; + args[0] = class_value; + args[1] = lb_const_value(m, t_cstring, exact_value_string(ivar_name)); + args[2] = lb_const_value(m, t_uint, exact_value_u64((u64)size)); + args[3] = lb_const_value(m, t_u8, exact_value_u64((u64)alignment)); + args[4] = lb_const_value(m, t_cstring, exact_value_string(ivar_types)); + lb_emit_runtime_call(p, "class_addIvar", args); + } - // Complete the class registration - args.count = 1; - args[0] = class_value; - lb_emit_runtime_call(p, "objc_registerClassPair", args); - } + // Complete the class registration + args.count = 1; + args[0] = class_value; + lb_emit_runtime_call(p, "objc_registerClassPair", args); + } // Register ivar offsets for any `objc_ivar_get` expressions emitted. Type *ptr_u32 = alloc_type_pointer(t_u32); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 7694c65c3..99ee2b2ff 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -196,7 +196,7 @@ struct lbModule { StringMap objc_classes; StringMap objc_selectors; - StringMap objc_ivars; + StringMap objc_ivars; PtrMap map_cell_info_map; // address of runtime.Map_Info PtrMap map_info_map; // address of runtime.Map_Cell_Info @@ -220,7 +220,7 @@ struct lbObjCGlobal { gbString global_name; String name; Type * type; - Type * class_impl_type; // This is set when the class has the objc_implement attribute set to true. + Type * class_impl_type; // This is set when the class has the objc_implement attribute set to true. }; struct lbGenerator : LinkerData { @@ -242,7 +242,7 @@ struct lbGenerator : LinkerData { MPSCQueue entities_to_correct_linkage; MPSCQueue objc_selectors; MPSCQueue objc_classes; - MPSCQueue objc_ivars; + MPSCQueue objc_ivars; }; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 7f012e006..bb683465b 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -101,7 +101,7 @@ gb_internal void lb_init_module(lbModule *m, Checker *c) { string_map_init(&m->objc_classes); string_map_init(&m->objc_selectors); - string_map_init(&m->objc_ivars); + string_map_init(&m->objc_ivars); map_init(&m->map_info_map, 0); map_init(&m->map_cell_info_map, 0); @@ -174,7 +174,7 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { mpsc_init(&gen->entities_to_correct_linkage, heap_allocator()); mpsc_init(&gen->objc_selectors, heap_allocator()); mpsc_init(&gen->objc_classes, heap_allocator()); - mpsc_init(&gen->objc_ivars, heap_allocator()); + mpsc_init(&gen->objc_ivars, heap_allocator()); return true; } diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index bf4ebf377..ba375283e 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -3290,7 +3290,7 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu case BuiltinProc_objc_find_class: return lb_handle_objc_find_class(p, expr); case BuiltinProc_objc_register_selector: return lb_handle_objc_register_selector(p, expr); case BuiltinProc_objc_register_class: return lb_handle_objc_register_class(p, expr); - case BuiltinProc_objc_ivar_get: return lb_handle_objc_ivar_get(p, expr); + case BuiltinProc_objc_ivar_get: return lb_handle_objc_ivar_get(p, expr); case BuiltinProc_constant_utf16_cstring: diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 33211395a..264364162 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -2157,8 +2157,8 @@ gb_internal lbAddr lb_handle_objc_find_or_register_class(lbProcedure *p, String gb_internal lbAddr lb_handle_objc_find_or_register_ivar(lbModule *m, Type *self_type) { - String name = self_type->Named.type_name->TypeName.objc_class_name; - GB_ASSERT(name != ""); + String name = self_type->Named.type_name->TypeName.objc_class_name; + GB_ASSERT(name != ""); lbAddr *found = string_map_get(&m->objc_ivars, name); if (found) { @@ -2170,7 +2170,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_ivar(lbModule *m, Type *self_ gbString global_name = gb_string_make(permanent_allocator(), "__$objc_ivar::"); global_name = gb_string_append_length(global_name, name.text, name.len); - // Create a global variable to store offset of the ivar in an instance of an object + // Create a global variable to store offset of the ivar in an instance of an object LLVMTypeRef t = lb_type(m, t_u32); lbValue g = {}; @@ -2209,10 +2209,10 @@ gb_internal lbValue lb_handle_objc_ivar_for_objc_object_pointer(lbProcedure *p, } gb_internal lbValue lb_handle_objc_ivar_get(lbProcedure *p, Ast *expr) { - ast_node(ce, CallExpr, expr); + ast_node(ce, CallExpr, expr); - GB_ASSERT(ce->args[0]->tav.type->kind == Type_Pointer); - lbValue self = lb_build_expr(p, ce->args[0]); + GB_ASSERT(ce->args[0]->tav.type->kind == Type_Pointer); + lbValue self = lb_build_expr(p, ce->args[0]); return lb_handle_objc_ivar_for_objc_object_pointer(p, self); } @@ -2282,7 +2282,7 @@ gb_internal lbValue lb_handle_objc_id(lbProcedure *p, Ast *expr) { GB_ASSERT(e->kind == Entity_TypeName); String name = e->TypeName.objc_class_name; - Type *class_impl_type = e->TypeName.objc_is_implementation ? type : nullptr; + Type *class_impl_type = e->TypeName.objc_is_implementation ? type : nullptr; return lb_addr_load(p, lb_handle_objc_find_or_register_class(p, name, class_impl_type)); } From 89533f49e4fc2ae6f16551a51acaad115faffecd Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sun, 27 Apr 2025 23:05:17 -0400 Subject: [PATCH 011/120] Fix more styling and minor issues --- src/checker.cpp | 2 +- src/checker.hpp | 4 ++-- src/llvm_backend.cpp | 16 ++++++++-------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index 6563b1c58..15d19fb1a 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -6491,7 +6491,7 @@ gb_internal void check_objc_context_provider_procedures(Checker *c) { Type *proc_type = proc_entity->type; // TODO(harold): Give better errors here (specify exactly what's wrong) - const char* signature_error = "The procedure for @(objc_context_provider) has an incorrect signature."; + const char *signature_error = "The procedure for @(objc_context_provider) has an incorrect signature."; if (proc_type->Proc.param_count != 1 || proc_type->Proc.result_count != 1) { error(proc_entity->token, signature_error); diff --git a/src/checker.hpp b/src/checker.hpp index 336f09a7e..0f7e1cb59 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -153,8 +153,8 @@ struct AttributeContext { Type * objc_superclass; Type * objc_ivar; Entity *objc_context_provider; - bool objc_is_class_method : 1; - bool objc_is_implementation : 1; // This struct or proc provides a class/method implementation, not a binding to an existing type. + bool objc_is_class_method; + bool objc_is_implementation; // This struct or proc provides a class/method implementation, not a binding to an existing type. String require_target_feature; // required by the target micro-architecture String enable_target_feature; // will be enabled for the procedure only diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 7ffd4ea30..aec8b7fc5 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1269,7 +1269,7 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d return build_context.metrics.ptr_size == 4 ? str_lit("{string=*i}") : str_lit("{string=*q}"); case Basic_cstring: return str_lit("*"); - case Basic_any: return str_lit("{any=^v^v"); // rawptr + ^Type_Info + case Basic_any: return str_lit("{any=^v^v}"); // rawptr + ^Type_Info case Basic_typeid: GB_ASSERT(t->Basic.size == 8); @@ -1458,16 +1458,16 @@ gb_internal void lb_register_objc_thing( LLVMSetInitializer(v.value, LLVMConstNull(t)); } - lbValue class_ptr{}; + lbValue class_ptr = {}; lbValue class_name = lb_const_value(m, t_cstring, exact_value_string(g.name)); // If this class requires an implementation, save it for registration below. if (g.class_impl_type != nullptr) { // Make sure the superclass has been initialized before us - lbValue superclass_value{}; + lbValue superclass_value = lb_const_nil(m, t_objc_Class); - auto& tn = g.class_impl_type->Named.type_name->TypeName; + auto &tn = g.class_impl_type->Named.type_name->TypeName; Type *superclass = tn.objc_superclass; if (superclass != nullptr) { auto& superclass_global = string_map_must_get(&class_map, superclass->Named.type_name->TypeName.objc_class_name); @@ -1478,7 +1478,7 @@ gb_internal void lb_register_objc_thing( } args.count = 3; - args[0] = superclass == nullptr ? lb_const_nil(m, t_objc_Class) : superclass_value; + args[0] = superclass_value; args[1] = class_name; args[2] = lb_const_int(m, t_uint, 0); class_ptr = lb_emit_runtime_call(p, "objc_allocateClassPair", args); @@ -1627,7 +1627,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { continue; } - for (const ObjcMethodData& md : *methods) { + for (const ObjcMethodData &md : *methods) { GB_ASSERT( md.proc_entity->kind == Entity_Procedure); Type *method_type = md.proc_entity->type; @@ -1640,8 +1640,8 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { wrapper_args[0] = md.ac.objc_is_class_method ? t_objc_Class : class_ptr_type; wrapper_args[1] = t_objc_SEL; - auto method_param_count = (isize)method_type->Proc.param_count; - i32 method_param_offset = 0; + isize method_param_count = method_type->Proc.param_count; + i32 method_param_offset = 0; // TODO(harold): Need to make sure (at checker stage) that the non-class method has the self parameter already. // (Maybe this is already accounted for?.) From d24bac8a36f31c59b08450d3ed0da108d0860b24 Mon Sep 17 00:00:00 2001 From: Vincent Billet Date: Tue, 29 Apr 2025 18:00:41 +0200 Subject: [PATCH 012/120] Adding windows keyboard scan codes --- core/sys/windows/scan_codes.odin | 172 +++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 core/sys/windows/scan_codes.odin diff --git a/core/sys/windows/scan_codes.odin b/core/sys/windows/scan_codes.odin new file mode 100644 index 000000000..54949c2f6 --- /dev/null +++ b/core/sys/windows/scan_codes.odin @@ -0,0 +1,172 @@ +#+build windows +package sys_windows + +// Win32 scan codes for QWERTY layout +// https://learn.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input#scan-codes + +KB_SYS_POWERDOWN :: 0xE05E +KB_SYS_SLEEP :: 0xE05F +KB_SYS_WAKEUP :: 0xE063 +KB_ERR_ROLLOVER :: 0x00FF + +KB_A :: 0x001E +KB_B :: 0x0030 +KB_C :: 0x002E +KB_D :: 0x0020 +KB_E :: 0x0012 +KB_F :: 0x0021 +KB_G :: 0x0022 +KB_H :: 0x0023 +KB_I :: 0x0017 +KB_J :: 0x0024 +KB_K :: 0x0025 +KB_L :: 0x0026 +KB_M :: 0x0032 +KB_N :: 0x0031 +KB_O :: 0x0018 +KB_P :: 0x0019 +KB_Q :: 0x0010 +KB_R :: 0x0013 +KB_S :: 0x001F +KB_T :: 0x0014 +KB_U :: 0x0016 +KB_V :: 0x002F +KB_W :: 0x0011 +KB_X :: 0x002D +KB_Y :: 0x0015 +KB_Z :: 0x002C + +KB_1_BANG :: 0x0002 +KB_2_AT :: 0x0003 +KB_3_HASH :: 0x0004 +KB_4_DOLLAR :: 0x0005 +KB_5_PERCENT :: 0x0006 +KB_6_CARET :: 0x0007 +KB_7_AMPERSAND :: 0x0008 +KB_8_STAR :: 0x0009 +KB_9_LEFTBRACKET :: 0x000A +KB_0_RIGHTBRACKET :: 0x000B + +KB_RETURN_ENTER :: 0x001C +KB_ESCAPE :: 0x0001 +KB_DELETE :: 0x000E +KB_TAB :: 0x000F +KB_SPACEBAR :: 0x0039 +KB_DASH_UNDERSCORE :: 0x000C +KB_EQUALS_PLUS :: 0x000D +KB_LEFTBRACE :: 0x001A +KB_RIGHTBRACE :: 0x001B +KB_PIPE_SLASH :: 0x002B +KB_NONUS :: 0x002B +KB_SEMICOLON_COLON :: 0x0027 +KB_APOSTR_DOUBLEQUOT :: 0x0028 +KB_GRAVEACC_TILDE :: 0x0029 +KB_COMMA :: 0x0033 +KB_PERIOD :: 0x0034 +KB_QUESTIONMARK :: 0x0035 +KB_CAPSLOCK :: 0x003A + +KB_F1 :: 0x003B +KB_F2 :: 0x003C +KB_F3 :: 0x003D +KB_F4 :: 0x003E +KB_F5 :: 0x003F +KB_F6 :: 0x0040 +KB_F7 :: 0x0041 +KB_F8 :: 0x0042 +KB_F9 :: 0x0043 +KB_F10 :: 0x0044 +KB_F11 :: 0x0057 +KB_F12 :: 0x0058 + +KB_PRINTSCREEN :: 0xE037 +KB_SCROLLLOCK :: 0x0046 +KB_PAUSE :: 0xE11D45 +KB_INSERT :: 0xE052 +KB_HOME :: 0xE047 +KB_PAGEUP :: 0xE049 +KB_DELETEFORWARD :: 0xE053 +KB_END :: 0xE04F +KB_PAGEDOWN :: 0xE051 +KB_RIGHTARROW :: 0xE04D +KB_LEFTARROW :: 0xE04B +KB_DOWNARROW :: 0xE050 +KB_UPARROW :: 0xE048 + +KP_NUMLOCK_CLEAR :: 0x0045 +KP_FORWARDSLASH :: 0xE035 +KP_STAR :: 0x0037 +KP_DASH :: 0x004A +KP_PLUS :: 0x004E +KP_ENTER :: 0xE01C +KP_1_END :: 0x004F +KP_2_DOWNARROW :: 0x0050 +KP_3_PAGEDN :: 0x0051 +KP_4_LEFTARROW :: 0x004B +KP_5 :: 0x004C +KP_6_RIGHTARROW :: 0x004D +KP_7_HOME :: 0x0047 +KP_8_UPARROW :: 0x0048 +KP_9_PAGEUP :: 0x0049 +KP_0_INSERT :: 0x0052 +KP_PERIOD :: 0x0053 + +KB_NONUS_SLASHBAR :: 0x0056 +KB_APPLICATION :: 0xE05D +KB_POWER :: 0xE05E +KB_EQUALS :: 0x0059 +KB_F13 :: 0x0064 +KB_F14 :: 0x0065 +KB_F15 :: 0x0066 +KB_F16 :: 0x0067 +KB_F17 :: 0x0068 +KB_F18 :: 0x0069 +KB_F19 :: 0x006A +KB_F20 :: 0x006B +KB_F21 :: 0x006C +KB_F22 :: 0x006D +KB_F23 :: 0x006E +KB_F24 :: 0x0076 + +KP_COMMA :: 0x007E + +KB_INTERNATIONAL1 :: 0x0073 +KB_INTERNATIONAL2 :: 0x0070 +KB_INTERNATIONAL3 :: 0x007D +KB_INTERNATIONAL4 :: 0x0079 +KB_INTERNATIONAL5 :: 0x007B +KB_INTERNATIONAL6 :: 0x005C + +KB_LANG1 :: 0x0072 +KB_LANG2 :: 0x0071 +KB_LANG3 :: 0x0078 +KB_LANG4 :: 0x0077 +KB_LANG5 :: 0x0076 + +KB_LEFTCONTROL :: 0x001D +KB_LEFTSHIFT :: 0x002A +KB_LEFTALT :: 0x0038 +KB_LEFTGUI :: 0xE05B +KB_RIGHTCONTROL :: 0xE01D +KB_RIGHTSHIFT :: 0x0036 +KB_RIGHTALT :: 0xE038 +KB_RIGHTGUI :: 0xE05C + +FN_SCANNEXTTRACK :: 0xE019 +FN_SCANPREVTRACK :: 0xE010 +FN_STOP :: 0xE024 +FN_PLAY_PAUSE :: 0xE022 +FN_MUTE :: 0xE020 +FN_VOLUMEINC :: 0xE030 +FN_VOLUMEDEC :: 0xE02E +FN_AL_CONSUMERCTRLCONFIG :: 0xE06D +FN_AL_EMAILREADER :: 0xE06C +FN_AL_CALCULATOR :: 0xE021 +FN_AL_LOCALMACHINEBROWSER :: 0xE06B +FN_AC_SEARCH :: 0xE065 +FN_AC_HOME :: 0xE032 +FN_AC_BACK :: 0xE06A +FN_AC_FORWARD :: 0xE069 +FN_AC_STOP :: 0xE068 +FN_AC_REFRESH :: 0xE067 +FN_AC_BOOKMARKS :: 0xE066 From 125b60aee0aec03bc3bd1e0ce66699cf0d562e9a Mon Sep 17 00:00:00 2001 From: Vincent Billet Date: Wed, 30 Apr 2025 17:32:11 +0200 Subject: [PATCH 013/120] First implementation of XAudio2 --- vendor/windows/XAudio2/x3daudio.odin | 233 ++++++++ vendor/windows/XAudio2/xaudio2.odin | 821 ++++++++++++++++++++++++++ vendor/windows/XAudio2/xaudio2fx.odin | 287 +++++++++ 3 files changed, 1341 insertions(+) create mode 100644 vendor/windows/XAudio2/x3daudio.odin create mode 100644 vendor/windows/XAudio2/xaudio2.odin create mode 100644 vendor/windows/XAudio2/xaudio2fx.odin diff --git a/vendor/windows/XAudio2/x3daudio.odin b/vendor/windows/XAudio2/x3daudio.odin new file mode 100644 index 000000000..d09703476 --- /dev/null +++ b/vendor/windows/XAudio2/x3daudio.odin @@ -0,0 +1,233 @@ +#+build windows + +/* NOTES: + 1. Definition of terms: + LFE: Low Frequency Effect -- always omnidirectional. + LPF: Low Pass Filter, divided into two classifications: + Direct -- Applied to the direct signal path, + used for obstruction/occlusion effects. + Reverb -- Applied to the reverb signal path, + used for occlusion effects only. + + 2. Volume level is expressed as a linear amplitude scaler: + 1.0f represents no attenuation applied to the original signal, + 0.5f denotes an attenuation of 6dB, and 0.0f results in silence. + Amplification (volume > 1.0f) is also allowed, and is not clamped. + + LPF values range from 1.0f representing all frequencies pass through, + to 0.0f which results in silence as all frequencies are filtered out. + + 3. X3DAudio uses a left-handed Cartesian coordinate system with values + on the x-axis increasing from left to right, on the y-axis from + bottom to top, and on the z-axis from near to far. + Azimuths are measured clockwise from a given reference direction. + + Distance measurement is with respect to user-defined world units. + Applications may provide coordinates using any system of measure + as all non-normalized calculations are scale invariant, with such + operations natively occurring in user-defined world unit space. + Metric constants are supplied only as a convenience. + Distance is calculated using the Euclidean norm formula. + + 4. Only real values are permissible with functions using 32-bit + float parameters -- NAN and infinite values are not accepted. + All computation occurs in 32-bit precision mode. */ + + +package windows_xaudio2 + +import "core:math" + +foreign import xa2 "system:xaudio2.lib" + +//---------------------------------------------------// +// speaker geometry configuration flags, specifies assignment of channels to speaker positions, defined as per WAVEFORMATEXTENSIBLE.dwChannelMask +SPEAKER_FLAGS :: distinct bit_set[SPEAKER_FLAG; u32] +SPEAKER_FLAG :: enum u32 { + FRONT_LEFT = 0, + FRONT_RIGHT = 1, + FRONT_CENTER = 2, + LOW_FREQUENCY = 3, + BACK_LEFT = 4, + BACK_RIGHT = 5, + FRONT_LEFT_OF_CENTER = 6, + FRONT_RIGHT_OF_CENTER = 7, + BACK_CENTER = 8, + SIDE_LEFT = 9, + SIDE_RIGHT = 10, + TOP_CENTER = 11, + TOP_FRONT_LEFT = 12, + TOP_FRONT_CENTER = 13, + TOP_FRONT_RIGHT = 14, + TOP_BACK_LEFT = 15, + TOP_BACK_CENTER = 16, + TOP_BACK_RIGHT = 17, + //RESERVED = 0x7FFC0000, // bit mask locations reserved for future use + ALL = 31, // used to specify that any possible permutation of speaker configurations +} + +// standard speaker geometry configurations, used with Initialize +SPEAKER_MONO :: SPEAKER_FLAGS{.FRONT_CENTER} +SPEAKER_STEREO :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT} +SPEAKER_2POINT1 :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .LOW_FREQUENCY} +SPEAKER_SURROUND :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .FRONT_CENTER, .BACK_CENTER} +SPEAKER_QUAD :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .BACK_LEFT, .BACK_RIGHT} +SPEAKER_4POINT1 :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .LOW_FREQUENCY, .BACK_LEFT, .BACK_RIGHT} +SPEAKER_5POINT1 :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .FRONT_CENTER, .LOW_FREQUENCY, .BACK_LEFT, .BACK_RIGHT} +SPEAKER_7POINT1 :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .FRONT_CENTER, .LOW_FREQUENCY, .BACK_LEFT, .BACK_RIGHT, .FRONT_LEFT_OF_CENTER, .FRONT_RIGHT_OF_CENTER} +SPEAKER_5POINT1_SURROUND :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .FRONT_CENTER, .LOW_FREQUENCY, .SIDE_LEFT, .SIDE_RIGHT} +SPEAKER_7POINT1_SURROUND :: SPEAKER_FLAGS{.FRONT_LEFT, .FRONT_RIGHT, .FRONT_CENTER, .LOW_FREQUENCY, .BACK_LEFT, .BACK_RIGHT, .SIDE_LEFT, .SIDE_RIGHT} + +// size of instance handle in bytes +HANDLE_BYTESIZE :: 20 + +// speed of sound in meters per second for dry air at approximately 20C, used with Initialize +SPEED_OF_SOUND :: 343.5 + +// calculation control flags, used with Calculate +CALCULATE_FLAGS :: distinct bit_set[CALCULATE_FLAG; u32] +CALCULATE_FLAG :: enum u32 { + MATRIX = 0, // enable matrix coefficient table calculation + DELAY = 1, // enable delay time array calculation (stereo final mix only) + LPF_DIRECT = 2, // enable LPF direct-path coefficient calculation + LPF_REVERB = 3, // enable LPF reverb-path coefficient calculation + REVERB = 4, // enable reverb send level calculation + DOPPLER = 5, // enable doppler shift factor calculation + EMITTER_ANGLE = 6, // enable emitter-to-listener interior angle calculation + + ZEROCENTER = 16, // do not position to front center speaker, signal positioned to remaining speakers instead, front center destination channel will be zero in returned matrix coefficient table, valid only for matrix calculations with final mix formats that have a front center channel + REDIRECT_TO_LFE = 17, // apply equal mix of all source channels to LFE destination channel, valid only for matrix calculations with sources that have no LFE channel and final mix formats that have an LFE channel +} + +//-----------------------------------------------------// +VECTOR :: [3]f32 // float 3D vector + +// instance handle of precalculated constants +HANDLE :: [HANDLE_BYTESIZE]byte + +// Distance curve point: +// Defines a DSP setting at a given normalized distance. +DISTANCE_CURVE_POINT :: struct { + Distance: f32, // normalized distance, must be within [0.0f, 1.0f] + DSPSetting: f32, // DSP setting +} + +// Distance curve: +// A piecewise curve made up of linear segments used to define DSP behaviour with respect to normalized distance. +// +// Note that curve point distances are normalized within [0.0f, 1.0f]. +// EMITTER.CurveDistanceScaler must be used to scale the normalized distances to user-defined world units. +// For distances beyond CurveDistanceScaler * 1.0f, pPoints[PointCount-1].DSPSetting is used as the DSP setting. +// +// All distance curve spans must be such that: +// pPoints[k-1].DSPSetting + ((pPoints[k].DSPSetting-pPoints[k-1].DSPSetting) / (pPoints[k].Distance-pPoints[k-1].Distance)) * (pPoints[k].Distance-pPoints[k-1].Distance) != NAN or infinite values +// For all points in the distance curve where 1 <= k < PointCount. +DISTANCE_CURVE :: struct { + pPoints: [^]DISTANCE_CURVE_POINT, // distance curve point array, must have at least PointCount elements with no duplicates and be sorted in ascending order with respect to Distance + PointCount: u32, // number of distance curve points, must be >= 2 as all distance curves must have at least two endpoints, defining DSP settings at 0.0f and 1.0f normalized distance +} +Default_LinearCurvePoints := [2]DISTANCE_CURVE_POINT{{0.0, 1.0}, {1.0, 0.0}} +Default_LinearCurve := DISTANCE_CURVE{&Default_LinearCurvePoints[0], 2} + +CONE :: struct { + InnerAngle: f32, // inner cone angle in radians, must be within [0.0f, TAU] + OuterAngle: f32, // outer cone angle in radians, must be within [InnerAngle, TAU] + + InnerVolume: f32, // volume level scaler on/within inner cone, used only for matrix calculations, must be within [0.0f, 2.0f] when used + OuterVolume: f32, // volume level scaler on/beyond outer cone, used only for matrix calculations, must be within [0.0f, 2.0f] when used + InnerLPF: f32, // LPF (both direct and reverb paths) coefficient subtrahend on/within inner cone, used only for LPF (both direct and reverb paths) calculations, must be within [0.0f, 1.0f] when used + OuterLPF: f32, // LPF (both direct and reverb paths) coefficient subtrahend on/beyond outer cone, used only for LPF (both direct and reverb paths) calculations, must be within [0.0f, 1.0f] when used + InnerReverb: f32, // reverb send level scaler on/within inner cone, used only for reverb calculations, must be within [0.0f, 2.0f] when used + OuterReverb: f32, // reverb send level scaler on/beyond outer cone, used only for reverb calculations, must be within [0.0f, 2.0f] when used +} +Default_DirectionalCone := CONE{math.PI / 2, math.PI, 1.0, 0.708, 0.0, 0.25, 0.708, 1.0} + +// Listener: +// Defines a point of 3D audio reception. +// +// The cone is directed by the listener's front orientation. +LISTENER :: struct { + OrientFront: VECTOR, // orientation of front direction, used only for matrix and delay calculations or listeners with cones for matrix, LPF (both direct and reverb paths), and reverb calculations, must be normalized when used + OrientTop: VECTOR, // orientation of top direction, used only for matrix and delay calculations, must be orthonormal with OrientFront when used + + Position: VECTOR, // position in user-defined world units, does not affect Velocity + Velocity: VECTOR, // velocity vector in user-defined world units/second, used only for doppler calculations, does not affect Position + + pCone: ^CONE, // sound cone, used only for matrix, LPF (both direct and reverb paths), and reverb calculations, NULL specifies omnidirectionality +} + +// Emitter: +// Defines a 3D audio source, divided into two classifications: +// +// Single-point -- For use with single-channel sounds. +// Positioned at the emitter base, i.e. the channel radius and azimuth are ignored if the number of channels == 1. +// +// May be omnidirectional or directional using a cone. +// The cone originates from the emitter base position, and is directed by the emitter's front orientation. +// +// Multi-point -- For use with multi-channel sounds. +// Each non-LFE channel is positioned using an azimuth along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector. +// An azimuth of TAU specifies a channel is an LFE. Such channels are positioned at the emitter base and are calculated with respect to pLFECurve only, never pVolumeCurve. +// +// Multi-point emitters are always omnidirectional, i.e. the cone is ignored if the number of channels > 1. +// +// Note that many properties are shared among all channel points, locking certain behaviour with respect to the emitter base position. +// For example, doppler shift is always calculated with respect to the emitter base position and so is constant for all its channel points. +// Distance curve calculations are also with respect to the emitter base position, with the curves being calculated independently of each other. +// For instance, volume and LFE calculations do not affect one another. +EMITTER :: struct { + pCone: ^CONE, // sound cone, used only with single-channel emitters for matrix, LPF (both direct and reverb paths), and reverb calculations, NULL specifies omnidirectionality + + OrientFront: VECTOR, // orientation of front direction, used only for emitter angle calculations or with multi-channel emitters for matrix calculations or single-channel emitters with cones for matrix, LPF (both direct and reverb paths), and reverb calculations, must be normalized when used + OrientTop: VECTOR, // orientation of top direction, used only with multi-channel emitters for matrix calculations, must be orthonormal with OrientFront when used + + Position: VECTOR, // position in user-defined world units, does not affect Velocity + Velocity: VECTOR, // velocity vector in user-defined world units/second, used only for doppler calculations, does not affect Position + + InnerRadius: f32, // inner radius, must be within [0.0f, max(f32)] + InnerRadiusAngle: f32, // inner radius angle, must be within [0.0f, PI/4.0) + + ChannelCount: u32, // number of sound channels, must be > 0 + ChannelRadius: f32, // channel radius, used only with multi-channel emitters for matrix calculations, must be >= 0.0f when used + pChannelAzimuths: [^]f32, // channel azimuth array, used only with multi-channel emitters for matrix calculations, contains positions of each channel expressed in radians along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector, or TAU to specify an LFE channel, must have at least ChannelCount elements, all within [0.0f, TAU] when used + + pVolumeCurve: ^DISTANCE_CURVE, // volume level distance curve, used only for matrix calculations, NULL specifies a default curve that conforms to the inverse square law, calculated in user-defined world units with distances <= CurveDistanceScaler clamped to no attenuation + pLFECurve: ^DISTANCE_CURVE, // LFE level distance curve, used only for matrix calculations, NULL specifies a default curve that conforms to the inverse square law, calculated in user-defined world units with distances <= CurveDistanceScaler clamped to no attenuation + pLPFDirectCurve: ^DISTANCE_CURVE, // LPF direct-path coefficient distance curve, used only for LPF direct-path calculations, NULL specifies the default curve: [0.0f,1.0f], [1.0f,0.75f] + pLPFReverbCurve: ^DISTANCE_CURVE, // LPF reverb-path coefficient distance curve, used only for LPF reverb-path calculations, NULL specifies the default curve: [0.0f,0.75f], [1.0f,0.75f] + pReverbCurve: ^DISTANCE_CURVE, // reverb send level distance curve, used only for reverb calculations, NULL specifies the default curve: [0.0f,1.0f], [1.0f,0.0f] + + CurveDistanceScaler: f32, // curve distance scaler, used to scale normalized distance curves to user-defined world units and/or exaggerate their effect, used only for matrix, LPF (both direct and reverb paths), and reverb calculations, must be within [min(f32), max(f32)] when used + DopplerScaler: f32, // doppler shift scaler, used to exaggerate doppler shift effect, used only for doppler calculations, must be within [0.0f, max(f32)] when used +} + +// DSP settings: +// Receives results from a call to Calculate to be sent to the low-level audio rendering API for 3D signal processing. +// +// The user is responsible for allocating the matrix coefficient table, delay time array, and initializing the channel counts when used. +DSP_SETTINGS :: struct { + pMatrixCoefficients: [^]f32, // [inout] matrix coefficient table, receives an array representing the volume level used to send from source channel S to destination channel D, stored as pMatrixCoefficients[SrcChannelCount * D + S], must have at least SrcChannelCount*DstChannelCount elements + pDelayTimes: [^]f32, // [inout] delay time array, receives delays for each destination channel in milliseconds, must have at least DstChannelCount elements (stereo final mix only) + SrcChannelCount: u32, // [in] number of source channels, must equal number of channels in respective emitter + DstChannelCount: u32, // [in] number of destination channels, must equal number of channels of the final mix + + LPFDirectCoefficient: f32, // [out] LPF direct-path coefficient + LPFReverbCoefficient: f32, // [out] LPF reverb-path coefficient + ReverbLevel: f32, // [out] reverb send level + DopplerFactor: f32, // [out] doppler shift factor, scales resampler ratio for doppler shift effect, where the effective frequency = DopplerFactor * original frequency + EmitterToListenerAngle: f32, // [out] emitter-to-listener interior angle, expressed in radians with respect to the emitter's front orientation + + EmitterToListenerDistance: f32, // [out] distance in user-defined world units from the emitter base to listener position, always calculated + EmitterVelocityComponent: f32, // [out] component of emitter velocity vector projected onto emitter->listener vector in user-defined world units/second, calculated only for doppler + ListenerVelocityComponent: f32, // [out] component of listener velocity vector projected onto emitter->listener vector in user-defined world units/second, calculated only for doppler +} + +//-------------------------------------------------------// +@(default_calling_convention="system", link_prefix="X3DAudio") +foreign xa2 { + // initializes instance handle + Initialize :: proc(SpeakerChannelMask: SPEAKER_FLAGS, SpeedOfSound: f32, Instance: HANDLE) -> HRESULT --- + + // calculates DSP settings with respect to 3D parameters + Calculate :: proc(Instance: HANDLE, pListener: ^LISTENER, pEmitter: ^EMITTER, Flags: CALCULATE_FLAGS, pDSPSettings: ^DSP_SETTINGS) --- +} diff --git a/vendor/windows/XAudio2/xaudio2.odin b/vendor/windows/XAudio2/xaudio2.odin new file mode 100644 index 000000000..231b41a90 --- /dev/null +++ b/vendor/windows/XAudio2/xaudio2.odin @@ -0,0 +1,821 @@ +#+build windows +/* + Bindings for Windows XAudio2: + https://learn.microsoft.com/en-us/windows/win32/xaudio2/xaudio2-introduction + + Compiling for Windows 10 RS5 (1809) and later +*/ + +package windows_xaudio2 + +import win "core:sys/windows" +import "core:math" + +foreign import xa2 "system:xaudio2.lib" + +HRESULT :: win.HRESULT +IUnknown :: win.IUnknown +IUnknown_VTable :: win.IUnknown_VTable +IID :: win.IID + +/************************************************************************** + * + * XAudio2 constants, flags and error codes. + * + **************************************************************************/ + +// Numeric boundary values +MAX_BUFFER_BYTES :: 0x80000000 // Maximum bytes allowed in a source buffer +MAX_QUEUED_BUFFERS :: 64 // Maximum buffers allowed in a voice queue +MAX_BUFFERS_SYSTEM :: 2 // Maximum buffers allowed for system threads (Xbox 360 only) +MAX_AUDIO_CHANNELS :: 64 // Maximum channels in an audio stream +MIN_SAMPLE_RATE :: 1000 // Minimum audio sample rate supported +MAX_SAMPLE_RATE :: 200000 // Maximum audio sample rate supported +MAX_VOLUME_LEVEL :: 16777216.0 // Maximum acceptable volume level (2^24) +MIN_FREQ_RATIO :: (1.0 / 1024.0) // Minimum SetFrequencyRatio argument +MAX_FREQ_RATIO :: 1024.0 // Maximum MaxFrequencyRatio argument +DEFAULT_FREQ_RATIO :: 2.0 // Default MaxFrequencyRatio argument +MAX_FILTER_ONEOVERQ :: 1.5 // Maximum FILTER_PARAMETERS.OneOverQ +MAX_FILTER_FREQUENCY :: 1.0 // Maximum FILTER_PARAMETERS.Frequency +MAX_LOOP_COUNT :: 254 // Maximum non-infinite BUFFER.LoopCount +MAX_INSTANCES :: 8 // Maximum simultaneous XAudio2 objects on Xbox 360 + +// For XMA voices on Xbox 360 there is an additional restriction on the MaxFrequencyRatio argument and the voice's sample rate: the product of these numbers cannot exceed 600000 for one-channel voices or 300000 for voices with more than one channel. +MAX_RATIO_TIMES_RATE_XMA_MONO :: 600000 +MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL :: 300000 + +// Numeric values with special meanings +COMMIT_NOW :: 0 // Used as an OperationSet argument +COMMIT_ALL :: 0 // Used in IXAudio2.CommitChanges +INVALID_OPSET :: 0xffffffff // Not allowed for OperationSet arguments +NO_LOOP_REGION :: 0 // Used in BUFFER.LoopCount +LOOP_INFINITE :: 255 // Used in BUFFER.LoopCount +DEFAULT_CHANNELS :: 0 // Used in CreateMasteringVoice +DEFAULT_SAMPLERATE :: 0 // Used in CreateMasteringVoice + +// Flags +FLAGS :: distinct bit_set[FLAG; u32] +FLAG :: enum u32 { + DEBUG_ENGINE = 0, // Used in Create + VOICE_NOPITCH = 1, // Used in IXAudio2.CreateSourceVoice + VOICE_NOSRC = 2, // Used in IXAudio2.CreateSourceVoice + VOICE_USEFILTER = 3, // Used in IXAudio2.CreateSource/SubmixVoice + PLAY_TAILS = 5, // Used in IXAudio2SourceVoice.Stop + END_OF_STREAM = 6, // Used in BUFFER.Flags + SEND_USEFILTER = 7, // Used in SEND_DESCRIPTOR.Flags + VOICE_NOSAMPLESPLAYED = 8, // Used in IXAudio2SourceVoice.GetState + STOP_ENGINE_WHEN_IDLE = 13, // Used in Create to force the engine to Stop when no source voices are Started, and Start when a voice is Started + QUANTUM_1024 = 15, // Used in Create to specify nondefault processing quantum of 21.33 ms (1024 samples at 48KHz) + NO_VIRTUAL_AUDIO_CLIENT = 16, // Used in CreateMasteringVoice to create a virtual audio client +} + +// Default parameters for the built-in filter +DEFAULT_FILTER_TYPE :: FILTER_TYPE.LowPassFilter +DEFAULT_FILTER_FREQUENCY :: MAX_FILTER_FREQUENCY +DEFAULT_FILTER_ONEOVERQ :: 1.0 + +// Internal XAudio2 constants +// The audio frame quantum can be calculated by reducing the fraction: +// SamplesPerAudioFrame / SamplesPerSecond +QUANTUM_NUMERATOR :: 1 // On Windows, XAudio2 processes audio +QUANTUM_DENOMINATOR :: 100 // in 10ms chunks (= 1/100 seconds) +QUANTUM_MS :: (1000.0 * QUANTUM_NUMERATOR / QUANTUM_DENOMINATOR) + +// XAudio2 error codes +INVALID_CALL :: HRESULT(-0x7769FFFF) // An API call or one of its arguments was illegal +XMA_DECODER_ERROR :: HRESULT(-0x7769FFFE) // The XMA hardware suffered an unrecoverable error +XAPO_CREATION_FAILED :: HRESULT(-0x7769FFFD) // XAudio2 failed to initialize an XAPO effect +DEVICE_INVALIDATED :: HRESULT(-0x7769FFFC) // An audio device became unusable (unplugged, etc) + + +/************************************************************************** + * + * XAudio2 structures and enumerations. + * + **************************************************************************/ + +// Used in Create, specifies which CPU(s) to use. +PROCESSOR_FLAGS :: distinct bit_set[PROCESOR_FLAG; u32] +PROCESOR_FLAG :: enum u32 { + Processor1 = 0, + Processor2 = 1, + Processor3 = 2, + Processor4 = 3, + Processor5 = 4, + Processor6 = 5, + Processor7 = 6, + Processor8 = 7, + Processor9 = 8, + Processor10 = 9, + Processor11 = 10, + Processor12 = 11, + Processor13 = 12, + Processor14 = 13, + Processor15 = 14, + Processor16 = 15, + Processor17 = 16, + Processor18 = 17, + Processor19 = 18, + Processor20 = 19, + Processor21 = 20, + Processor22 = 21, + Processor23 = 22, + Processor24 = 23, + Processor25 = 24, + Processor26 = 25, + Processor27 = 26, + Processor28 = 27, + Processor29 = 28, + Processor30 = 29, + Processor31 = 30, + Processor32 = 31, +} + +USE_DEFAULT_PROCESSOR :: PROCESSOR_FLAGS{} + +// Returned by IXAudio2Voice.GetVoiceDetails +VOICE_DETAILS :: struct { + CreatingFlags: FLAGS, + ActiveFlags: FLAGS, + InputChannels: u32, + InputSampleRate: u32, +} + +// Used in VOICE_SENDS below +SEND_DESCRIPTOR :: struct { + Flags: FLAGS, // Either 0 or SEND_USEFILTER. + pOutputVoice: ^IXAudio2Voice, // This send's destination voice. +} + +// Used in the voice creation functions and in IXAudio2Voice.SetOutputVoices +VOICE_SENDS :: struct { + SendCount: u32, // Number of sends from this voice. + pSends: [^]SEND_DESCRIPTOR, // Array of SendCount send descriptors. +} + +// Used in EFFECT_CHAIN below +EFFECT_DESCRIPTOR :: struct { + pEffect: ^IUnknown, // Pointer to the effect object's IUnknown interface. + InitialState: bool, // TRUE if the effect should begin in the enabled state. + OutputChannels: u32, // How many output channels the effect should produce. +} + +// Used in the voice creation functions and in IXAudio2Voice.SetEffectChain +EFFECT_CHAIN :: struct { + EffectCount: u32, // Number of effects in this voice's effect chain. + pEffectDescriptors: [^]EFFECT_DESCRIPTOR, // Array of effect descriptors. +} + +// Used in FILTER_PARAMETERS below +FILTER_TYPE :: enum i32 { + LowPassFilter, // Attenuates frequencies above the cutoff frequency (state-variable filter). + BandPassFilter, // Attenuates frequencies outside a given range (state-variable filter). + HighPassFilter, // Attenuates frequencies below the cutoff frequency (state-variable filter). + NotchFilter, // Attenuates frequencies inside a given range (state-variable filter). + LowPassOnePoleFilter, // Attenuates frequencies above the cutoff frequency (one-pole filter, FILTER_PARAMETERS.OneOverQ has no effect) + HighPassOnePoleFilter, // Attenuates frequencies below the cutoff frequency (one-pole filter, FILTER_PARAMETERS.OneOverQ has no effect) +} + +// Used in IXAudio2Voice.Set/GetFilterParameters and Set/GetOutputFilterParameters +FILTER_PARAMETERS :: struct { + Type: FILTER_TYPE, // Filter type. + Frequency: f32, // Filter coefficient. Must be >= 0 and <= MAX_FILTER_FREQUENCY. See CutoffFrequencyToRadians() for state-variable filter types and CutoffFrequencyToOnePoleCoefficient() for one-pole filter types. + OneOverQ: f32, // Reciprocal of the filter's quality factor Q; must be > 0 and <= MAX_FILTER_ONEOVERQ. Has no effect for one-pole filters. +} + +// Used in IXAudio2SourceVoice.SubmitSourceBuffer +BUFFER :: struct { + Flags: FLAGS, // Either 0 or END_OF_STREAM. + AudioBytes: u32, // Size of the audio data buffer in bytes. + pAudioData: [^]byte, // Pointer to the audio data buffer. + PlayBegin: u32, // First sample in this buffer to be played. + PlayLength: u32, // Length of the region to be played in samples, or 0 to play the whole buffer. + LoopBegin: u32, // First sample of the region to be looped. + LoopLength: u32, // Length of the desired loop region in samples, or 0 to loop the entire buffer. + LoopCount: u32, // Number of times to repeat the loop region, or LOOP_INFINITE to loop forever. + pContext: rawptr, // Context value to be passed back in callbacks. +} + +// Used in IXAudio2SourceVoice.SubmitSourceBuffer when submitting XWMA data. +// NOTE: If an XWMA sound is submitted in more than one buffer, each buffer's pDecodedPacketCumulativeBytes[PacketCount-1] value must be subtracted from all the entries in the next buffer's pDecodedPacketCumulativeBytes array. +// And whether a sound is submitted in more than one buffer or not, the final buffer of the sound should use the END_OF_STREAM flag, or else the client must call IXAudio2SourceVoice.Discontinuity after submitting it. +BUFFER_WMA :: struct { + pDecodedPacketCumulativeBytes: [^]u32, // Decoded packet's cumulative size array. Each element is the number of bytes accumulated when the corresponding XWMA packet is decoded in order. The array must have PacketCount elements. + PacketCount: u32, // Number of XWMA packets submitted. Must be >= 1 and divide evenly into BUFFER.AudioBytes. +} + +// Returned by IXAudio2SourceVoice.GetState +VOICE_STATE :: struct { + pCurrentBufferContext: rawptr, // The pContext value provided in the BUFFER that is currently being processed, or NULL if there are no buffers in the queue. + BuffersQueued: u32, // Number of buffers currently queued on the voice (including the one that is being processed). + SamplesPlayed: u64, // Total number of samples produced by the voice since it began processing the current audio stream. If VOICE_NOSAMPLESPLAYED is specified in the call to IXAudio2SourceVoice.GetState, this member will not be calculated, saving CPU. +} + +// Returned by IXAudio2.GetPerformanceData +PERFORMANCE_DATA :: struct { + // CPU usage information + AudioCyclesSinceLastQuery: u64, // CPU cycles spent on audio processing since the last call to StartEngine or GetPerformanceData. + TotalCyclesSinceLastQuery: u64, // Total CPU cycles elapsed since the last call (only counts the CPU XAudio2 is running on). + MinimumCyclesPerQuantum: u32, // Fewest CPU cycles spent processing any one audio quantum since the last call. + MaximumCyclesPerQuantum: u32, // Most CPU cycles spent processing any one audio quantum since the last call. + + // Memory usage information + MemoryUsageInBytes: u32, // Total heap space currently in use. + + // Audio latency and glitching information + CurrentLatencyInSamples: u32, // Minimum delay from when a sample is read from a source buffer to when it reaches the speakers. + GlitchesSinceEngineStarted: u32, // Audio dropouts since the engine was started. + + // Data about XAudio2's current workload + ActiveSourceVoiceCount: u32, // Source voices currently playing. + TotalSourceVoiceCount: u32, // Source voices currently existing. + ActiveSubmixVoiceCount: u32, // Submix voices currently playing/existing. + + ActiveResamplerCount: u32, // Resample xAPOs currently active. + ActiveMatrixMixCount: u32, // MatrixMix xAPOs currently active. + + // Usage of the hardware XMA decoder (Xbox 360 only) + ActiveXmaSourceVoices: u32, // Number of source voices decoding XMA data. + ActiveXmaStreams: u32, // A voice can use more than one XMA stream. +} + +// Used in IXAudio2.SetDebugConfiguration +DEBUG_CONFIGURATION :: struct { + TraceMask: DEBUG_CONFIG_FLAGS, // Bitmap of enabled debug message types. + BreakMask: DEBUG_CONFIG_FLAGS, // Message types that will break into the debugger. + LogThreadID: bool, // Whether to log the thread ID with each message. + LogFileline: bool, // Whether to log the source file and line number. + LogFunctionName: bool, // Whether to log the function name. + LogTiming: bool, // Whether to log message timestamps. +} + +// Values for the TraceMask and BreakMask bitmaps. Only ERRORS and WARNINGS are valid in BreakMask. +// WARNINGS implies ERRORS, DETAIL implies INFO, and FUNC_CALLS implies API_CALLS. +// By default, TraceMask is ERRORS and WARNINGS and all the other settings are zero. +DEBUG_CONFIG_FLAGS :: distinct bit_set[DEBUG_CONFIG_FLAG; u32] +DEBUG_CONFIG_FLAG :: enum u32 { + ERRORS = 0, // For handled errors with serious effects. + WARNINGS = 1, // For handled errors that may be recoverable. + INFO = 2, // Informational chit-chat (e.g. state changes). + DETAIL = 3, // More detailed chit-chat. + API_CALLS = 4, // Public API function entries and exits. + FUNC_CALLS = 5, // Internal function entries and exits. + TIMING = 6, // Delays detected and other timing data. + LOCKS = 7, // Usage of critical sections and mutexes. + MEMORY = 8, // Memory heap usage information. + STREAMING = 12, // Audio streaming information. +} + +/************************************************************************** + * + * IXAudio2: Top-level XAudio2 COM interface. + * + **************************************************************************/ + +IXAudio2_UUID_STRING :: "2B02E3CF-2E0B-4ec3-BE45-1B2A3FE7210D" +IXAudio2_UUID := &IID{0x2B02E3CF, 0x2E0B, 0x4ec3, {0xBE, 0x45, 0x1B, 0x2A, 0x3F, 0xE7, 0x21, 0x0D}} +IXAudio2 :: struct #raw_union { + #subtype iunknown: IUnknown, + using ixaudio2_vtable: ^IXAudio2_VTable, +} +IXAudio2_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + + // NAME: IXAudio2.RegisterForCallbacks + // DESCRIPTION: Adds a new client to receive XAudio2's engine callbacks. + // ARGUMENTS: + // pCallback - Callback interface to be called during each processing pass. + RegisterForCallbacks: proc "system" (this: ^IXAudio2, pCallback: ^IXAudio2EngineCallback) -> HRESULT, + + // NAME: IXAudio2.UnregisterForCallbacks + // DESCRIPTION: Removes an existing receiver of XAudio2 engine callbacks. + // ARGUMENTS: + // pCallback - Previously registered callback interface to be removed. + UnregisterForCallbacks: proc "system" (this: ^IXAudio2, pCallback: ^IXAudio2EngineCallback), + + // NAME: IXAudio2.CreateSourceVoice + // DESCRIPTION: Creates and configures a source voice. + // ARGUMENTS: + // ppSourceVoice - Returns the new object's IXAudio2SourceVoice interface. + // pSourceFormat - Format of the audio that will be fed to the voice. + // Flags - VOICE flags specifying the source voice's behavior. + // MaxFrequencyRatio - Maximum SetFrequencyRatio argument to be allowed. + // pCallback - Optional pointer to a client-provided callback interface. + // pSendList - Optional list of voices this voice should send audio to. + // pEffectChain - Optional list of effects to apply to the audio data. + CreateSourceVoice: proc "system" (this: ^IXAudio2, ppSourceVoice: ^^IXAudio2SourceVoice, pSourceFormat: ^win.WAVEFORMATEX, Flags: FLAGS = {}, MaxFrequencyRatio: f32 = DEFAULT_FREQ_RATIO, pCallback: ^IXAudio2VoiceCallback = nil, pSendList: [^]VOICE_SENDS = nil, pEffectChain: [^]EFFECT_CHAIN = nil) -> HRESULT, + + // NAME: IXAudio2.CreateSubmixVoice + // DESCRIPTION: Creates and configures a submix voice. + // ARGUMENTS: + // ppSubmixVoice - Returns the new object's IXAudio2SubmixVoice interface. + // InputChannels - Number of channels in this voice's input audio data. + // InputSampleRate - Sample rate of this voice's input audio data. + // Flags - VOICE flags specifying the submix voice's behavior. + // ProcessingStage - Arbitrary number that determines the processing order. + // pSendList - Optional list of voices this voice should send audio to. + // pEffectChain - Optional list of effects to apply to the audio data. + CreateSubmixVoice: proc "system" (this: ^IXAudio2, ppSubmixVoice: ^^IXAudio2SubmixVoice, InputChannels: u32, InputSampleRate: u32, Flags: FLAGS = {}, ProcessingStage: u32 = 0, pSendList: [^]VOICE_SENDS = nil, pEffectChain: [^]EFFECT_CHAIN = nil) -> HRESULT, + + // NAME: IXAudio2.CreateMasteringVoice + // DESCRIPTION: Creates and configures a mastering voice. + // ARGUMENTS: + // ppMasteringVoice - Returns the new object's IXAudio2MasteringVoice interface. + // InputChannels - Number of channels in this voice's input audio data. + // InputSampleRate - Sample rate of this voice's input audio data. + // Flags - VOICE flags specifying the mastering voice's behavior. + // szDeviceId - Identifier of the device to receive the output audio. + // pEffectChain - Optional list of effects to apply to the audio data. + // StreamCategory - The audio stream category to use for this mastering voice + CreateMasteringVoice: proc "system" (this: ^IXAudio2, ppMasteringVoice: ^^IXAudio2MasteringVoice, InputChannels: u32 = DEFAULT_CHANNELS, InputSampleRate: u32 = DEFAULT_SAMPLERATE, Flags: FLAGS = {}, szDeviceId: win.LPCWSTR = nil, pEffectChain: [^]EFFECT_CHAIN = nil, StreamCategory: AUDIO_STREAM_CATEGORY = .GameEffects) -> HRESULT, + + // NAME: IXAudio2.:StartEngine + // DESCRIPTION: Creates and starts the audio processing thread. + StartEngine: proc "system" (this: ^IXAudio2) -> HRESULT, + + // NAME: IXAudio2.StopEngine + // DESCRIPTION: Stops and destroys the audio processing thread. + StopEngine: proc "system" (this: ^IXAudio2), + + // NAME: IXAudio2.CommitChanges + // DESCRIPTION: Atomically applies a set of operations previously tagged + // with a given identifier. + // ARGUMENTS: + // OperationSet - Identifier of the set of operations to be applied. + CommitChanges: proc "system" (this: ^IXAudio2, OperationSet: u32) -> HRESULT, + + // NAME: IXAudio2.GetPerformanceData + // DESCRIPTION: Returns current resource usage details: memory, CPU, etc. + // ARGUMENTS: + // pPerfData - Returns the performance data structure. + GetPerformanceData: proc "system" (this: ^IXAudio2, pPerfData: ^PERFORMANCE_DATA), + + // NAME: IXAudio2.SetDebugConfiguration + // DESCRIPTION: Configures XAudio2's debug output (in debug builds only). + // ARGUMENTS: + // pDebugConfiguration - Structure describing the debug output behavior. + // pReserved - Optional parameter; must be NULL. + SetDebugConfiguration: proc "system" (this: ^IXAudio2, pDebugConfiguration: ^DEBUG_CONFIGURATION, pReserved: rawptr = nil), +} + +// This interface extends IXAudio2 with additional functionality. +// Use IXAudio2.QueryInterface to obtain a pointer to this interface. +IXAudio2Extension_UUID_STRING :: "84ac29bb-d619-44d2-b197-e4acf7df3ed6" +IXAudio2Extension_UUID := &IID{0x84ac29bb, 0xd619, 0x44d2, {0xb1, 0x97, 0xe4, 0xac, 0xf7, 0xdf, 0x3e, 0xd6}} +IXAudio2Extension :: struct #raw_union { + #subtype iunknown: IUnknown, + using ixaudio2extension_vtable: ^IXAudio2Extension_VTable, +} +IXAudio2Extension_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + + // NAME: IXAudio2Extension.GetProcessingQuantum + // DESCRIPTION: Returns the processing quantum + // quantumMilliseconds = (1000.0f * quantumNumerator / quantumDenominator) + // ARGUMENTS: + // quantumNumerator - Quantum numerator + // quantumDenominator - Quantum denominator + GetProcessingQuantum: proc "system" (this: ^IXAudio2Extension, quantumNumerator: ^u32, quantumDenominator: ^u32), + + // NAME: IXAudio2Extension.GetProcessor + // DESCRIPTION: Returns the number of the processor used by XAudio2 + // ARGUMENTS: + // processor - Non-zero Processor number + GetProcessor: proc "system" (this: ^IXAudio2Extension, processor: ^PROCESSOR_FLAGS), +} + +/************************************************************************** + * + * IXAudio2Voice: Base voice management interface. + * + **************************************************************************/ + +IXAudio2Voice :: struct { + using ixaudio2voice_vtable: ^IXAudio2Voice_VTable, +} +IXAudio2Voice_VTable :: struct { + // NAME: IXAudio2Voice.GetVoiceDetails + // DESCRIPTION: Returns the basic characteristics of this voice. + // ARGUMENTS: + // pVoiceDetails - Returns the voice's details. + GetVoiceDetails: proc "system" (this: ^IXAudio2Voice, pVoiceDetails: ^VOICE_DETAILS), + + // NAME: IXAudio2Voice.SetOutputVoices + // DESCRIPTION: Replaces the set of submix/mastering voices that receive + // this voice's output. + // ARGUMENTS: + // pSendList - Optional list of voices this voice should send audio to. + SetOutputVoices: proc "system" (this: ^IXAudio2Voice, pSendList: [^]VOICE_SENDS) -> HRESULT, + + // NAME: IXAudio2Voice.SetEffectChain + // DESCRIPTION: Replaces this voice's current effect chain with a new one. + // ARGUMENTS: + // pEffectChain - Structure describing the new effect chain to be used. + SetEffectChain: proc "system" (this: ^IXAudio2Voice, pEffectChain: ^EFFECT_CHAIN) -> HRESULT, + + // NAME: IXAudio2Voice.EnableEffect + // DESCRIPTION: Enables an effect in this voice's effect chain. + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // OperationSet - Used to identify this call as part of a deferred batch. + EnableEffect: proc "system" (this: ^IXAudio2Voice, EffectIndex: u32, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.DisableEffect + // DESCRIPTION: Disables an effect in this voice's effect chain. + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // OperationSet - Used to identify this call as part of a deferred batch. + DisableEffect: proc "system" (this: ^IXAudio2Voice, EffectIndex: u32, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.GetEffectState + // DESCRIPTION: Returns the running state of an effect. + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // pEnabled - Returns the enabled/disabled state of the given effect. + GetEffectState: proc "system" (this: ^IXAudio2Voice, EffectIndex: u32, pEnabled: ^bool), + + // NAME: IXAudio2Voice.SetEffectParameters + // DESCRIPTION: Sets effect-specific parameters. + // REMARKS: Unlike IXAPOParameters.SetParameters, this method may be called from any thread. XAudio2 implements appropriate synchronization to copy the parameters to the realtime audio processing thread. + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // pParameters - Pointer to an effect-specific parameters block. + // ParametersByteSize - Size of the pParameters array in bytes. + // OperationSet - Used to identify this call as part of a deferred batch. + SetEffectParameters: proc "system" (this: ^IXAudio2Voice, EffectIndex: u32, pParameters: rawptr, ParametersByteSize: u32, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.GetEffectParameters + // DESCRIPTION: Obtains the current effect-specific parameters. + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // pParameters - Returns the current values of the effect-specific parameters. + // ParametersByteSize - Size of the pParameters array in bytes. + GetEffectParameters: proc "system" (this: ^IXAudio2Voice, EffectIndex: u32, pParameters: rawptr, ParametersByteSize: u32) -> HRESULT, + + // NAME: IXAudio2Voice.SetFilterParameters + // DESCRIPTION: Sets this voice's filter parameters. + // ARGUMENTS: + // pParameters - Pointer to the filter's parameter structure. + // OperationSet - Used to identify this call as part of a deferred batch. + SetFilterParameters: proc "system" (this: ^IXAudio2Voice, pParameters: ^FILTER_PARAMETERS, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.GetFilterParameters + // DESCRIPTION: Returns this voice's current filter parameters. + // ARGUMENTS: + // pParameters - Returns the filter parameters. + GetFilterParameters: proc "system" (this: ^IXAudio2Voice, pParameters: ^FILTER_PARAMETERS), + + // NAME: IXAudio2Voice.SetOutputFilterParameters + // DESCRIPTION: Sets the filter parameters on one of this voice's sends. + // ARGUMENTS: + // pDestinationVoice - Destination voice of the send whose filter parameters will be set. + // pParameters - Pointer to the filter's parameter structure. + // OperationSet - Used to identify this call as part of a deferred batch. + SetOutputFilterParameters: proc "system" (this: ^IXAudio2Voice, pDestinationVoice: ^IXAudio2Voice, pParameters: ^FILTER_PARAMETERS, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.GetOutputFilterParameters + // DESCRIPTION: Returns the filter parameters from one of this voice's sends. + // ARGUMENTS: + // pDestinationVoice - Destination voice of the send whose filter parameters will be read. + // pParameters - Returns the filter parameters. + GetOutputFilterParameters: proc "system" (this: ^IXAudio2Voice, pDestinationVoice: ^IXAudio2Voice, pParameters: ^FILTER_PARAMETERS), + + // NAME: IXAudio2Voice.SetVolume + // DESCRIPTION: Sets this voice's overall volume level. + // ARGUMENTS: + // Volume - New overall volume level to be used, as an amplitude factor. + // OperationSet - Used to identify this call as part of a deferred batch. + SetVolume: proc "system" (this: ^IXAudio2Voice, Volume: f32, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.GetVolume + // DESCRIPTION: Obtains this voice's current overall volume level. + // ARGUMENTS: + // pVolume: Returns the voice's current overall volume level. + GetVolume: proc "system" (this: ^IXAudio2Voice, pVolume: ^f32), + + // NAME: IXAudio2Voice.SetChannelVolumes + // DESCRIPTION: Sets this voice's per-channel volume levels. + // ARGUMENTS: + // Channels - Used to confirm the voice's channel count. + // pVolumes - Array of per-channel volume levels to be used. + // OperationSet - Used to identify this call as part of a deferred batch. + SetChannelVolumes: proc "system" (this: ^IXAudio2Voice, Channels: u32, pVolumes: [^]f32, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.GetChannelVolumes + // DESCRIPTION: Returns this voice's current per-channel volume levels. + // ARGUMENTS: + // Channels - Used to confirm the voice's channel count. + // pVolumes - Returns an array of the current per-channel volume levels. + GetChannelVolumes: proc "system" (this: ^IXAudio2Voice, Channels: u32, pVolumes: [^]f32), + + // NAME: IXAudio2Voice.SetOutputMatrix + // DESCRIPTION: Sets the volume levels used to mix from each channel of this voice's output audio to each channel of a given destination voice's input audio. + // ARGUMENTS: + // pDestinationVoice - The destination voice whose mix matrix to change. + // SourceChannels - Used to confirm this voice's output channel count (the number of channels produced by the last effect in the chain). + // DestinationChannels - Confirms the destination voice's input channels. + // pLevelMatrix - Array of [SourceChannels * DestinationChannels] send levels. The level used to send from source channel S to destination channel D should be in pLevelMatrix[S + SourceChannels * D]. + // OperationSet - Used to identify this call as part of a deferred batch. + SetOutputMatrix: proc "system" (this: ^IXAudio2Voice, pDestinationVoice: ^IXAudio2Voice, SourceChannels: u32, DestinationChannels: u32, pLevelMatrix: [^]f32, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2Voice.GetOutputMatrix + // DESCRIPTION: Obtains the volume levels used to send each channel of this voice's output audio to each channel of a given destination voice's input audio. + // ARGUMENTS: + // pDestinationVoice - The destination voice whose mix matrix to obtain. + // SourceChannels - Used to confirm this voice's output channel count (the number of channels produced by the last effect in the chain). + // DestinationChannels - Confirms the destination voice's input channels. + // pLevelMatrix - Array of send levels, as above. + GetOutputMatrix: proc "system" (this: ^IXAudio2Voice, pDestinationVoice: ^IXAudio2Voice, SourceChannels: u32, DestinationChannels: u32, pLevelMatrix: [^]f32), + + // NAME: IXAudio2Voice.DestroyVoice + // DESCRIPTION: Destroys this voice, stopping it if necessary and removing it from the XAudio2 graph. + DestroyVoice: proc "system" (this: ^IXAudio2Voice), +} + +/************************************************************************** + * + * IXAudio2SourceVoice: Source voice management interface. + * + **************************************************************************/ + +IXAudio2SourceVoice :: struct #raw_union { + #subtype ixaudio2voice: IXAudio2Voice, + using ixaudio2sourcevoice_vtable: ^IXAudio2SourceVoice_VTable, +} +IXAudio2SourceVoice_VTable :: struct { + using ixaudio2voice_vtable: IXAudio2Voice_VTable, + + // NAME: IXAudio2SourceVoice.Start + // DESCRIPTION: Makes this voice start consuming and processing audio. + // ARGUMENTS: + // Flags - Flags controlling how the voice should be started. + // OperationSet - Used to identify this call as part of a deferred batch. + Start: proc "system" (this: ^IXAudio2SourceVoice, Flags: FLAGS = {}, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2SourceVoice.Stop + // DESCRIPTION: Makes this voice stop consuming audio. + // ARGUMENTS: + // Flags - Flags controlling how the voice should be stopped. + // OperationSet - Used to identify this call as part of a deferred batch. + Stop: proc "system" (this: ^IXAudio2SourceVoice, Flags: FLAGS = {}, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2SourceVoice.SubmitSourceBuffer + // DESCRIPTION: Adds a new audio buffer to this voice's input queue. + // ARGUMENTS: + // pBuffer - Pointer to the buffer structure to be queued. + // pBufferWMA - Additional structure used only when submitting XWMA data. + SubmitSourceBuffer: proc "system" (this: ^IXAudio2SourceVoice, pBuffer: ^BUFFER, pBufferWMA: ^BUFFER_WMA = nil) -> HRESULT, + + // NAME: IXAudio2SourceVoice.FlushSourceBuffers + // DESCRIPTION: Removes all pending audio buffers from this voice's queue. + FlushSourceBuffers: proc "system" (this: ^IXAudio2SourceVoice) -> HRESULT, + + // NAME: IXAudio2SourceVoice.Discontinuity + // DESCRIPTION: Notifies the voice of an intentional break in the stream of audio buffers (e.g. the end of a sound), to prevent XAudio2 from interpreting an empty buffer queue as a glitch. + Discontinuity: proc "system" (this: ^IXAudio2SourceVoice) -> HRESULT, + + // NAME: IXAudio2SourceVoice.ExitLoop + // DESCRIPTION: Breaks out of the current loop when its end is reached. + // ARGUMENTS: + // OperationSet - Used to identify this call as part of a deferred batch. + ExitLoop: proc "system" (this: ^IXAudio2SourceVoice, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2SourceVoice.GetState + // DESCRIPTION: Returns the number of buffers currently queued on this voice, the pContext value associated with the currently processing buffer (if any), and other voice state information. + // ARGUMENTS: + // pVoiceState - Returns the state information. + // Flags - Flags controlling what voice state is returned. + GetState: proc "system" (this: ^IXAudio2SourceVoice, pVoiceState: ^VOICE_STATE, Flags: FLAGS = {}), + + // NAME: IXAudio2SourceVoice.SetFrequencyRatio + // DESCRIPTION: Sets this voice's frequency adjustment, i.e. its pitch. + // ARGUMENTS: + // Ratio - Frequency change, expressed as source frequency / target frequency. + // OperationSet - Used to identify this call as part of a deferred batch. + SetFrequencyRatio: proc "system" (this: ^IXAudio2SourceVoice, Ratio: f32, OperationSet: u32 = COMMIT_NOW) -> HRESULT, + + // NAME: IXAudio2SourceVoice.GetFrequencyRatio + // DESCRIPTION: Returns this voice's current frequency adjustment ratio. + // ARGUMENTS: + // pRatio - Returns the frequency adjustment. + GetFrequencyRatio: proc "system" (this: ^IXAudio2SourceVoice, pRatio: ^f32), + + // NAME: IXAudio2SourceVoice.SetSourceSampleRate + // DESCRIPTION: Reconfigures this voice to treat its source data as being at a different sample rate than the original one specified in CreateSourceVoice's pSourceFormat argument. + // ARGUMENTS: + // UINT32 - The intended sample rate of further submitted source data. + SetSourceSampleRate: proc "system" (this: ^IXAudio2SourceVoice, NewSourceSampleRate: u32) -> HRESULT, +} + +/************************************************************************** + * + * IXAudio2SubmixVoice: Submixing voice management interface. + * + **************************************************************************/ + +IXAudio2SubmixVoice :: struct #raw_union { + #subtype ixaudio2voice: IXAudio2Voice, + using ixaudio2submixvoice_vtable: ^IXAudio2SubmixVoice_VTable, +} +IXAudio2SubmixVoice_VTable :: struct { + using ixaudio2voice_vtable: IXAudio2Voice_VTable, + // There are currently no methods specific to submix voices. +} + + /************************************************************************** + * + * IXAudio2MasteringVoice: Mastering voice management interface. + * + **************************************************************************/ + +IXAudio2MasteringVoice :: struct #raw_union { + #subtype ixaudio2voice: IXAudio2Voice, + using ixaudio2masteringvoice_vtable: ^IXAudio2MasteringVoice_VTable, +} +IXAudio2MasteringVoice_VTable :: struct { + using ixaudio2voice_vtable: IXAudio2Voice_VTable, + + // NAME: IXAudio2MasteringVoice.GetChannelMask + // DESCRIPTION: Returns the channel mask for this voice + // ARGUMENTS: + // pChannelMask - returns the channel mask for this voice. This corresponds to the dwChannelMask member of WAVEFORMATEXTENSIBLE. + GetChannelMask: proc "system" (this: ^IXAudio2MasteringVoice, pChannelmask: ^win.DWORD) -> HRESULT, +} + +/************************************************************************** + * + * IXAudio2EngineCallback: Client notification interface for engine events. + * + * REMARKS: Contains methods to notify the client when certain events happen in the XAudio2 engine. This interface should be implemented by the client. + * XAudio2 will call these methods via the interface pointer provided by the client when it calls IXAudio2.RegisterForCallbacks. + * + **************************************************************************/ + +IXAudio2EngineCallback :: struct { + using ixaudio2enginecallback_vtable: ^IXAudio2EngineCallback_VTable, +} +IXAudio2EngineCallback_VTable :: struct { + // Called by XAudio2 just before an audio processing pass begins. + OnProcessingPassStart: proc "system" (this: ^IXAudio2EngineCallback), + + // Called just after an audio processing pass ends. + OnProcessingPassEnd: proc "system" (this: ^IXAudio2EngineCallback), + + // Called in the event of a critical system error which requires XAudio2 to be closed down and restarted. The error code is given in Error. + OnCriticalError: proc "system" (this: ^IXAudio2EngineCallback, Error: HRESULT), +} + + /************************************************************************** + * + * IXAudio2VoiceCallback: Client notification interface for voice events. + * + * REMARKS: Contains methods to notify the client when certain events happen in an XAudio2 voice. This interface should be implemented by the client. + * XAudio2 will call these methods via an interface pointer provided by the client in the IXAudio2.CreateSourceVoice call. + * + **************************************************************************/ + +IXAudio2VoiceCallback :: struct { + using ixaudio2voicecallback_vtable: ^IXAudio2VoiceCallback_VTable, +} +IXAudio2VoiceCallback_VTable :: struct { + // Called just before this voice's processing pass begins. + OnVoiceProcessingPassStart: proc "system" (this: ^IXAudio2VoiceCallback, BytesRequired: u32), + + // Called just after this voice's processing pass ends. + OnVoiceProcessingPassEnd: proc "system" (this: ^IXAudio2VoiceCallback), + + // Called when this voice has just finished playing a buffer stream (as marked with the END_OF_STREAM flag on the last buffer). + OnStreamEnd: proc "system" (this: ^IXAudio2VoiceCallback), + + // Called when this voice is about to start processing a new buffer. + OnBufferStart: proc "system" (this: ^IXAudio2VoiceCallback, pBufferContext: rawptr), + + // Called when this voice has just finished processing a buffer. + // The buffer can now be reused or destroyed. + OnBufferEnd: proc "system" (this: ^IXAudio2VoiceCallback, pBufferContext: rawptr), + + // Called when this voice has just reached the end position of a loop. + OnLoopEnd: proc "system" (this: ^IXAudio2VoiceCallback, pBufferContext: rawptr), + + // Called in the event of a critical error during voice processing, such as a failing xAPO or an error from the hardware XMA decoder. + // The voice may have to be destroyed and re-created to recover from the error. + // The callback arguments report which buffer was being processed when the error occurred, and its HRESULT code. + OnVoiceError: proc "system" (this: ^IXAudio2VoiceCallback, pBufferContext: rawptr, Error: HRESULT), +} + +/************************************************************************** + * + * XAudio2Create: Top-level function that creates an XAudio2 instance. + * + * ARGUMENTS: + * + * Flags - Flags specifying the XAudio2 object's behavior. + * + * XAudio2Processor - A PROCESSOR_FLAGS value that specifies the hardware threads (Xbox) or processors (Windows) that XAudio2 will use. + * Note that XAudio2 supports concurrent processing on multiple threads, using any combination of PROCESSOR_FLAGS flags. + * The values are platform-specific; platform-independent code can use USE_DEFAULT_PROCESSOR to use the default on each platform. + * + **************************************************************************/ + +// We're an xaudio2 client +@(default_calling_convention="system", link_prefix="XAudio2") +foreign xa2 { + Create :: proc(ppXAudio2: ^^IXAudio2, Flags: FLAGS = {}, XAudio2Processor: PROCESSOR_FLAGS = USE_DEFAULT_PROCESSOR) -> HRESULT --- +} + + +/************************************************************************** + * + * Utility functions used to convert from pitch in semitones and volume in decibels to the frequency and amplitude ratio units used by XAudio2. + * + **************************************************************************/ + +// Calculate the argument to SetVolume from a decibel value +DecibelsToAmplitudeRatio :: proc "contextless" (Decibels: f32) -> f32 { + return math.pow_f32(10.0, Decibels / 20.0) +} + +// Recover a volume in decibels from an amplitude factor +AmplitudeRatioToDecibels :: proc "contextless" (Volume: f32) -> f32 { + if Volume == 0 { + return min(f32) + } + return 20.0 * math.log10_f32(Volume) +} + +// Calculate the argument to SetFrequencyRatio from a semitone value +SemitonesToFrequencyRatio :: proc "contextless" (Semitones: f32) -> f32 { + // FrequencyRatio = 2 ^ Octaves + // = 2 ^ (Semitones / 12) + return math.pow_f32(2.0, Semitones / 12.0) +} + +// Recover a pitch in semitones from a frequency ratio +FrequencyRatioToSemitones :: proc "contextless" (FrequencyRatio: f32) -> f32 { + // Semitones = 12 * log2(FrequencyRatio) + // = 12 * log2(10) * log10(FrequencyRatio) + return 12.0 * math.log2_f32(FrequencyRatio) +} + +// Convert from filter cutoff frequencies expressed in Hertz to the radian frequency values used in FILTER_PARAMETERS.Frequency, state-variable filter types only. +// Use CutoffFrequencyToOnePoleCoefficient() for one-pole filter types. +// Note that the highest CutoffFrequency supported is SampleRate/6. +// Higher values of CutoffFrequency will return MAX_FILTER_FREQUENCY. +CutoffFrequencyToRadians :: proc "contextless" (CutoffFrequency: f32, SampleRate: u32) -> f32 { + if u32(CutoffFrequency * 6.0) >= SampleRate { + return MAX_FILTER_FREQUENCY + } + return 2.0 * math.sin_f32(math.PI * CutoffFrequency / f32(SampleRate)) +} + +// Convert from radian frequencies back to absolute frequencies in Hertz +RadiansToCutoffFrequency :: proc "contextless" (Radians: f32, SampleRate: f32) -> f32 { + return SampleRate * math.asin_f32(Radians / 2.0) / math.PI +} + +// Convert from filter cutoff frequencies expressed in Hertz to the filter coefficients used with FILTER_PARAMETERS.Frequency, +// LowPassOnePoleFilter and HighPassOnePoleFilter filter types only. +// Use CutoffFrequencyToRadians() for state-variable filter types. +CutoffFrequencyToOnePoleCoefficient :: proc "contextless" (CutoffFrequency: f32, SampleRate: u32) -> f32 { + if u32(CutoffFrequency) >= SampleRate { + return MAX_FILTER_FREQUENCY + } + return 1.0 - math.pow_f32(1.0 - 2.0 * CutoffFrequency / f32(SampleRate), 2.0) +} + +//------------------------------------------------------------------------- +// Description: Audio stream categories +// +// Other - All other streams (default) +// ForegroundOnlyMedia - (deprecated for Win10) Music, Streaming audio +// BackgroundCapableMedia - (deprecated for Win10) Video with audio +// Communications - VOIP, chat, phone call +// Alerts - Alarm, Ring tones +// SoundEffects - Sound effects, clicks, dings +// GameEffects - Game sound effects +// GameMedia - Background audio for games +// GameChat - In game player chat +// Speech - Speech recognition +// Media - Music, Streaming audio +// Movie - Video with audio +// FarFieldSpeech - Capture of far field speech +// UniformSpeech - Uniform, device agnostic speech processing +// VoiceTyping - Dictation, typing by voice +// +AUDIO_STREAM_CATEGORY :: enum i32 { + Other = 0, + //ForegroundOnlyMedia = 1, + //BackgroundCapableMedia = 2, + Communications = 3, + Alerts = 4, + SoundEffects = 5, + GameEffects = 6, + GameMedia = 7, + GameChat = 8, + Speech = 9, + Movie = 10, + Media = 11, + FarFieldSpeech = 12, + UniformSpeech = 13, + VoiceTyping = 14, +} diff --git a/vendor/windows/XAudio2/xaudio2fx.odin b/vendor/windows/XAudio2/xaudio2fx.odin new file mode 100644 index 000000000..a875b5516 --- /dev/null +++ b/vendor/windows/XAudio2/xaudio2fx.odin @@ -0,0 +1,287 @@ +#+build windows + +package windows_xaudio2 + +import "core:math" + +foreign import xa2 "system:xaudio2.lib" + +CLSID_AudioVolumeMeter_UUID_STRING :: "4FC3B166-972A-40CF-BC37-7DB03DB2FBA3" +CLSID_AudioVolumeMeter_UUID := &IID{0x4FC3B166, 0x972A, 0x40CF, {0xBC, 0x37, 0x7D, 0xB0, 0x3D, 0xB2, 0xFB, 0xA3}} + +CLSID_AudioReverb_UUID_STRING :: "C2633B16-471B-4498-B8C5-4F0959E2EC09" +CLSID_AudioReverb_UUID := &IID{0xC2633B16, 0x471B, 0x4498, {0xB8, 0xC5, 0x4F, 0x09, 0x59, 0xE2, 0xEC, 0x09}} + +/************************************************************************** + * + * Effect creation functions. + * + * On Xbox the application can link with the debug library to use the debug + * functionality. + * + **************************************************************************/ + + @(default_calling_convention="system", link_prefix="XAudio2") +foreign xa2 { + CreateAudioVolumeMeter :: proc(ppApo: ^^IUnknown) -> HRESULT --- + CreateAudioReverb :: proc(ppApo: ^^IUnknown) -> HRESULT --- +} + +/************************************************************************** + * + * Volume meter parameters. + * The volume meter supports f32 audio formats and must be used in-place. + * + **************************************************************************/ + +// VOLUMEMETER_LEVELS: Receives results from GetEffectParameters(). +// The user is responsible for allocating pPeakLevels, pRMSLevels, and initializing ChannelCount accordingly. +// The volume meter does not support SetEffectParameters(). +VOLUMEMETER_LEVELS :: struct { + pPeakLevels: [^]f32, // Peak levels table: receives maximum absolute level for each channel over a processing pass, may be NULL if pRMSLevls != NULL, otherwise must have at least ChannelCount elements. + pRMSLevels: [^]f32, // Root mean square levels table: receives RMS level for each channel over a processing pass, may be NULL if pPeakLevels != NULL, otherwise must have at least ChannelCount elements. + ChannelCount: u32, // Number of channels being processed by the volume meter APO +} + +/************************************************************************** + * + * Reverb parameters. + * The reverb supports only f32 audio with the following channel configurations: + * Input: Mono Output: Mono + * Input: Mono Output: 5.1 + * Input: Stereo Output: Stereo + * Input: Stereo Output: 5.1 + * The framerate must be within [20000, 48000] Hz. + * + * When using mono input, delay filters associated with the right channel are not executed. + * In this case, parameters such as PositionRight and PositionMatrixRight have no effect. + * This also means the reverb uses less CPU when hosted in a mono submix. + * + **************************************************************************/ + +REVERB_MIN_FRAMERATE :: 20000 +REVERB_MAX_FRAMERATE :: 48000 + +// REVERB_PARAMETERS: Native parameter set for the reverb effect + +REVERB_PARAMETERS :: struct { + // ratio of wet (processed) signal to dry (original) signal + WetDryMix: f32, // [0, 100] (percentage) + // Delay times + ReflectionsDelay: u32, // [0, 300] in ms + ReverbDelay: byte, // [0, 85] in ms + RearDelay: byte, // 7.1: [0, 20] in ms, all other: [0, 5] in ms + SideDelay: byte, // 7.1: [0, 5] in ms, all other: not used, but still validated + // Indexed parameters + PositionLeft: byte, // [0, 30] no units + PositionRight: byte, // [0, 30] no units, ignored when configured to mono + PositionMatrixLeft: byte, // [0, 30] no units + PositionMatrixRight: byte, // [0, 30] no units, ignored when configured to mono + EarlyDiffusion: byte, // [0, 15] no units + LateDiffusion: byte, // [0, 15] no units + LowEQGain: byte, // [0, 12] no units + LowEQCutoff: byte, // [0, 9] no units + HighEQGain: byte, // [0, 8] no units + HighEQCutoff: byte, // [0, 14] no units + // Direct parameters + RoomFilterFreq: f32, // [20, 20000] in Hz + RoomFilterMain: f32, // [-100, 0] in dB + RoomFilterHF: f32, // [-100, 0] in dB + ReflectionsGain: f32, // [-100, 20] in dB + ReverbGain: f32, // [-100, 20] in dB + DecayTime: f32, // [0.1, inf] in seconds + Density: f32, // [0, 100] (percentage) + RoomSize: f32, // [1, 100] in feet + // component control + DisableLateField: bool, // TRUE to disable late field reflections +} + +// Maximum, minimum and default values for the parameters above +REVERB_MIN_WET_DRY_MIX :: 0.0 +REVERB_MIN_REFLECTIONS_DELAY :: 0 +REVERB_MIN_REVERB_DELAY :: 0 +REVERB_MIN_REAR_DELAY :: 0 +REVERB_MIN_7POINT1_SIDE_DELAY :: 0 +REVERB_MIN_7POINT1_REAR_DELAY :: 0 +REVERB_MIN_POSITION :: 0 +REVERB_MIN_DIFFUSION :: 0 +REVERB_MIN_LOW_EQ_GAIN :: 0 +REVERB_MIN_LOW_EQ_CUTOFF :: 0 +REVERB_MIN_HIGH_EQ_GAIN :: 0 +REVERB_MIN_HIGH_EQ_CUTOFF :: 0 +REVERB_MIN_ROOM_FILTER_FREQ :: 20.0 +REVERB_MIN_ROOM_FILTER_MAIN :: -100.0 +REVERB_MIN_ROOM_FILTER_HF :: -100.0 +REVERB_MIN_REFLECTIONS_GAIN :: -100.0 +REVERB_MIN_REVERB_GAIN :: -100.0 +REVERB_MIN_DECAY_TIME :: 0.1 +REVERB_MIN_DENSITY :: 0.0 +REVERB_MIN_ROOM_SIZE :: 0.0 + +REVERB_MAX_WET_DRY_MIX :: 100.0 +REVERB_MAX_REFLECTIONS_DELAY :: 300 +REVERB_MAX_REVERB_DELAY :: 85 +REVERB_MAX_REAR_DELAY :: 5 +REVERB_MAX_7POINT1_SIDE_DELAY :: 5 +REVERB_MAX_7POINT1_REAR_DELAY :: 20 +REVERB_MAX_POSITION :: 30 +REVERB_MAX_DIFFUSION :: 15 +REVERB_MAX_LOW_EQ_GAIN :: 12 +REVERB_MAX_LOW_EQ_CUTOFF :: 9 +REVERB_MAX_HIGH_EQ_GAIN :: 8 +REVERB_MAX_HIGH_EQ_CUTOFF :: 14 +REVERB_MAX_ROOM_FILTER_FREQ :: 20000.0 +REVERB_MAX_ROOM_FILTER_MAIN :: 0.0 +REVERB_MAX_ROOM_FILTER_HF :: 0.0 +REVERB_MAX_REFLECTIONS_GAIN :: 20.0 +REVERB_MAX_REVERB_GAIN :: 20.0 +REVERB_MAX_DENSITY :: 100.0 +REVERB_MAX_ROOM_SIZE :: 100.0 + +REVERB_DEFAULT_WET_DRY_MIX :: 100.0 +REVERB_DEFAULT_REFLECTIONS_DELAY :: 5 +REVERB_DEFAULT_REVERB_DELAY :: 5 +REVERB_DEFAULT_REAR_DELAY :: 5 +REVERB_DEFAULT_7POINT1_SIDE_DELAY :: 5 +REVERB_DEFAULT_7POINT1_REAR_DELAY :: 20 +REVERB_DEFAULT_POSITION :: 6 +REVERB_DEFAULT_POSITION_MATRIX :: 27 +REVERB_DEFAULT_EARLY_DIFFUSION :: 8 +REVERB_DEFAULT_LATE_DIFFUSION :: 8 +REVERB_DEFAULT_LOW_EQ_GAIN :: 8 +REVERB_DEFAULT_LOW_EQ_CUTOFF :: 4 +REVERB_DEFAULT_HIGH_EQ_GAIN :: 8 +REVERB_DEFAULT_HIGH_EQ_CUTOFF :: 4 +REVERB_DEFAULT_ROOM_FILTER_FREQ :: 5000.0 +REVERB_DEFAULT_ROOM_FILTER_MAIN :: 0.0 +REVERB_DEFAULT_ROOM_FILTER_HF :: 0.0 +REVERB_DEFAULT_REFLECTIONS_GAIN :: 0.0 +REVERB_DEFAULT_REVERB_GAIN :: 0.0 +REVERB_DEFAULT_DECAY_TIME :: 1.0 +REVERB_DEFAULT_DENSITY :: 100.0 +REVERB_DEFAULT_ROOM_SIZE :: 100.0 +REVERB_DEFAULT_DISABLE_LATE_FIELD :: false + +// REVERB_I3DL2_PARAMETERS: Parameter set compliant with the I3DL2 standard + +REVERB_I3DL2_PARAMETERS :: struct { + // ratio of wet (processed) signal to dry (original) signal + WetDryMix: f32, // [0, 100] (percentage) + + // Standard I3DL2 parameters + Room: i32, // [-10000, 0] in mB (hundredths of decibels) + RoomHF: i32, // [-10000, 0] in mB (hundredths of decibels) + RoomRolloffFactor: f32, // [0.0, 10.0] + DecayTime: f32, // [0.1, 20.0] in seconds + DecayHFRatio: f32, // [0.1, 2.0] + Reflections: i32, // [-10000, 1000] in mB (hundredths of decibels) + ReflectionsDelay: f32, // [0.0, 0.3] in seconds + Reverb: i32, // [-10000, 2000] in mB (hundredths of decibels) + ReverbDelay: f32, // [0.0, 0.1] in seconds + Diffusion: f32, // [0.0, 100.0] (percentage) + Density: f32, // [0.0, 100.0] (percentage) + HFReference: f32, // [20.0, 20000.0] in Hz +} + +/************************************************************************** + * + * Standard I3DL2 reverb presets (100% wet). + * + **************************************************************************/ + +I3DL2_PRESET_DEFAULT := REVERB_I3DL2_PARAMETERS{100.0,-10000, 0,0.0, 1.00,0.50,-10000,0.020,-10000,0.040,100.0,100.0,5000.0} +I3DL2_PRESET_GENERIC := REVERB_I3DL2_PARAMETERS{100.0, -1000, -100,0.0, 1.49,0.83, -2602,0.007, 200,0.011,100.0,100.0,5000.0} +I3DL2_PRESET_PADDEDCELL := REVERB_I3DL2_PARAMETERS{100.0, -1000,-6000,0.0, 0.17,0.10, -1204,0.001, 207,0.002,100.0,100.0,5000.0} +I3DL2_PRESET_ROOM := REVERB_I3DL2_PARAMETERS{100.0, -1000, -454,0.0, 0.40,0.83, -1646,0.002, 53,0.003,100.0,100.0,5000.0} +I3DL2_PRESET_BATHROOM := REVERB_I3DL2_PARAMETERS{100.0, -1000,-1200,0.0, 1.49,0.54, -370,0.007, 1030,0.011,100.0, 60.0,5000.0} +I3DL2_PRESET_LIVINGROOM := REVERB_I3DL2_PARAMETERS{100.0, -1000,-6000,0.0, 0.50,0.10, -1376,0.003, -1104,0.004,100.0,100.0,5000.0} +I3DL2_PRESET_STONEROOM := REVERB_I3DL2_PARAMETERS{100.0, -1000, -300,0.0, 2.31,0.64, -711,0.012, 83,0.017,100.0,100.0,5000.0} +I3DL2_PRESET_AUDITORIUM := REVERB_I3DL2_PARAMETERS{100.0, -1000, -476,0.0, 4.32,0.59, -789,0.020, -289,0.030,100.0,100.0,5000.0} +I3DL2_PRESET_CONCERTHALL := REVERB_I3DL2_PARAMETERS{100.0, -1000, -500,0.0, 3.92,0.70, -1230,0.020, -2,0.029,100.0,100.0,5000.0} +I3DL2_PRESET_CAVE := REVERB_I3DL2_PARAMETERS{100.0, -1000, 0,0.0, 2.91,1.30, -602,0.015, -302,0.022,100.0,100.0,5000.0} +I3DL2_PRESET_ARENA := REVERB_I3DL2_PARAMETERS{100.0, -1000, -698,0.0, 7.24,0.33, -1166,0.020, 16,0.030,100.0,100.0,5000.0} +I3DL2_PRESET_HANGAR := REVERB_I3DL2_PARAMETERS{100.0, -1000,-1000,0.0,10.05,0.23, -602,0.020, 198,0.030,100.0,100.0,5000.0} +I3DL2_PRESET_CARPETEDHALLWAY := REVERB_I3DL2_PARAMETERS{100.0, -1000,-4000,0.0, 0.30,0.10, -1831,0.002, -1630,0.030,100.0,100.0,5000.0} +I3DL2_PRESET_HALLWAY := REVERB_I3DL2_PARAMETERS{100.0, -1000, -300,0.0, 1.49,0.59, -1219,0.007, 441,0.011,100.0,100.0,5000.0} +I3DL2_PRESET_STONECORRIDOR := REVERB_I3DL2_PARAMETERS{100.0, -1000, -237,0.0, 2.70,0.79, -1214,0.013, 395,0.020,100.0,100.0,5000.0} +I3DL2_PRESET_ALLEY := REVERB_I3DL2_PARAMETERS{100.0, -1000, -270,0.0, 1.49,0.86, -1204,0.007, -4,0.011,100.0,100.0,5000.0} +I3DL2_PRESET_FOREST := REVERB_I3DL2_PARAMETERS{100.0, -1000,-3300,0.0, 1.49,0.54, -2560,0.162, -613,0.088, 79.0,100.0,5000.0} +I3DL2_PRESET_CITY := REVERB_I3DL2_PARAMETERS{100.0, -1000, -800,0.0, 1.49,0.67, -2273,0.007, -2217,0.011, 50.0,100.0,5000.0} +I3DL2_PRESET_MOUNTAINS := REVERB_I3DL2_PARAMETERS{100.0, -1000,-2500,0.0, 1.49,0.21, -2780,0.300, -2014,0.100, 27.0,100.0,5000.0} +I3DL2_PRESET_QUARRY := REVERB_I3DL2_PARAMETERS{100.0, -1000,-1000,0.0, 1.49,0.83,-10000,0.061, 500,0.025,100.0,100.0,5000.0} +I3DL2_PRESET_PLAIN := REVERB_I3DL2_PARAMETERS{100.0, -1000,-2000,0.0, 1.49,0.50, -2466,0.179, -2514,0.100, 21.0,100.0,5000.0} +I3DL2_PRESET_PARKINGLOT := REVERB_I3DL2_PARAMETERS{100.0, -1000, 0,0.0, 1.65,1.50, -1363,0.008, -1153,0.012,100.0,100.0,5000.0} +I3DL2_PRESET_SEWERPIPE := REVERB_I3DL2_PARAMETERS{100.0, -1000,-1000,0.0, 2.81,0.14, 429,0.014, 648,0.021, 80.0, 60.0,5000.0} +I3DL2_PRESET_UNDERWATER := REVERB_I3DL2_PARAMETERS{100.0, -1000,-4000,0.0, 1.49,0.10, -449,0.007, 1700,0.011,100.0,100.0,5000.0} +I3DL2_PRESET_SMALLROOM := REVERB_I3DL2_PARAMETERS{100.0, -1000, -600,0.0, 1.10,0.83, -400,0.005, 500,0.010,100.0,100.0,5000.0} +I3DL2_PRESET_MEDIUMROOM := REVERB_I3DL2_PARAMETERS{100.0, -1000, -600,0.0, 1.30,0.83, -1000,0.010, -200,0.020,100.0,100.0,5000.0} +I3DL2_PRESET_LARGEROOM := REVERB_I3DL2_PARAMETERS{100.0, -1000, -600,0.0, 1.50,0.83, -1600,0.020, -1000,0.040,100.0,100.0,5000.0} +I3DL2_PRESET_MEDIUMHALL := REVERB_I3DL2_PARAMETERS{100.0, -1000, -600,0.0, 1.80,0.70, -1300,0.015, -800,0.030,100.0,100.0,5000.0} +I3DL2_PRESET_LARGEHALL := REVERB_I3DL2_PARAMETERS{100.0, -1000, -600,0.0, 1.80,0.70, -2000,0.030, -1400,0.060,100.0,100.0,5000.0} +I3DL2_PRESET_PLATE := REVERB_I3DL2_PARAMETERS{100.0, -1000, -200,0.0, 1.30,0.90, 0,0.002, 0,0.010,100.0, 75.0,5000.0} + +// ReverbConvertI3DL2ToNative: Utility function to map from I3DL2 to native parameters + +ReverbConvertI3DL2ToNative :: proc "contextless" (pI3DL2: ^REVERB_I3DL2_PARAMETERS, pNative: ^REVERB_PARAMETERS, sevenDotOneReverb: bool = true) { + reflectionsDelay: f32 + reverbDelay: f32 + + // RoomRolloffFactor is ignored + + // These parameters have no equivalent in I3DL2 + if sevenDotOneReverb { + pNative.RearDelay = REVERB_DEFAULT_7POINT1_REAR_DELAY // 20 + } else { + pNative.RearDelay = REVERB_DEFAULT_REAR_DELAY // 5 + } + pNative.SideDelay = REVERB_DEFAULT_7POINT1_SIDE_DELAY // 5 + pNative.PositionLeft = REVERB_DEFAULT_POSITION // 6 + pNative.PositionRight = REVERB_DEFAULT_POSITION // 6 + pNative.PositionMatrixLeft = REVERB_DEFAULT_POSITION_MATRIX // 27 + pNative.PositionMatrixRight = REVERB_DEFAULT_POSITION_MATRIX // 27 + pNative.RoomSize = REVERB_DEFAULT_ROOM_SIZE // 100 + pNative.LowEQCutoff = 4 + pNative.HighEQCutoff = 6 + + // The rest of the I3DL2 parameters map to the native property set + pNative.RoomFilterMain = f32(pI3DL2.Room) / 100.0 + pNative.RoomFilterHF = f32(pI3DL2.RoomHF) / 100.0 + + if pI3DL2.DecayHFRatio >= 1.0 { + index := i32(-4.0 * math.log10_f32(pI3DL2.DecayHFRatio)) + if index < -8 do index = -8 + pNative.LowEQGain = byte((index < 0) ? index + 8 : 8) + pNative.HighEQGain = 8 + pNative.DecayTime = pI3DL2.DecayTime * pI3DL2.DecayHFRatio + } else { + index := i32(4.0 * math.log10_f32(pI3DL2.DecayHFRatio)) + if index < -8 do index = -8 + pNative.LowEQGain = 8 + pNative.HighEQGain = byte((index < 0) ? index + 8 : 8) + pNative.DecayTime = pI3DL2.DecayTime + } + + reflectionsDelay = pI3DL2.ReflectionsDelay * 1000.0 + if reflectionsDelay >= REVERB_MAX_REFLECTIONS_DELAY { // 300 + reflectionsDelay = f32(REVERB_MAX_REFLECTIONS_DELAY - 1) + } else if reflectionsDelay <= 1 { + reflectionsDelay = 1 + } + pNative.ReflectionsDelay = u32(reflectionsDelay) + + reverbDelay = pI3DL2.ReverbDelay * 1000.0 + if reverbDelay >= REVERB_MAX_REVERB_DELAY { // 85 + reverbDelay = f32(REVERB_MAX_REVERB_DELAY - 1) + } + pNative.ReverbDelay = byte(reverbDelay) + + pNative.ReflectionsGain = f32(pI3DL2.Reflections) / 100.0 + pNative.ReverbGain = f32(pI3DL2.Reverb) / 100.0 + pNative.EarlyDiffusion = byte(15.0 * pI3DL2.Diffusion / 100.0) + pNative.LateDiffusion = pNative.EarlyDiffusion + pNative.Density = pI3DL2.Density + pNative.RoomFilterFreq = pI3DL2.HFReference + + pNative.WetDryMix = pI3DL2.WetDryMix + pNative.DisableLateField = false +} From 2dc5653fd13de2a92809ff41ab68a005141899ff Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Mon, 28 Apr 2025 14:58:53 -0400 Subject: [PATCH 014/120] Name fixes --- src/check_builtin.cpp | 6 +++--- src/llvm_backend.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 099f99045..3e531a309 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -418,14 +418,14 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan self_type->Named.type_name != nullptr && self_type->Named.type_name->TypeName.objc_class_name != "")) { gbString t = type_to_string(self_type); - error(self.expr, "'%.*s' expected a named type with the attribute @(obj_class=) , got type %s", LIT(builtin_name), t); + error(self.expr, "'%.*s' expected a named type with the attribute @(objc_class=) , got type %s", LIT(builtin_name), t); gb_string_free(t); return false; } if (self_type->Named.type_name->TypeName.objc_ivar == nullptr) { gbString t = type_to_string(self_type); - error(self.expr, "'%.*s' requires that type %s have the attribute @(obj_ivar=).", LIT(builtin_name), t); + error(self.expr, "'%.*s' requires that type %s have the attribute @(objc_ivar=).", LIT(builtin_name), t); gb_string_free(t); return false; } @@ -442,7 +442,7 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan gbString name_self = type_to_string(self_type); gbString name_expected = type_to_string(self_type->Named.type_name->TypeName.objc_ivar); gbString name_given = type_to_string(ivar_type); - error(self.expr, "'%.*s' ivar type %s does not match @obj_ivar type %s on Objective-C class %s.", + error(self.expr, "'%.*s' ivar type %s does not match @objc_ivar type %s on Objective-C class %s.", LIT(builtin_name), name_given, name_expected, name_self); gb_string_free(name_self); gb_string_free(name_expected); diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index aec8b7fc5..339e7fca7 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1685,7 +1685,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { if (is_context_provider_ivar) { // The context provider takes the ivar's type. - // Emit an obj_ivar_get call and use that pointer for 'self' instead. + // Emit an objc_ivar_get call and use that pointer for 'self' instead. lbValue real_self { wrapper_proc->raw_input_parameters[0], class_ptr_type From 5097e98da2be6fc799d3d1320e09d0cabcb591ad Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 19:10:51 -0400 Subject: [PATCH 015/120] Better Objective-C object superclass cycle check --- src/check_decl.cpp | 80 ++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 48e5172d6..c6746f3eb 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -526,17 +526,18 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, check_decl_attributes(ctx, decl->attributes, type_decl_attribute, &ac); if (e->kind == Entity_TypeName && ac.objc_class != "") { e->TypeName.objc_class_name = ac.objc_class; - e->TypeName.objc_superclass = ac.objc_superclass; - e->TypeName.objc_ivar = ac.objc_ivar; - e->TypeName.objc_context_provider = ac.objc_context_provider; if (ac.objc_is_implementation) { - e->TypeName.objc_is_implementation = true; - mpsc_enqueue(&ctx->info->objc_class_implementations, e); // TODO(harold): Don't need this for anything? See if needed when using explicit @export + e->TypeName.objc_is_implementation = ac.objc_is_implementation; + e->TypeName.objc_superclass = ac.objc_superclass; + e->TypeName.objc_ivar = ac.objc_ivar; + e->TypeName.objc_context_provider = ac.objc_context_provider; + + mpsc_enqueue(&ctx->info->objc_class_implementations, e); GB_ASSERT(e->TypeName.objc_ivar == nullptr || e->TypeName.objc_ivar->kind == Type_Named); - // Enqueue the proc to be checked when resolved + // Enqueue the contex_provider proc to be checked after it is resolved if (e->TypeName.objc_context_provider != nullptr) { mpsc_enqueue(&ctx->checker->procs_with_objc_context_provider_to_check, e); } @@ -544,47 +545,44 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, // @TODO(harold): I think there's a Check elsewhere in the checker for checking cycles. // See about moving this to the right location. // Ensure superclass hierarchy are all Objective-C classes and does not cycle + + // NOTE(harold): We check for superclass unconditionally (before checking if super is null) + // because this should be the case 99.99% of the time. Not subclassing something that + // is, or is the child of, NSObject means the objc runtime messaging will not properly work on this type. + TypeSet super_set{}; + type_set_init(&super_set, 8); + defer (type_set_destroy(&super_set)); + + type_set_update(&super_set, e->type); + Type *super = ac.objc_superclass; - if (super != nullptr) { - TypeSet super_set{}; - type_set_init(&super_set, 8); - defer (type_set_destroy(&super_set)); - - type_set_update(&super_set, e->type); - - for (;;) { - if (type_set_update(&super_set, super)) { - error(e->token, "@(objc_superclass) Superclass hierarchy cycle encountered"); - break; - } - - if (super->kind != Type_Named) { - error(e->token, "@(objc_superclass) References type must be a named struct."); - break; - } - - Type* named_type = base_type(super->Named.type_name->type); - if (!is_type_objc_object(named_type)) { - error(e->token, "@(objc_superclass) Superclass must be an Objective-C class."); - break; - } - - super = super->Named.type_name->TypeName.objc_superclass; - if (super == nullptr) { - break; - } - - // TODO(harold): Is this the right way to do this??? The referenced entity must be already resolved - // so that we can access its objc_superclass attribute - check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); + while (super != nullptr) { + if (type_set_update(&super_set, super)) { + error(e->token, "@(objc_superclass) Superclass hierarchy cycle encountered"); + break; } + + check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); + + if (super->kind != Type_Named) { + error(e->token, "@(objc_superclass) Referenced type must be a named struct"); + break; + } + + Type* named_type = base_type(super->Named.type_name->type); + if (!is_type_objc_object(named_type)) { + error(e->token, "@(objc_superclass) Superclass must be an Objective-C class"); + break; + } + + super = super->Named.type_name->TypeName.objc_superclass; } } else { - if (e->TypeName.objc_superclass != nullptr) { + if (ac.objc_superclass != nullptr) { error(e->token, "@(objc_superclass) can only be applied when the @(obj_implement) attribute is also applied"); - } else if (e->TypeName.objc_ivar != nullptr) { + } else if (ac.objc_ivar != nullptr) { error(e->token, "@(objc_ivar) can only be applied when the @(obj_implement) attribute is also applied"); - } else if (e->TypeName.objc_context_provider != nullptr) { + } else if (ac.objc_context_provider != nullptr) { error(e->token, "@(objc_context_provider) can only be applied when the @(obj_implement) attribute is also applied"); } } From 668a9a89b0891128846112465110d70bb21d22bf Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 19:24:44 -0400 Subject: [PATCH 016/120] Complete lb_get_objc_type_encoding() implementation --- src/llvm_backend.cpp | 66 ++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 339e7fca7..e8e08d355 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1173,9 +1173,8 @@ gb_internal lbProcedure *lb_create_objc_names(lbModule *main_module) { return p; } -// TODO(harold): Move this out of here and into a more suitable place. -// TODO(harold): Should not take an allocator, but always use temp, as we return string literals as well. -String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_depth = 0) { +// TODO(harold): Perhaps move this out of here and into a more suitable place? +String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { // NOTE(harold): See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100 // NOTE(harold): Darwin targets are always 64-bit. Should we drop this and assume "q" always? @@ -1248,14 +1247,12 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d case Basic_f64be: return str_lit("d"); - // TODO(harold) These: - case Basic_complex32: - case Basic_complex64: - case Basic_complex128: - case Basic_quaternion64: - case Basic_quaternion128: - case Basic_quaternion256: - return str_lit("?"); + case Basic_complex32: return str_lit("{Raw_Complex32=ss}"); // No f16 encoding, so fallback to i16, as above in Basic_f16* + case Basic_complex64: return str_lit("{Raw_Complex64=ff}"); + case Basic_complex128: return str_lit("{Raw_Complex128=dd}"); + case Basic_quaternion64: return str_lit("{Raw_Quaternion64=ssss}"); + case Basic_quaternion128: return str_lit("{Raw_Quaternion128=ffff}"); + case Basic_quaternion256: return str_lit("{Raw_Quaternion256=dddd}"); case Basic_int: return str_lit(INT_SIZE_ENCODING); @@ -1298,7 +1295,7 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d if (base->kind == Type_Named) { base = base_type(base); if(base->kind != Type_Struct && base->kind != Type_Union) { - return lb_get_objc_type_encoding(base, allocator, pointer_depth); + return lb_get_objc_type_encoding(base, pointer_depth); } } @@ -1325,7 +1322,7 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d } - gbString s = gb_string_make_reserve(allocator, 16); + gbString s = gb_string_make_reserve(temporary_allocator(), 16); s = gb_string_append_length(s, is_union ? "(" :"{", 1); if (t->kind == Type_Named) { s = gb_string_append_length(s, t->Named.name.text, t->Named.name.len); @@ -1337,11 +1334,14 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d if (!is_union) { for( auto& f : base->Struct.fields ) { - String field_type = lb_get_objc_type_encoding(f->type, allocator, pointer_depth); + String field_type = lb_get_objc_type_encoding(f->type, pointer_depth); s = gb_string_append_length(s, field_type.text, field_type.len); } } else { - // #TODO(harold): Encode fields + for( auto& v : base->Union.variants ) { + String variant_type = lb_get_objc_type_encoding(v, pointer_depth); + s = gb_string_append_length(s, variant_type.text, variant_type.len); + } } } @@ -1355,44 +1355,44 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d return str_lit("?"); case Type_Pointer: { - String pointee = lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1); + String pointee = lb_get_objc_type_encoding(t->Pointer.elem, pointer_depth +1); // Special case for Objective-C Objects if (pointer_depth == 0 && pointee == "@") { return pointee; } - return concatenate_strings(allocator, str_lit("^"), pointee); + return concatenate_strings(temporary_allocator(), str_lit("^"), pointee); } case Type_MultiPointer: - return concatenate_strings(allocator, str_lit("^"), lb_get_objc_type_encoding(t->Pointer.elem, allocator, pointer_depth +1)); + return concatenate_strings(temporary_allocator(), str_lit("^"), lb_get_objc_type_encoding(t->Pointer.elem, pointer_depth +1)); case Type_Array: { - String type_str = lb_get_objc_type_encoding(t->Array.elem, allocator, pointer_depth); + String type_str = lb_get_objc_type_encoding(t->Array.elem, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); s = gb_string_append_fmt(s, "[%lld%s]", t->Array.count, type_str.text); return make_string_c(s); } case Type_EnumeratedArray: { - String type_str = lb_get_objc_type_encoding(t->EnumeratedArray.elem, allocator, pointer_depth); + String type_str = lb_get_objc_type_encoding(t->EnumeratedArray.elem, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); s = gb_string_append_fmt(s, "[%lld%s]", t->EnumeratedArray.count, type_str.text); return make_string_c(s); } case Type_Slice: { - String type_str = lb_get_objc_type_encoding(t->Slice.elem, allocator, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + String type_str = lb_get_objc_type_encoding(t->Slice.elem, pointer_depth); + gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); s = gb_string_append_fmt(s, "{slice=^%s%s}", type_str, INT_SIZE_ENCODING); return make_string_c(s); } case Type_DynamicArray: { - String type_str = lb_get_objc_type_encoding(t->DynamicArray.elem, allocator, pointer_depth); - gbString s = gb_string_make_reserve(allocator, type_str.len + 8); + String type_str = lb_get_objc_type_encoding(t->DynamicArray.elem, pointer_depth); + gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); s = gb_string_append_fmt(s, "{dynamic=^%s%s%sAllocator={?^v}}", type_str, INT_SIZE_ENCODING, INT_SIZE_ENCODING); return make_string_c(s); } @@ -1400,22 +1400,22 @@ String lb_get_objc_type_encoding(Type *t, gbAllocator allocator, isize pointer_d case Type_Map: return str_lit("{^v^v{Allocator=?^v}}"); case Type_Enum: - return lb_get_objc_type_encoding(t->Enum.base_type, allocator, pointer_depth); + return lb_get_objc_type_encoding(t->Enum.base_type, pointer_depth); case Type_Tuple: - // NOTE(harold): Is this allowed here? + // NOTE(harold): Is this type allowed here? return str_lit("?"); case Type_Proc: return str_lit("?"); case Type_BitSet: - return lb_get_objc_type_encoding(t->BitSet.underlying, allocator, pointer_depth); + return lb_get_objc_type_encoding(t->BitSet.underlying, pointer_depth); case Type_SimdVector: break; case Type_Matrix: break; case Type_BitField: - return lb_get_objc_type_encoding(t->BitField.backing_type, allocator, pointer_depth); + return lb_get_objc_type_encoding(t->BitField.backing_type, pointer_depth); case Type_SoaPointer: { - gbString s = gb_string_make_reserve(allocator, 8); + gbString s = gb_string_make_reserve(temporary_allocator(), 8); s = gb_string_append_fmt(s, "{=^v%s}", INT_SIZE_ENCODING); return make_string_c(s); } @@ -1733,7 +1733,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // TODO (harold): Checker must ensure that objc_methods have a single return value or none! GB_ASSERT(method_type->Proc.result_count <= 1); if (method_type->Proc.result_count != 0) { - method_encoding = lb_get_objc_type_encoding(method_type->Proc.results->Tuple.variables[0]->type, temporary_allocator()); + method_encoding = lb_get_objc_type_encoding(method_type->Proc.results->Tuple.variables[0]->type); } if (!md.ac.objc_is_class_method) { @@ -1744,7 +1744,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { for (i32 i = method_param_offset; i < method_param_count; i++) { Type *param_type = method_type->Proc.params->Tuple.variables[i]->type; - String param_encoding = lb_get_objc_type_encoding(param_type, temporary_allocator()); + String param_encoding = lb_get_objc_type_encoding(param_type); method_encoding = concatenate_strings(temporary_allocator(), method_encoding, param_encoding); } From abfbb2f9ed98225d2dce0e7e7f119985eb325523 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 19:25:51 -0400 Subject: [PATCH 017/120] Use basic name instead of raw_name for type encoding complex and quats. --- src/llvm_backend.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index e8e08d355..cbcfc565c 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1247,12 +1247,12 @@ String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { case Basic_f64be: return str_lit("d"); - case Basic_complex32: return str_lit("{Raw_Complex32=ss}"); // No f16 encoding, so fallback to i16, as above in Basic_f16* - case Basic_complex64: return str_lit("{Raw_Complex64=ff}"); - case Basic_complex128: return str_lit("{Raw_Complex128=dd}"); - case Basic_quaternion64: return str_lit("{Raw_Quaternion64=ssss}"); - case Basic_quaternion128: return str_lit("{Raw_Quaternion128=ffff}"); - case Basic_quaternion256: return str_lit("{Raw_Quaternion256=dddd}"); + case Basic_complex32: return str_lit("{complex32=ss}"); // No f16 encoding, so fallback to i16, as above in Basic_f16* + case Basic_complex64: return str_lit("{complex64=ff}"); + case Basic_complex128: return str_lit("{complex128=dd}"); + case Basic_quaternion64: return str_lit("{quaternion64=ssss}"); + case Basic_quaternion128: return str_lit("{quaternion128=ffff}"); + case Basic_quaternion256: return str_lit("{quaternion256=dddd}"); case Basic_int: return str_lit(INT_SIZE_ENCODING); From c2dfc4b74929354bbbc1395d7dd4568718e3b30c Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 20:25:21 -0400 Subject: [PATCH 018/120] Cleanup ivar generation for selector expressions. Cleanup ObjC superclass resolution. --- src/check_decl.cpp | 2 +- src/llvm_backend_expr.cpp | 24 +++++------------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index c6746f3eb..a37d20f56 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -575,7 +575,7 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, break; } - super = super->Named.type_name->TypeName.objc_superclass; + super = named_type->Named.type_name->TypeName.objc_superclass; } } else { if (ac.objc_superclass != nullptr) { diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index cc49a7be8..334ce62d5 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -5175,7 +5175,6 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { Selection sel = lookup_field(tav.type, selector, false); GB_ASSERT(sel.entity != nullptr); if (sel.pseudo_field && (sel.entity->kind == Entity_Procedure || sel.entity->kind == Entity_ProcGroup)) { - // GB_ASSERT(sel.entity->kind == Entity_Procedure || sel.entity->kind == Entity_ProcGroup); Entity *e = entity_of_node(sel_node); GB_ASSERT(e->kind == Entity_Procedure); return lb_addr(lb_find_value_from_entity(p->module, e)); @@ -5183,26 +5182,13 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { lbAddr addr = lb_build_addr(p, se->expr); - // TODO(harold): Ensure objc_ivar is always null when objc_implement is not set! - Type *d_type = type_deref(tav.type); //base_type(tav.type); - if (d_type->kind == Type_Named && d_type->Named.type_name->TypeName.objc_ivar) { + // NOTE(harold): Only allow ivar pseudo field access on indirect selectors. + // It is incoherent otherwise as Objective-C objects are zero-sized. + Type *deref_type = type_deref(tav.type); + if (tav.type->kind == Type_Pointer && deref_type->kind == Type_Named && deref_type->Named.type_name->TypeName.objc_ivar) { // NOTE(harold): We need to load the ivar from the current address and // replace addr with the loaded ivar addr to apply the selector load properly. - - // If it's a deep pointer, dereference it first - // TODO(harold): Ensure this is save to do here. lb_emit_deep_field_gep() has several derefs, once per index. - // Not sure what multiple indices represent... - Type* type = type_deref(addr.addr.type); - - // TODO(harold): Checker: Must NOT allow ivar dereferencing on non-pointer types. - // this would access memory outside the size of the value. - // In fact, locals/globals of Objective-C types ought not be allowed at all. - GB_ASSERT(is_type_pointer(type)); - - if (is_type_pointer(type)) { - type = type_deref(type); - addr = lb_addr(lb_emit_load(p, addr.addr)); - } + addr = lb_addr(lb_emit_load(p, addr.addr)); lbValue ivar_ptr = lb_handle_objc_ivar_for_objc_object_pointer(p, addr.addr); addr = lb_addr(ivar_ptr); From 998ed79738c46b818c10cc88c1ac1393bacacaf7 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 20:43:05 -0400 Subject: [PATCH 019/120] Go back to `objc_ivar_get` instead of `ivar_get`. --- base/intrinsics/intrinsics.odin | 2 +- src/checker_builtin_procs.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/base/intrinsics/intrinsics.odin b/base/intrinsics/intrinsics.odin index 515e8d48a..475b23930 100644 --- a/base/intrinsics/intrinsics.odin +++ b/base/intrinsics/intrinsics.odin @@ -364,7 +364,7 @@ objc_find_selector :: proc($name: string) -> objc_SEL --- objc_register_selector :: proc($name: string) -> objc_SEL --- objc_find_class :: proc($name: string) -> objc_Class --- objc_register_class :: proc($name: string) -> objc_Class --- -ivar_get :: proc(self: ^$T, $U: typeid) -> ^U --- +objc_ivar_get :: proc(self: ^$T, $U: typeid) -> ^U --- valgrind_client_request :: proc(default: uintptr, request: uintptr, a0, a1, a2, a3, a4: uintptr) -> uintptr --- diff --git a/src/checker_builtin_procs.hpp b/src/checker_builtin_procs.hpp index ce7d8349b..5a7a63ae8 100644 --- a/src/checker_builtin_procs.hpp +++ b/src/checker_builtin_procs.hpp @@ -674,7 +674,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = { {STR_LIT("objc_find_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, {STR_LIT("objc_register_selector"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("objc_register_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, - {STR_LIT("ivar_get"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, + {STR_LIT("objc_ivar_get"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("constant_utf16_cstring"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, From dc8692b5040fecfc478801b310c8bd5b0ac42750 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 21:49:24 -0400 Subject: [PATCH 020/120] Use correct alignment value for `class_addIvar`. --- src/llvm_backend.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index cbcfc565c..c8626c195 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1770,13 +1770,13 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // Register a single ivar for this class Type *ivar_base = ivar_type->Named.base; + // @note(harold): The alignment is supposed to be passed as log2(alignment): https://developer.apple.com/documentation/objectivec/class_addivar(_:_:_:_:_:)?language=objc const i64 size = type_size_of(ivar_base); - const i64 alignment = type_align_of(ivar_base); - // TODO(harold): Checker: Alignment must be compatible with ivar rules. Or we should increase the alignment if needed. + const i64 alignment = (i64)floor_log2((u64)type_align_of(ivar_base)); // TODO(harold): Should we pass the actual type encoding? Might not be ideal for obfuscation. String ivar_name = str_lit("__$ivar"); - String ivar_types = str_lit("{= }"); //lb_get_objc_type_encoding(ivar_type, temporary_allocator());// str_lit("{= }"); + String ivar_types = str_lit("{= }"); //lb_get_objc_type_encoding(ivar_type); args.count = 5; args[0] = class_value; args[1] = lb_const_value(m, t_cstring, exact_value_string(ivar_name)); From 1505edef011949e10b31335577ea344e5da2b623 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 22:09:03 -0400 Subject: [PATCH 021/120] Change ivar offsets from u32 to (odin base type) int/native pointer size. --- src/llvm_backend.cpp | 12 ++++++------ src/llvm_backend_utility.cpp | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index c8626c195..6e6b9e39a 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1793,7 +1793,6 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { } // Register ivar offsets for any `objc_ivar_get` expressions emitted. - Type *ptr_u32 = alloc_type_pointer(t_u32); for (auto const& kv : ivar_map) { lbObjCGlobal const& g = kv.value; lbAddr ivar_addr = {}; @@ -1801,13 +1800,14 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { if (found) { ivar_addr = lb_addr(*found); + GB_ASSERT(ivar_addr.addr.type == t_int_ptr); } else { - // Defined in an external package, must define now - LLVMTypeRef t = lb_type(m, t_u32); + // Defined in an external package, define it now in the main package + LLVMTypeRef t = lb_type(m, t_int); lbValue global{}; global.value = LLVMAddGlobal(m->mod, t, g.global_name); - global.type = ptr_u32; + global.type = t_int_ptr; LLVMSetInitializer(global.value, LLVMConstInt(t, 0, true)); @@ -1825,9 +1825,9 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { args.count = 1; args[0] = ivar; lbValue ivar_offset = lb_emit_runtime_call(p, "ivar_getOffset", args); - lbValue ivar_offset_u32 = lb_emit_conv(p, ivar_offset, t_u32); + lbValue ivar_offset_int = lb_emit_conv(p, ivar_offset, t_int); - lb_addr_store(p, ivar_addr, ivar_offset_u32); + lb_addr_store(p, ivar_addr, ivar_offset_int); } lb_end_procedure_body(p); diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 264364162..521553147 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -2171,11 +2171,11 @@ gb_internal lbAddr lb_handle_objc_find_or_register_ivar(lbModule *m, Type *self_ global_name = gb_string_append_length(global_name, name.text, name.len); // Create a global variable to store offset of the ivar in an instance of an object - LLVMTypeRef t = lb_type(m, t_u32); + LLVMTypeRef t = lb_type(m, t_int); lbValue g = {}; g.value = LLVMAddGlobal(m->mod, t, global_name); - g.type = alloc_type_pointer(t_u32); + g.type = t_int_ptr; if (default_module == m) { LLVMSetInitializer(g.value, LLVMConstInt(t, 0, true)); @@ -2184,7 +2184,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_ivar(lbModule *m, Type *self_ LLVMSetLinkage(g.value, LLVMExternalLinkage); } - mpsc_enqueue(&m->gen->objc_ivars, lbObjCGlobal{m, global_name, name, t_u32, self_type}); + mpsc_enqueue(&m->gen->objc_ivars, lbObjCGlobal{m, global_name, name, t_int, self_type}); lbAddr addr = lb_addr(g); string_map_set(&m->objc_ivars, name, addr); From 0746127654aaa980c3a35039c636b3ca1b794fc8 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Wed, 30 Apr 2025 22:16:24 -0400 Subject: [PATCH 022/120] Minor fixes in data type usage and style. --- src/llvm_backend.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 6e6b9e39a..a7082972a 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1597,8 +1597,8 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { map_set(&ivar_map, g.class_impl_type, g); } - for (const auto& cd : class_impls) { - auto& g = cd.g; + for (const auto &cd : class_impls) { + auto &g = cd.g; Type *class_type = g.class_impl_type; Type *class_ptr_type = alloc_type_pointer(class_type); lbValue class_value = cd.class_value; @@ -1622,7 +1622,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { } - Array* methods = map_get(&m->info->objc_method_implementations, class_type); + Array *methods = map_get(&m->info->objc_method_implementations, class_type); if (!methods) { continue; } @@ -1641,7 +1641,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { wrapper_args[1] = t_objc_SEL; isize method_param_count = method_type->Proc.param_count; - i32 method_param_offset = 0; + isize method_param_offset = 0; // TODO(harold): Need to make sure (at checker stage) that the non-class method has the self parameter already. // (Maybe this is already accounted for?.) @@ -1651,7 +1651,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { method_param_offset = 1; } - for (i32 i = 0; i < method_param_count; i++) { + for (isize i = 0; i < method_param_count; i++) { array_add(&wrapper_args, method_type->Proc.params->Tuple.variables[method_param_offset+i]->type); } @@ -1699,7 +1699,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { } - auto method_call_args = array_make(temporary_allocator(), method_param_count + (isize)method_param_offset); + auto method_call_args = array_make(temporary_allocator(), method_param_count + method_param_offset); if (!md.ac.objc_is_class_method) { method_call_args[0] = lbValue { @@ -1742,7 +1742,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { method_encoding = concatenate_strings(temporary_allocator(), method_encoding, str_lit("#:")); } - for (i32 i = method_param_offset; i < method_param_count; i++) { + for (isize i = method_param_offset; i < method_param_count; i++) { Type *param_type = method_type->Proc.params->Tuple.variables[i]->type; String param_encoding = lb_get_objc_type_encoding(param_type); From 5f0b47c373e34c231879b2700e78ab1bbd6219b5 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 3 May 2025 00:58:33 -0400 Subject: [PATCH 023/120] Implement all checker specification for Objective-C class implementations and `objc_ivar_get` intrinsic --- base/intrinsics/intrinsics.odin | 2 +- src/check_builtin.cpp | 28 +++------------- src/check_decl.cpp | 42 ++++++++++++++++++----- src/checker.cpp | 59 +++++++++++++++++---------------- src/checker.hpp | 3 +- src/checker_builtin_procs.hpp | 2 +- 6 files changed, 71 insertions(+), 65 deletions(-) diff --git a/base/intrinsics/intrinsics.odin b/base/intrinsics/intrinsics.odin index 475b23930..8e0a8df7a 100644 --- a/base/intrinsics/intrinsics.odin +++ b/base/intrinsics/intrinsics.odin @@ -364,7 +364,7 @@ objc_find_selector :: proc($name: string) -> objc_SEL --- objc_register_selector :: proc($name: string) -> objc_SEL --- objc_find_class :: proc($name: string) -> objc_Class --- objc_register_class :: proc($name: string) -> objc_Class --- -objc_ivar_get :: proc(self: ^$T, $U: typeid) -> ^U --- +objc_ivar_get :: proc(self: ^$T) -> ^$U --- valgrind_client_request :: proc(default: uintptr, request: uintptr, a0, a1, a2, a3, a4: uintptr) -> uintptr --- diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 3e531a309..024289169 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -391,7 +391,6 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan case BuiltinProc_objc_ivar_get: { Type *self_type = nullptr; - Type *ivar_type = nullptr; Operand self = {}; check_expr_or_type(c, &self, ce->args[0]); @@ -416,40 +415,21 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan if (!(self_type->kind == Type_Named && self_type->Named.type_name != nullptr && - self_type->Named.type_name->TypeName.objc_class_name != "")) { + self_type->Named.type_name->TypeName.objc_class_name != "")) { gbString t = type_to_string(self_type); error(self.expr, "'%.*s' expected a named type with the attribute @(objc_class=) , got type %s", LIT(builtin_name), t); gb_string_free(t); return false; } - if (self_type->Named.type_name->TypeName.objc_ivar == nullptr) { + Type *ivar_type = self_type->Named.type_name->TypeName.objc_ivar; + if (ivar_type == nullptr) { gbString t = type_to_string(self_type); error(self.expr, "'%.*s' requires that type %s have the attribute @(objc_ivar=).", LIT(builtin_name), t); gb_string_free(t); return false; } - Operand ivar = {}; - check_expr_or_type(c, &ivar, ce->args[1]); - if (ivar.mode == Addressing_Type) { - ivar_type = ivar.type; - } else { - return false; - } - - if (self_type->Named.type_name->TypeName.objc_ivar != ivar_type) { - gbString name_self = type_to_string(self_type); - gbString name_expected = type_to_string(self_type->Named.type_name->TypeName.objc_ivar); - gbString name_given = type_to_string(ivar_type); - error(self.expr, "'%.*s' ivar type %s does not match @objc_ivar type %s on Objective-C class %s.", - LIT(builtin_name), name_given, name_expected, name_self); - gb_string_free(name_self); - gb_string_free(name_expected); - gb_string_free(name_given); - return false; - } - if (type_hint != nullptr && type_hint->kind == Type_Pointer && type_hint->Pointer.elem == ivar_type) { operand->type = type_hint; } else { @@ -457,8 +437,8 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan } operand->mode = Addressing_Value; - return true; + } break; } } diff --git a/src/check_decl.cpp b/src/check_decl.cpp index a37d20f56..18dc5e6b0 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -565,31 +565,41 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); if (super->kind != Type_Named) { + // TODO(harold): Show the current superclass token too error(e->token, "@(objc_superclass) Referenced type must be a named struct"); break; } Type* named_type = base_type(super->Named.type_name->type); if (!is_type_objc_object(named_type)) { + // TODO(harold): Show the current superclass token too error(e->token, "@(objc_superclass) Superclass must be an Objective-C class"); break; } + if (named_type->Named.type_name->TypeName.objc_class_name == "") { + // TODO(harold): Show the current superclass token too + error(e->token, "@(objc_superclass) Superclass must be have a valid @(objc_class) attribute"); + break; + } + super = named_type->Named.type_name->TypeName.objc_superclass; } } else { if (ac.objc_superclass != nullptr) { - error(e->token, "@(objc_superclass) can only be applied when the @(obj_implement) attribute is also applied"); + error(e->token, "@(objc_superclass) may only be applied when the @(obj_implement) attribute is also applied"); } else if (ac.objc_ivar != nullptr) { - error(e->token, "@(objc_ivar) can only be applied when the @(obj_implement) attribute is also applied"); + error(e->token, "@(objc_ivar) may only be applied when the @(obj_implement) attribute is also applied"); } else if (ac.objc_context_provider != nullptr) { - error(e->token, "@(objc_context_provider) can only be applied when the @(obj_implement) attribute is also applied"); + error(e->token, "@(objc_context_provider) may only be applied when the @(obj_implement) attribute is also applied"); } } if (type_size_of(e->type) > 0) { error(e->token, "@(objc_class) marked type must be of zero size"); } + } else if (ac.objc_is_implementation) { + error(e->token, "@(objc_implement) may only be applied when the @(objc_class) attribute is also applied"); } } @@ -994,7 +1004,7 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon error(e->token, "@(objc_name) is required with @(objc_type)"); } else { Type *t = ac.objc_type; - if (t->kind == Type_Named) { + if (t->kind == Type_Named) { // TODO(harold): Shouldn't this be an error otherwise? Or is it checked elsehwere? Entity *tn = t->Named.type_name; GB_ASSERT(tn->kind == Entity_TypeName); @@ -1003,20 +1013,32 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon error(e->token, "@(objc_name) attribute may only be applied to procedures and types within the same scope"); } else { - if (ac.objc_is_implementation) { + // Enable implementation by default if the class is an implementer too and + // @objc_implement was not set to false explicitly in this proc. + bool implement = tn->TypeName.objc_is_implementation; + if (ac.objc_is_disabled_implement) { + implement = false; + } + + if (implement) { GB_ASSERT(e->kind == Entity_Procedure); - Type *proc_type = e->type; + auto &proc = e->type->Proc; + Type &first_param = proc.param_count > 0 ? proc.params[0] : *t_untyped_nil; if (!tn->TypeName.objc_is_implementation) { error(e->token, "@(objc_is_implement) attribute may only be applied to procedures whose class also have @(objc_is_implement) applied"); - } else if (proc_type->Proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { + } else if (!ac.objc_is_class_method && !(first_param.kind == Type_Pointer && first_param.Pointer.elem == t)) { + error(e->token, "Objective-C instance methods implementations require the first parameter to be a pointer to the class type set by @(objc_type)"); + } else if (proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { error(e->token, "Objective-C methods with Odin calling convention can only be used with classes that have @(objc_context_provider) set"); - } else if (ac.objc_is_class_method && proc_type->Proc.calling_convention != ProcCC_CDecl) { + } else if (ac.objc_is_class_method && proc.calling_convention != ProcCC_CDecl) { error(e->token, "Objective-C class methods (objc_is_class_method=true) that have @objc_is_implementation can only use \"c\" calling convention"); + } else if (proc.result_count > 1) { + error(e->token, "Objective-C method implementations may return at most 1 value"); } else { - auto method = ObjcMethodData{ ac, e }; + auto method = ObjcMethodData{ ac, e }; method.ac.objc_selector = ac.objc_selector != "" ? ac.objc_selector : ac.objc_name; CheckerInfo *info = ctx->info; @@ -1033,6 +1055,8 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon map_set(&info->objc_method_implementations, t, list); } } + } else if (ac.objc_selector != "") { + error(e->token, "@(objc_selector) may only be applied to procedures that are Objective-C implementations."); } mutex_lock(&global_type_name_objc_metadata_mutex); diff --git a/src/checker.cpp b/src/checker.cpp index 15d19fb1a..0b093936d 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -3352,7 +3352,7 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { ac->test = true; return true; } else if (name == "export") { - if (ac->objc_is_implementation) { + if (ac->objc_is_implementation) { // TODO(harold): Remove from here, this needs to be checked after all attributes are set. error(value, "Setting @(export) explicitly is not allowed when @(objc_implement) is set. It is exported implicitly."); return false; } @@ -3369,7 +3369,7 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { return true; } else if (name == "linkage") { - if (ac->objc_is_implementation) { + if (ac->objc_is_implementation) { // TODO(harold): Remove from here, this needs to be checked after all attributes are set. error(value, "Explicit linkage not allowed when @(objc_implement) is set. It is set implicitly"); return false; } @@ -3684,6 +3684,10 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind == ExactValue_Bool) { ac->objc_is_implementation = ev.value_bool; + + if (!ac->objc_is_implementation) { + ac->objc_is_disabled_implement = true; + } } else if (ev.kind == ExactValue_Invalid) { ac->objc_is_implementation = true; } else { @@ -3970,7 +3974,7 @@ gb_internal DECL_ATTRIBUTE_PROC(type_decl_attribute) { } else if (name == "objc_ivar") { Type *objc_ivar = check_type(c, value); - if (objc_ivar != nullptr) { + if (objc_ivar != nullptr && objc_ivar->kind == Type_Named) { ac->objc_ivar = objc_ivar; } else { error(value, "'%.*s' expected a named type", LIT(name)); @@ -6488,36 +6492,33 @@ gb_internal void check_objc_context_provider_procedures(Checker *c) { Entity *proc_entity = e->TypeName.objc_context_provider; GB_ASSERT(proc_entity->kind == Entity_Procedure); - Type *proc_type = proc_entity->type; + auto &proc = proc_entity->type->Proc; - // TODO(harold): Give better errors here (specify exactly what's wrong) - const char *signature_error = "The procedure for @(objc_context_provider) has an incorrect signature."; + Type *return_type = proc.result_count != 1 ? t_untyped_nil : base_named_type(proc.results->Tuple.variables[0]->type); + if (return_type != t_context) { + error(proc_entity->token, "The @(objc_context_provider) procedure must only return a context."); + } - if (proc_type->Proc.param_count != 1 || proc_type->Proc.result_count != 1) { - error(proc_entity->token, signature_error); - } else { - Type *self_param = base_type(proc_type->Proc.params->Tuple.variables[0]->type); - Type *return_type = base_named_type(proc_type->Proc.results->Tuple.variables[0]->type); + const char *self_param_err = "The @(objc_context_provider) procedure must take as a parameter a single pointer to the @(objc_type) value."; + if (proc.param_count != 1) { + error(proc_entity->token, self_param_err); + } - if (self_param->kind != Type_Pointer) { - error(proc_entity->token, signature_error); - continue; - } + Type *self_param = base_type(proc.params->Tuple.variables[0]->type); + if (self_param->kind == Type_Pointer) { + error(proc_entity->token, self_param_err); + } - self_param = base_named_type(self_param->Pointer.elem); - - if (return_type != t_context) { - error(e->token, signature_error); - } else if (!internal_check_is_assignable_to(self_param, e->type) && - (e->TypeName.objc_ivar && !internal_check_is_assignable_to(self_param, e->TypeName.objc_ivar)) - ) { - error(e->token, signature_error); - } else if (proc_type->Proc.calling_convention != ProcCC_CDecl && - proc_type->Proc.calling_convention != ProcCC_Contextless) { - error(e->token, signature_error); - } else if (proc_type->Proc.is_polymorphic) { - error(e->token, signature_error); - } + Type *self_type = base_named_type(self_param->Pointer.elem); + if (!internal_check_is_assignable_to(self_type, e->type) && + !(e->TypeName.objc_ivar && internal_check_is_assignable_to(self_type, e->TypeName.objc_ivar))) { + error(proc_entity->token, self_param_err); + } + if (proc.calling_convention != ProcCC_CDecl && proc.calling_convention != ProcCC_Contextless) { + error(e->token, self_param_err); + } + if (proc.is_polymorphic) { + error(e->token, self_param_err); } } } diff --git a/src/checker.hpp b/src/checker.hpp index 0f7e1cb59..fc3ff455b 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -154,7 +154,8 @@ struct AttributeContext { Type * objc_ivar; Entity *objc_context_provider; bool objc_is_class_method; - bool objc_is_implementation; // This struct or proc provides a class/method implementation, not a binding to an existing type. + bool objc_is_implementation; // This struct or proc provides a class/method implementation, not a binding to an existing type. + bool objc_is_disabled_implement; // This means the method explicitly set @objc_implement to false so it won't be inferred from the class' attribute. String require_target_feature; // required by the target micro-architecture String enable_target_feature; // will be enabled for the procedure only diff --git a/src/checker_builtin_procs.hpp b/src/checker_builtin_procs.hpp index 5a7a63ae8..cbb17be65 100644 --- a/src/checker_builtin_procs.hpp +++ b/src/checker_builtin_procs.hpp @@ -674,7 +674,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = { {STR_LIT("objc_find_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, {STR_LIT("objc_register_selector"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("objc_register_class"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, - {STR_LIT("objc_ivar_get"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, + {STR_LIT("objc_ivar_get"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true}, {STR_LIT("constant_utf16_cstring"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics}, From a00b91577d998b3795afd099504a6c2b9d99460e Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 3 May 2025 01:34:01 -0400 Subject: [PATCH 024/120] Prevent multiple uses of the same Objective-C class name --- src/check_builtin.cpp | 4 ++-- src/check_decl.cpp | 9 +++++++++ src/checker.cpp | 1 + src/checker.hpp | 4 +++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 024289169..11fbbe169 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -223,9 +223,9 @@ gb_internal void add_objc_proc_type(CheckerContext *c, Ast *call, Type *return_t data.kind = kind; data.proc_type = alloc_type_proc(scope, params, param_types.count, results, results->Tuple.variables.count, false, ProcCC_CDecl); - mutex_lock(&c->info->objc_types_mutex); + mutex_lock(&c->info->objc_objc_msgSend_mutex); map_set(&c->info->objc_msgSend_types, call, data); - mutex_unlock(&c->info->objc_types_mutex); + mutex_unlock(&c->info->objc_objc_msgSend_mutex); try_to_add_package_dependency(c, "runtime", "objc_msgSend"); try_to_add_package_dependency(c, "runtime", "objc_msgSend_fpret"); diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 18dc5e6b0..c9f6bd85e 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -524,7 +524,16 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, if (decl != nullptr) { AttributeContext ac = {}; check_decl_attributes(ctx, decl->attributes, type_decl_attribute, &ac); + if (e->kind == Entity_TypeName && ac.objc_class != "") { + + mutex_lock(&ctx->info->objc_class_name_mutex); + bool class_exists = string_set_update(&ctx->info->obcj_class_name_set, ac.objc_class); + mutex_unlock(&ctx->info->objc_class_name_mutex); + if (class_exists) { + error(e->token, "@(objc_class) '%s' has already been used elsewhere", ac.objc_class); + } + e->TypeName.objc_class_name = ac.objc_class; if (ac.objc_is_implementation) { diff --git a/src/checker.cpp b/src/checker.cpp index 0b093936d..6e1c3849e 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1390,6 +1390,7 @@ gb_internal void init_checker_info(CheckerInfo *i) { map_init(&i->objc_msgSend_types); mpsc_init(&i->objc_class_implementations, a); + string_set_init(&i->obcj_class_name_set, 0); map_init(&i->objc_method_implementations); string_map_init(&i->load_file_cache); diff --git a/src/checker.hpp b/src/checker.hpp index fc3ff455b..9ac59a669 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -487,9 +487,11 @@ struct CheckerInfo { MPSCQueue intrinsics_entry_point_usage; - BlockingMutex objc_types_mutex; + BlockingMutex objc_objc_msgSend_mutex; PtrMap objc_msgSend_types; + BlockingMutex objc_class_name_mutex; + StringSet obcj_class_name_set; MPSCQueue objc_class_implementations; BlockingMutex objc_method_mutex; From 33d37c72f9750d8249ba1d31b5ef9d3a88c54f0a Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 3 May 2025 01:50:19 -0400 Subject: [PATCH 025/120] Register all classes unconditionally --- src/llvm_backend.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index a7082972a..4396a2a27 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1515,6 +1515,12 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { auto args = array_make(temporary_allocator(), 3, 8); auto class_impls = array_make(temporary_allocator(), 0, 16); + // Register all class implementations unconditionally, even if not statically referenced + for (Entity *e = {}; mpsc_dequeue(&gen->info->objc_class_implementations, &e); /**/) { + GB_ASSERT(e->kind == Entity_TypeName && e->TypeName.objc_is_implementation); + lb_handle_objc_find_or_register_class(p, e->TypeName.objc_class_name, e->type); + } + // Ensure classes that have been implicitly referenced through // the objc_superclass attribute have a global variable available for them. TypeSet class_set{}; @@ -1523,7 +1529,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { auto referenced_classes = array_make(temporary_allocator()); for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { - array_add( &referenced_classes, g); + array_add(&referenced_classes, g); Type *cls = g.class_impl_type; while (cls) { @@ -1547,7 +1553,7 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { // Add all class globals to a map so that we can look them up dynamically // in order to resolve out-of-order because classes that are being implemented - // need their superclasses to have been registered before them. + // require their superclasses to be registered before them. StringMap global_class_map{}; string_map_init(&global_class_map, (usize)gen->objc_classes.count); defer (string_map_destroy(&global_class_map)); From cf3830a6a86de1923a53609a67bb0a8d6b70a6a9 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 3 May 2025 02:30:53 -0400 Subject: [PATCH 026/120] Fix checker errors. --- src/check_decl.cpp | 30 +++++++++++++++--------------- src/checker.cpp | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index c9f6bd85e..fc2edeb9e 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -527,13 +527,6 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, if (e->kind == Entity_TypeName && ac.objc_class != "") { - mutex_lock(&ctx->info->objc_class_name_mutex); - bool class_exists = string_set_update(&ctx->info->obcj_class_name_set, ac.objc_class); - mutex_unlock(&ctx->info->objc_class_name_mutex); - if (class_exists) { - error(e->token, "@(objc_class) '%s' has already been used elsewhere", ac.objc_class); - } - e->TypeName.objc_class_name = ac.objc_class; if (ac.objc_is_implementation) { @@ -542,6 +535,13 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, e->TypeName.objc_ivar = ac.objc_ivar; e->TypeName.objc_context_provider = ac.objc_context_provider; + mutex_lock(&ctx->info->objc_class_name_mutex); + bool class_exists = string_set_update(&ctx->info->obcj_class_name_set, ac.objc_class); + mutex_unlock(&ctx->info->objc_class_name_mutex); + if (class_exists) { + error(e->token, "@(objc_class) name '%.*s' has already been used elsewhere", LIT(ac.objc_class)); + } + mpsc_enqueue(&ctx->info->objc_class_implementations, e); GB_ASSERT(e->TypeName.objc_ivar == nullptr || e->TypeName.objc_ivar->kind == Type_Named); @@ -574,21 +574,20 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, check_single_global_entity(ctx->checker, super->Named.type_name, super->Named.type_name->decl_info); if (super->kind != Type_Named) { - // TODO(harold): Show the current superclass token too error(e->token, "@(objc_superclass) Referenced type must be a named struct"); break; } - Type* named_type = base_type(super->Named.type_name->type); + Type* named_type = base_named_type(super); + GB_ASSERT(named_type->kind == Type_Named); + if (!is_type_objc_object(named_type)) { - // TODO(harold): Show the current superclass token too - error(e->token, "@(objc_superclass) Superclass must be an Objective-C class"); + error(e->token, "@(objc_superclass) Superclass '%.*s' must be an Objective-C class", LIT(named_type->Named.name)); break; } if (named_type->Named.type_name->TypeName.objc_class_name == "") { - // TODO(harold): Show the current superclass token too - error(e->token, "@(objc_superclass) Superclass must be have a valid @(objc_class) attribute"); + error(e->token, "@(objc_superclass) Superclass '%.*s' must have a valid @(objc_class) attribute", LIT(named_type->Named.name)); break; } @@ -1013,6 +1012,7 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon error(e->token, "@(objc_name) is required with @(objc_type)"); } else { Type *t = ac.objc_type; + if (t->kind == Type_Named) { // TODO(harold): Shouldn't this be an error otherwise? Or is it checked elsehwere? Entity *tn = t->Named.type_name; @@ -1033,11 +1033,11 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon GB_ASSERT(e->kind == Entity_Procedure); auto &proc = e->type->Proc; - Type &first_param = proc.param_count > 0 ? proc.params[0] : *t_untyped_nil; + Type *first_param = proc.param_count > 0 ? proc.params->Tuple.variables[0]->type : t_untyped_nil; if (!tn->TypeName.objc_is_implementation) { error(e->token, "@(objc_is_implement) attribute may only be applied to procedures whose class also have @(objc_is_implement) applied"); - } else if (!ac.objc_is_class_method && !(first_param.kind == Type_Pointer && first_param.Pointer.elem == t)) { + } else if (!ac.objc_is_class_method && !(first_param->kind == Type_Pointer && internal_check_is_assignable_to(t, first_param->Pointer.elem))) { error(e->token, "Objective-C instance methods implementations require the first parameter to be a pointer to the class type set by @(objc_type)"); } else if (proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { error(e->token, "Objective-C methods with Odin calling convention can only be used with classes that have @(objc_context_provider) set"); diff --git a/src/checker.cpp b/src/checker.cpp index 6e1c3849e..62cffa788 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -6506,7 +6506,7 @@ gb_internal void check_objc_context_provider_procedures(Checker *c) { } Type *self_param = base_type(proc.params->Tuple.variables[0]->type); - if (self_param->kind == Type_Pointer) { + if (self_param->kind != Type_Pointer) { error(proc_entity->token, self_param_err); } From 6d18560ca3054184d9bd97f280472d8cb5bb5081 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 3 May 2025 03:00:32 -0400 Subject: [PATCH 027/120] Move unconditionally exporting Objective-C methods to the right location --- src/check_decl.cpp | 14 +++++++++++++- src/checker.cpp | 17 ----------------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index fc2edeb9e..84893d5c4 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1000,7 +1000,7 @@ gb_internal String handle_link_name(CheckerContext *ctx, Token token, String lin } -gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeContext const &ac) { +gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeContext &ac) { if (!(ac.objc_name.len || ac.objc_is_class_method || ac.objc_type)) { return; } @@ -1046,6 +1046,18 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon } else if (proc.result_count > 1) { error(e->token, "Objective-C method implementations may return at most 1 value"); } else { + // Always export unconditionally + // NOTE(harold): This means check_objc_methods() MUST be called before + // e->Procedure.is_export is set in check_proc_decl()! + if (ac.is_export) { + error(e->token, "Explicit export not allowed when @(objc_implement) is set. It set exported implicitly"); + } + if (ac.link_name != "") { + error(e->token, "Explicit linkage not allowed when @(objc_implement) is set. It set to \"strong\" implicitly"); + } + + ac.is_export = true; + ac.linkage = STR_LIT("strong"); auto method = ObjcMethodData{ ac, e }; method.ac.objc_selector = ac.objc_selector != "" ? ac.objc_selector : ac.objc_name; diff --git a/src/checker.cpp b/src/checker.cpp index 62cffa788..1569814cc 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -3353,11 +3353,6 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { ac->test = true; return true; } else if (name == "export") { - if (ac->objc_is_implementation) { // TODO(harold): Remove from here, this needs to be checked after all attributes are set. - error(value, "Setting @(export) explicitly is not allowed when @(objc_implement) is set. It is exported implicitly."); - return false; - } - ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind == ExactValue_Invalid) { ac->is_export = true; @@ -3369,12 +3364,6 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { } return true; } else if (name == "linkage") { - - if (ac->objc_is_implementation) { // TODO(harold): Remove from here, this needs to be checked after all attributes are set. - error(value, "Explicit linkage not allowed when @(objc_implement) is set. It is set implicitly"); - return false; - } - ExactValue ev = check_decl_attribute_value(c, value); if (ev.kind != ExactValue_String) { error(value, "Expected either a string 'linkage'"); @@ -3695,12 +3684,6 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { error(elem, "Expected a boolean value, or no value, for '%.*s'", LIT(name)); } - // This implies exported, strongly linked - if (ac->objc_is_implementation) { - ac->is_export = true; - ac->linkage = str_lit("strong"); - } - return true; } else if (name == "objc_selector") { ExactValue ev = check_decl_attribute_value(c, value); From fc082f5ea5f8ba65811b0d008e7f86137297849c Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 3 May 2025 03:20:02 -0400 Subject: [PATCH 028/120] Remove some TODO. Leave important note --- src/check_decl.cpp | 4 ++++ src/llvm_backend.cpp | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 84893d5c4..2be5be023 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1283,6 +1283,9 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { break; } + // NOTE(harold): For Objective-C method implementations, this must happen after + // check_objc_methods() is called as it re-sets ac.is_export to true unconditionally. + // The same is true for the linkage, set below. e->Procedure.entry_point_only = ac.entry_point_only; e->Procedure.is_export = ac.is_export; @@ -1382,6 +1385,7 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { } } + // NOTE(harold): See export/linkage note above(where is_export is assigned) regarding Objective-C method implementations bool is_foreign = e->Procedure.is_foreign; bool is_export = e->Procedure.is_export; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 4396a2a27..ce40e6e9f 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1649,8 +1649,6 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { isize method_param_count = method_type->Proc.param_count; isize method_param_offset = 0; - // TODO(harold): Need to make sure (at checker stage) that the non-class method has the self parameter already. - // (Maybe this is already accounted for?.) if (!md.ac.objc_is_class_method) { GB_ASSERT(method_param_count >= 1); method_param_count -= 1; From be2e4dec7d8b7842b8ddcdef6ddbe6d57f603b43 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sat, 3 May 2025 13:05:27 -0400 Subject: [PATCH 029/120] Resolve other TODOs --- src/check_decl.cpp | 185 +++++++++++++++++++++---------------------- src/llvm_backend.cpp | 7 +- 2 files changed, 97 insertions(+), 95 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 2be5be023..21c57e977 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -551,7 +551,7 @@ gb_internal void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, mpsc_enqueue(&ctx->checker->procs_with_objc_context_provider_to_check, e); } - // @TODO(harold): I think there's a Check elsewhere in the checker for checking cycles. + // TODO(harold): I think there's a Check elsewhere in the checker for checking cycles. // See about moving this to the right location. // Ensure superclass hierarchy are all Objective-C classes and does not cycle @@ -1013,107 +1013,106 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon } else { Type *t = ac.objc_type; - if (t->kind == Type_Named) { // TODO(harold): Shouldn't this be an error otherwise? Or is it checked elsehwere? - Entity *tn = t->Named.type_name; + GB_ASSERT(t->kind == Type_Named); // NOTE(harold): This is already checked for at the attribute resolution stage. + Entity *tn = t->Named.type_name; - GB_ASSERT(tn->kind == Entity_TypeName); + GB_ASSERT(tn->kind == Entity_TypeName); - if (tn->scope != e->scope) { - error(e->token, "@(objc_name) attribute may only be applied to procedures and types within the same scope"); - } else { + if (tn->scope != e->scope) { + error(e->token, "@(objc_name) attribute may only be applied to procedures and types within the same scope"); + } else { - // Enable implementation by default if the class is an implementer too and - // @objc_implement was not set to false explicitly in this proc. - bool implement = tn->TypeName.objc_is_implementation; - if (ac.objc_is_disabled_implement) { - implement = false; - } + // Enable implementation by default if the class is an implementer too and + // @objc_implement was not set to false explicitly in this proc. + bool implement = tn->TypeName.objc_is_implementation; + if (ac.objc_is_disabled_implement) { + implement = false; + } - if (implement) { - GB_ASSERT(e->kind == Entity_Procedure); + if (implement) { + GB_ASSERT(e->kind == Entity_Procedure); - auto &proc = e->type->Proc; - Type *first_param = proc.param_count > 0 ? proc.params->Tuple.variables[0]->type : t_untyped_nil; + auto &proc = e->type->Proc; + Type *first_param = proc.param_count > 0 ? proc.params->Tuple.variables[0]->type : t_untyped_nil; - if (!tn->TypeName.objc_is_implementation) { - error(e->token, "@(objc_is_implement) attribute may only be applied to procedures whose class also have @(objc_is_implement) applied"); - } else if (!ac.objc_is_class_method && !(first_param->kind == Type_Pointer && internal_check_is_assignable_to(t, first_param->Pointer.elem))) { - error(e->token, "Objective-C instance methods implementations require the first parameter to be a pointer to the class type set by @(objc_type)"); - } else if (proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { - error(e->token, "Objective-C methods with Odin calling convention can only be used with classes that have @(objc_context_provider) set"); - } else if (ac.objc_is_class_method && proc.calling_convention != ProcCC_CDecl) { - error(e->token, "Objective-C class methods (objc_is_class_method=true) that have @objc_is_implementation can only use \"c\" calling convention"); - } else if (proc.result_count > 1) { - error(e->token, "Objective-C method implementations may return at most 1 value"); - } else { - // Always export unconditionally - // NOTE(harold): This means check_objc_methods() MUST be called before - // e->Procedure.is_export is set in check_proc_decl()! - if (ac.is_export) { - error(e->token, "Explicit export not allowed when @(objc_implement) is set. It set exported implicitly"); - } - if (ac.link_name != "") { - error(e->token, "Explicit linkage not allowed when @(objc_implement) is set. It set to \"strong\" implicitly"); - } - - ac.is_export = true; - ac.linkage = STR_LIT("strong"); - - auto method = ObjcMethodData{ ac, e }; - method.ac.objc_selector = ac.objc_selector != "" ? ac.objc_selector : ac.objc_name; - - CheckerInfo *info = ctx->info; - mutex_lock(&info->objc_method_mutex); - defer (mutex_unlock(&info->objc_method_mutex)); - - Array* method_list = map_get(&info->objc_method_implementations, t); - if (method_list) { - array_add(method_list, method); - } else { - auto list = array_make(permanent_allocator(), 1, 8); - list[0] = method; - - map_set(&info->objc_method_implementations, t, list); - } - } - } else if (ac.objc_selector != "") { - error(e->token, "@(objc_selector) may only be applied to procedures that are Objective-C implementations."); - } - - mutex_lock(&global_type_name_objc_metadata_mutex); - defer (mutex_unlock(&global_type_name_objc_metadata_mutex)); - - if (!tn->TypeName.objc_metadata) { - tn->TypeName.objc_metadata = create_type_name_obj_c_metadata(); - } - auto *md = tn->TypeName.objc_metadata; - mutex_lock(md->mutex); - defer (mutex_unlock(md->mutex)); - - if (!ac.objc_is_class_method) { - bool ok = true; - for (TypeNameObjCMetadataEntry const &entry : md->value_entries) { - if (entry.name == ac.objc_name) { - error(e->token, "Previous declaration of @(objc_name=\"%.*s\")", LIT(ac.objc_name)); - ok = false; - break; - } - } - if (ok) { - array_add(&md->value_entries, TypeNameObjCMetadataEntry{ac.objc_name, e}); - } + if (!tn->TypeName.objc_is_implementation) { + error(e->token, "@(objc_is_implement) attribute may only be applied to procedures whose class also have @(objc_is_implement) applied"); + } else if (!ac.objc_is_class_method && !(first_param->kind == Type_Pointer && internal_check_is_assignable_to(t, first_param->Pointer.elem))) { + error(e->token, "Objective-C instance methods implementations require the first parameter to be a pointer to the class type set by @(objc_type)"); + } else if (proc.calling_convention == ProcCC_Odin && !tn->TypeName.objc_context_provider) { + error(e->token, "Objective-C methods with Odin calling convention can only be used with classes that have @(objc_context_provider) set"); + } else if (ac.objc_is_class_method && proc.calling_convention != ProcCC_CDecl) { + error(e->token, "Objective-C class methods (objc_is_class_method=true) that have @objc_is_implementation can only use \"c\" calling convention"); + } else if (proc.result_count > 1) { + error(e->token, "Objective-C method implementations may return at most 1 value"); } else { - bool ok = true; - for (TypeNameObjCMetadataEntry const &entry : md->type_entries) { - if (entry.name == ac.objc_name) { - error(e->token, "Previous declaration of @(objc_name=\"%.*s\")", LIT(ac.objc_name)); - ok = false; - break; - } + // Always export unconditionally + // NOTE(harold): This means check_objc_methods() MUST be called before + // e->Procedure.is_export is set in check_proc_decl()! + if (ac.is_export) { + error(e->token, "Explicit export not allowed when @(objc_implement) is set. It set exported implicitly"); } - if (ok) { - array_add(&md->type_entries, TypeNameObjCMetadataEntry{ac.objc_name, e}); + if (ac.link_name != "") { + error(e->token, "Explicit linkage not allowed when @(objc_implement) is set. It set to \"strong\" implicitly"); } + + ac.is_export = true; + ac.linkage = STR_LIT("strong"); + + auto method = ObjcMethodData{ ac, e }; + method.ac.objc_selector = ac.objc_selector != "" ? ac.objc_selector : ac.objc_name; + + CheckerInfo *info = ctx->info; + mutex_lock(&info->objc_method_mutex); + defer (mutex_unlock(&info->objc_method_mutex)); + + Array* method_list = map_get(&info->objc_method_implementations, t); + if (method_list) { + array_add(method_list, method); + } else { + auto list = array_make(permanent_allocator(), 1, 8); + list[0] = method; + + map_set(&info->objc_method_implementations, t, list); + } + } + } else if (ac.objc_selector != "") { + error(e->token, "@(objc_selector) may only be applied to procedures that are Objective-C implementations."); + } + + mutex_lock(&global_type_name_objc_metadata_mutex); + defer (mutex_unlock(&global_type_name_objc_metadata_mutex)); + + if (!tn->TypeName.objc_metadata) { + tn->TypeName.objc_metadata = create_type_name_obj_c_metadata(); + } + auto *md = tn->TypeName.objc_metadata; + mutex_lock(md->mutex); + defer (mutex_unlock(md->mutex)); + + if (!ac.objc_is_class_method) { + bool ok = true; + for (TypeNameObjCMetadataEntry const &entry : md->value_entries) { + if (entry.name == ac.objc_name) { + error(e->token, "Previous declaration of @(objc_name=\"%.*s\")", LIT(ac.objc_name)); + ok = false; + break; + } + } + if (ok) { + array_add(&md->value_entries, TypeNameObjCMetadataEntry{ac.objc_name, e}); + } + } else { + bool ok = true; + for (TypeNameObjCMetadataEntry const &entry : md->type_entries) { + if (entry.name == ac.objc_name) { + error(e->token, "Previous declaration of @(objc_name=\"%.*s\")", LIT(ac.objc_name)); + ok = false; + break; + } + } + if (ok) { + array_add(&md->type_entries, TypeNameObjCMetadataEntry{ac.objc_name, e}); } } } diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index ce40e6e9f..10aa45b14 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1173,7 +1173,6 @@ gb_internal lbProcedure *lb_create_objc_names(lbModule *main_module) { return p; } -// TODO(harold): Perhaps move this out of here and into a more suitable place? String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { // NOTE(harold): See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100 @@ -1424,6 +1423,7 @@ String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { #undef INT_SIZE_ENCODING GB_PANIC("Unreachable"); + return str_lit(""); } struct lbObjCGlobalClass { @@ -1778,7 +1778,10 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { const i64 size = type_size_of(ivar_base); const i64 alignment = (i64)floor_log2((u64)type_align_of(ivar_base)); - // TODO(harold): Should we pass the actual type encoding? Might not be ideal for obfuscation. + // NOTE(harold): I've opted to not emit the type encoding for ivars in order to keep the data private. + // If there is desire in the future to emit the type encoding for introspection through the Obj-C runtime, + // then perhaps an option can be added for it then. + // Should we pass the actual type encoding? Might not be ideal for obfuscation. String ivar_name = str_lit("__$ivar"); String ivar_types = str_lit("{= }"); //lb_get_objc_type_encoding(ivar_type); args.count = 5; From ee8aeea38163c18a9b3513717bd09d3765c0d6d8 Mon Sep 17 00:00:00 2001 From: bogwi Date: Mon, 5 May 2025 14:18:11 +0900 Subject: [PATCH 030/120] CHECK 1 done Fix panic in LLVM backend when using generic procedure with default arguments - Fixed panic in `llvm_backend_proc.cpp` when using unspecialized polymorphic procedures as defaults. - Ensured correct type inference when generic procedures are used as default parameters. --- src/llvm_backend_const.cpp | 5 ++++- src/llvm_backend_general.cpp | 12 ++++++++++-- src/llvm_backend_proc.cpp | 12 ++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index dada2cff5..51c8a4449 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -533,7 +533,10 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb Entity *e = entity_from_expr(expr); res = lb_find_procedure_value_from_entity(m, e); } - GB_ASSERT(res.value != nullptr); + if (res.value == nullptr) { + // This is an unspecialized polymorphic procedure, return nil or dummy value + return lb_const_nil(m, original_type); + } GB_ASSERT(LLVMGetValueKind(res.value) == LLVMFunctionValueKind); if (LLVMGetIntrinsicID(res.value) == 0) { diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 421720c4c..41a6fb34a 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -885,8 +885,8 @@ gb_internal void lb_addr_store(lbProcedure *p, lbAddr addr, lbValue value) { Type *t = base_type(type_deref(addr.addr.type)); GB_ASSERT(t->kind == Type_Struct && t->Struct.soa_kind != StructSoa_None); lbValue len = lb_soa_struct_len(p, addr.addr); - if (addr.soa.index_expr != nullptr) { - lb_emit_bounds_check(p, ast_token(addr.soa.index_expr), index, len); + if (addr.soa.index_expr != nullptr && (!lb_is_const(addr.soa.index) || t->Struct.soa_kind != StructSoa_Fixed)) { + lb_emit_bounds_check(p, ast_token(addr.soa.index_expr), addr.soa.index, len); } } @@ -2728,6 +2728,14 @@ gb_internal lbValue lb_find_procedure_value_from_entity(lbModule *m, Entity *e) ignore_body = other_module != m; lbProcedure *missing_proc = lb_create_procedure(m, e, ignore_body); + if (missing_proc == nullptr) { + // This is an unspecialized polymorphic procedure, which should not be codegen'd + lbValue dummy = {}; + dummy.value = nullptr; + dummy.type = nullptr; + return dummy; + } + if (ignore_body) { mutex_lock(&gen->anonymous_proc_lits_mutex); defer (mutex_unlock(&gen->anonymous_proc_lits_mutex)); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index be51f529d..519ab3e9d 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -67,6 +67,14 @@ gb_internal void lb_mem_copy_non_overlapping(lbProcedure *p, lbValue dst, lbValu gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool ignore_body) { GB_ASSERT(entity != nullptr); GB_ASSERT(entity->kind == Entity_Procedure); + // Skip codegen for unspecialized polymorphic procedures + if (is_type_polymorphic(entity->type) && !entity->Procedure.is_foreign) { + Type *bt = base_type(entity->type); + if (bt->kind == Type_Proc && bt->Proc.is_polymorphic && !bt->Proc.is_poly_specialized) { + // Do not generate code for unspecialized polymorphic procedures + return nullptr; + } + } if (!entity->Procedure.is_foreign) { if ((entity->flags & EntityFlag_ProcBodyChecked) == 0) { GB_PANIC("%.*s :: %s (was parapoly: %d %d)", LIT(entity->token.string), type_to_string(entity->type), is_type_polymorphic(entity->type, true), is_type_polymorphic(entity->type, false)); @@ -815,6 +823,10 @@ gb_internal void lb_build_nested_proc(lbProcedure *p, AstProcLit *pd, Entity *e) e->Procedure.link_name = name; lbProcedure *nested_proc = lb_create_procedure(p->module, e); + if (nested_proc == nullptr) { + // This is an unspecialized polymorphic procedure, skip codegen + return; + } e->code_gen_procedure = nested_proc; lbValue value = {}; From af0e067a12079cc16020e264c6157bb5581c9cf4 Mon Sep 17 00:00:00 2001 From: bogwi Date: Mon, 5 May 2025 15:14:06 +0900 Subject: [PATCH 031/120] CHECK 2 done Add support for handling generic types in LLVM backend - Updated `lb_type_internal` to return a pointer type for unspecialized generics. - Modified `write_type_to_canonical_string` to handle specialized generics without panicking. - Enhanced `default_type` to return the default type of specialized generics when applicable. --- src/llvm_backend_general.cpp | 8 ++++++++ src/name_canonicalization.cpp | 6 +++++- src/types.cpp | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 41a6fb34a..4b9b8d45f 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -2212,6 +2212,14 @@ gb_internal LLVMTypeRef lb_type_internal(lbModule *m, Type *type) { case Type_BitField: return lb_type_internal(m, type->BitField.backing_type); + + case Type_Generic: + if (type->Generic.specialized) { + return lb_type_internal(m, type->Generic.specialized); + } else { + // For unspecialized generics, use a pointer type as a placeholder + return LLVMPointerType(LLVMInt8TypeInContext(m->ctx), 0); + } } GB_PANIC("Invalid type %s", type_to_string(type)); diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp index 6aa933e86..0372f5039 100644 --- a/src/name_canonicalization.cpp +++ b/src/name_canonicalization.cpp @@ -756,8 +756,12 @@ gb_internal void write_type_to_canonical_string(TypeWriter *w, Type *type) { type_writer_appendc(w, "/"); write_type_to_canonical_string(w, type->Generic.specialized); } + } else if (type->Generic.specialized) { + // If we have a specialized type, use that instead of panicking + write_type_to_canonical_string(w, type->Generic.specialized); } else { - GB_PANIC("Type_Generic should never be hit"); + // For unspecialized generics, use a generic placeholder string + type_writer_appendc(w, "rawptr"); } return; diff --git a/src/types.cpp b/src/types.cpp index 9c9472a28..cd33f1a0f 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -2932,6 +2932,10 @@ gb_internal Type *default_type(Type *type) { case Basic_UntypedString: return t_string; case Basic_UntypedRune: return t_rune; } + } else if (type->kind == Type_Generic) { + if (type->Generic.specialized) { + return default_type(type->Generic.specialized); + } } return type; } From af6b763449a7876f08b3edaf9875c57769f10bd4 Mon Sep 17 00:00:00 2001 From: bogwi Date: Mon, 5 May 2025 17:53:32 +0900 Subject: [PATCH 032/120] CHECK 3 done Enhance support for polymorphic procedures in type checking 1. In src/check_type.cpp, added special handling for polymorphic procedures used as default parameter values. We now allow a polymorphic procedure to be used as a default parameter value, even when its type parameters can't be immediately determined. 2. In src/check_expr.cpp, we modified the check_is_assignable_to_with_score function to handle the special case of assigning a polymorphic procedure as a default parameter. The function now allows a polymorphic procedure to be assigned to a concrete procedure type in this specific context. --- src/check_expr.cpp | 38 +++++++++++++++++++++++++++++--------- src/check_type.cpp | 11 ++++++++++- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 10b37bbf3..7ccca1b57 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -643,7 +643,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E gb_internal bool check_polymorphic_procedure_assignment(CheckerContext *c, Operand *operand, Type *type, Ast *poly_def_node, PolyProcData *poly_proc_data) { if (operand->expr == nullptr) return false; - Entity *base_entity = entity_of_node(operand->expr); + Entity *base_entity = entity_from_expr(operand->expr); if (base_entity == nullptr) return false; return find_or_generate_polymorphic_procedure(c, base_entity, type, nullptr, poly_def_node, poly_proc_data); } @@ -995,14 +995,34 @@ gb_internal i64 assign_score_function(i64 distance, bool is_variadic=false) { gb_internal bool check_is_assignable_to_with_score(CheckerContext *c, Operand *operand, Type *type, i64 *score_, bool is_variadic=false, bool allow_array_programming=true) { - i64 score = 0; - i64 distance = check_distance_between_types(c, operand, type, allow_array_programming); - bool ok = distance >= 0; - if (ok) { - score = assign_score_function(distance, is_variadic); + if (c == nullptr) { + GB_ASSERT(operand->mode == Addressing_Value); + GB_ASSERT(is_type_typed(operand->type)); } - if (score_) *score_ = score; - return ok; + if (operand->mode == Addressing_Invalid || type == t_invalid) { + if (score_) *score_ = 0; + return false; + } + + // Handle polymorphic procedure used as default parameter + if (operand->mode == Addressing_Value && is_type_proc(type) && is_type_proc(operand->type)) { + Entity *e = entity_from_expr(operand->expr); + if (e != nullptr && e->kind == Entity_Procedure && is_type_polymorphic(e->type) && !is_type_polymorphic(type)) { + // Special case: Allow a polymorphic procedure to be used as default value for concrete proc type + // during the initial check. It will be properly instantiated when actually used. + if (score_) *score_ = assign_score_function(1); + return true; + } + } + + i64 score = check_distance_between_types(c, operand, type, allow_array_programming); + if (score >= 0) { + if (score_) *score_ = assign_score_function(score, is_variadic); + return true; + } + + if (score_) *score_ = 0; + return false; } @@ -10996,7 +11016,7 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast return kind; case_end; - case_ast_node(i, Implicit, node) + case_ast_node(i, Implicit, node); switch (i->kind) { case Token_context: { diff --git a/src/check_type.cpp b/src/check_type.cpp index 452da4023..431698459 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1910,9 +1910,18 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para case ParameterValue_Location: case ParameterValue_Expression: case ParameterValue_Value: + // Special case for polymorphic procedures as default values + if (param_value.ast_value != nullptr) { + Entity *e = entity_from_expr(param_value.ast_value); + if (e != nullptr && e->kind == Entity_Procedure && is_type_polymorphic(e->type)) { + // Allow polymorphic procedures as default parameter values + // The type will be correctly determined at call site + break; + } + } gbString str = type_to_string(type); error(params[i], "A default value for a parameter must not be a polymorphic constant type, got %s", str); - gb_string_free(str); + gb_string_free(str); break; } } From 14e25c0f2a0dea725cb098dcf9939a8d4681e7d6 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Mon, 5 May 2025 09:07:17 -0400 Subject: [PATCH 033/120] Fix `lb_get_objc_type_encoding` missing matrix and simdvec encodings and minor fixes. --- src/llvm_backend.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 10aa45b14..8d13b2a9e 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1177,7 +1177,7 @@ String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { // NOTE(harold): See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100 // NOTE(harold): Darwin targets are always 64-bit. Should we drop this and assume "q" always? - #define INT_SIZE_ENCODING (build_context.metrics.ptr_size == 4 ? "i" : "q") + #define INT_SIZE_ENCODING (build_context.metrics.int_size == 4 ? "i" : "q") switch (t->kind) { case Type_Basic: { switch (t->Basic.kind) { @@ -1256,13 +1256,13 @@ String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { case Basic_int: return str_lit(INT_SIZE_ENCODING); case Basic_uint: - return build_context.metrics.ptr_size == 4 ? str_lit("I") : str_lit("Q"); + return build_context.metrics.int_size == 4 ? str_lit("I") : str_lit("Q"); case Basic_uintptr: case Basic_rawptr: return str_lit("^v"); case Basic_string: - return build_context.metrics.ptr_size == 4 ? str_lit("{string=*i}") : str_lit("{string=*q}"); + return build_context.metrics.int_size == 4 ? str_lit("{string=*i}") : str_lit("{string=*q}"); case Basic_cstring: return str_lit("*"); case Basic_any: return str_lit("{any=^v^v}"); // rawptr + ^Type_Info @@ -1370,7 +1370,7 @@ String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { String type_str = lb_get_objc_type_encoding(t->Array.elem, pointer_depth); gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); - s = gb_string_append_fmt(s, "[%lld%s]", t->Array.count, type_str.text); + s = gb_string_append_fmt(s, "[%lld%.*s]", t->Array.count, LIT(type_str)); return make_string_c(s); } @@ -1378,21 +1378,21 @@ String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { String type_str = lb_get_objc_type_encoding(t->EnumeratedArray.elem, pointer_depth); gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); - s = gb_string_append_fmt(s, "[%lld%s]", t->EnumeratedArray.count, type_str.text); + s = gb_string_append_fmt(s, "[%lld%.*s]", t->EnumeratedArray.count, LIT(type_str)); return make_string_c(s); } case Type_Slice: { String type_str = lb_get_objc_type_encoding(t->Slice.elem, pointer_depth); gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); - s = gb_string_append_fmt(s, "{slice=^%s%s}", type_str, INT_SIZE_ENCODING); + s = gb_string_append_fmt(s, "{slice=^%.*s%s}", LIT(type_str), INT_SIZE_ENCODING); return make_string_c(s); } case Type_DynamicArray: { String type_str = lb_get_objc_type_encoding(t->DynamicArray.elem, pointer_depth); gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 8); - s = gb_string_append_fmt(s, "{dynamic=^%s%s%sAllocator={?^v}}", type_str, INT_SIZE_ENCODING, INT_SIZE_ENCODING); + s = gb_string_append_fmt(s, "{dynamic=^%.*s%s%sAllocator={?^v}}", LIT(type_str), INT_SIZE_ENCODING, INT_SIZE_ENCODING); return make_string_c(s); } @@ -1407,10 +1407,22 @@ String lb_get_objc_type_encoding(Type *t, isize pointer_depth = 0) { return str_lit("?"); case Type_BitSet: return lb_get_objc_type_encoding(t->BitSet.underlying, pointer_depth); - case Type_SimdVector: - break; - case Type_Matrix: - break; + + case Type_SimdVector: { + String type_str = lb_get_objc_type_encoding(t->SimdVector.elem, pointer_depth); + gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 5); + gb_string_append_fmt(s, "[%lld%.*s]", t->SimdVector.count, LIT(type_str)); + return make_string_c(s); + } + + case Type_Matrix: { + String type_str = lb_get_objc_type_encoding(t->Matrix.elem, pointer_depth); + gbString s = gb_string_make_reserve(temporary_allocator(), type_str.len + 5); + i64 element_count = t->Matrix.column_count * t->Matrix.row_count; + gb_string_append_fmt(s, "[%lld%.*s]", element_count, LIT(type_str)); + return make_string_c(s); + } + case Type_BitField: return lb_get_objc_type_encoding(t->BitField.backing_type, pointer_depth); case Type_SoaPointer: { From 3c0ba5bb55fe59ed1644c3e61fd2a81fb856624e Mon Sep 17 00:00:00 2001 From: bogwi Date: Mon, 5 May 2025 22:39:03 +0900 Subject: [PATCH 034/120] CHECK 4 done The original errors: 1. `5024.odin(127:15) Error: Invalid use of a polymorphic type 'List($T)' in variable declaration` 2. `5024.odin(129:17) Error: Cannot determine polymorphic type from parameter: 'invalid type' to 'List($T)'` Are gone. We now have a single, different error: `5024.odin(124:28) Error: Unspecialized polymorphic types are not allowed in procedure parameters, got List($T)` This error points directly to the `list : List($T)` parameter within the `List_Filter` procedure definition. This seems much more relevant to the actual problem (the interaction between the generic `List_Filter` and the concrete `default_filter`) than the original error about the variable declaration. While this new error message might not be exactly pinpointing the default parameter issue, it correctly identifies the problematic procedure definition (`List_Filter`) as the source of the error, rather than the variable declaration (`my_list`). This seems like a step in the right direction for improving the error reporting for this kind of scenario. --- src/check_stmt.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 1b44ff4d7..0460f5bec 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -2108,10 +2108,12 @@ gb_internal void check_value_decl_stmt(CheckerContext *ctx, Ast *node, u32 mod_f if (init_type == nullptr) { init_type = t_invalid; } else if (is_type_polymorphic(base_type(init_type))) { + /* DISABLED: This error seems too aggressive for instantiated generic types. gbString str = type_to_string(init_type); error(vd->type, "Invalid use of a polymorphic type '%s' in variable declaration", str); gb_string_free(str); init_type = t_invalid; + */ } if (init_type == t_invalid && entity_count == 1 && (mod_flags & (Stmt_BreakAllowed|Stmt_FallthroughAllowed))) { Entity *e = entities[0]; From b34a490c029df3103f0af46b2586df8e394b78da Mon Sep 17 00:00:00 2001 From: Vincent Billet Date: Mon, 5 May 2025 22:14:20 +0200 Subject: [PATCH 035/120] Corrections, +XAPO --- vendor/windows/XAudio2/x3daudio.odin | 20 +- vendor/windows/XAudio2/xapo.odin | 377 ++++++++++++++++++++++++++ vendor/windows/XAudio2/xapofx.odin | 138 ++++++++++ vendor/windows/XAudio2/xaudio2.odin | 80 ++++-- vendor/windows/XAudio2/xaudio2fx.odin | 21 +- 5 files changed, 583 insertions(+), 53 deletions(-) create mode 100644 vendor/windows/XAudio2/xapo.odin create mode 100644 vendor/windows/XAudio2/xapofx.odin diff --git a/vendor/windows/XAudio2/x3daudio.odin b/vendor/windows/XAudio2/x3daudio.odin index d09703476..ad18f0f45 100644 --- a/vendor/windows/XAudio2/x3daudio.odin +++ b/vendor/windows/XAudio2/x3daudio.odin @@ -100,14 +100,14 @@ CALCULATE_FLAG :: enum u32 { } //-----------------------------------------------------// -VECTOR :: [3]f32 // float 3D vector +VECTOR :: distinct [3]f32 // float 3D vector // instance handle of precalculated constants -HANDLE :: [HANDLE_BYTESIZE]byte +HANDLE :: distinct [HANDLE_BYTESIZE]byte // Distance curve point: // Defines a DSP setting at a given normalized distance. -DISTANCE_CURVE_POINT :: struct { +DISTANCE_CURVE_POINT :: struct #packed { Distance: f32, // normalized distance, must be within [0.0f, 1.0f] DSPSetting: f32, // DSP setting } @@ -122,14 +122,14 @@ DISTANCE_CURVE_POINT :: struct { // All distance curve spans must be such that: // pPoints[k-1].DSPSetting + ((pPoints[k].DSPSetting-pPoints[k-1].DSPSetting) / (pPoints[k].Distance-pPoints[k-1].Distance)) * (pPoints[k].Distance-pPoints[k-1].Distance) != NAN or infinite values // For all points in the distance curve where 1 <= k < PointCount. -DISTANCE_CURVE :: struct { +DISTANCE_CURVE :: struct #packed { pPoints: [^]DISTANCE_CURVE_POINT, // distance curve point array, must have at least PointCount elements with no duplicates and be sorted in ascending order with respect to Distance PointCount: u32, // number of distance curve points, must be >= 2 as all distance curves must have at least two endpoints, defining DSP settings at 0.0f and 1.0f normalized distance } Default_LinearCurvePoints := [2]DISTANCE_CURVE_POINT{{0.0, 1.0}, {1.0, 0.0}} Default_LinearCurve := DISTANCE_CURVE{&Default_LinearCurvePoints[0], 2} -CONE :: struct { +CONE :: struct #packed { InnerAngle: f32, // inner cone angle in radians, must be within [0.0f, TAU] OuterAngle: f32, // outer cone angle in radians, must be within [InnerAngle, TAU] @@ -146,7 +146,7 @@ Default_DirectionalCone := CONE{math.PI / 2, math.PI, 1.0, 0.708, 0.0, 0.25, 0.7 // Defines a point of 3D audio reception. // // The cone is directed by the listener's front orientation. -LISTENER :: struct { +LISTENER :: struct #packed { OrientFront: VECTOR, // orientation of front direction, used only for matrix and delay calculations or listeners with cones for matrix, LPF (both direct and reverb paths), and reverb calculations, must be normalized when used OrientTop: VECTOR, // orientation of top direction, used only for matrix and delay calculations, must be orthonormal with OrientFront when used @@ -175,7 +175,7 @@ LISTENER :: struct { // For example, doppler shift is always calculated with respect to the emitter base position and so is constant for all its channel points. // Distance curve calculations are also with respect to the emitter base position, with the curves being calculated independently of each other. // For instance, volume and LFE calculations do not affect one another. -EMITTER :: struct { +EMITTER :: struct #packed { pCone: ^CONE, // sound cone, used only with single-channel emitters for matrix, LPF (both direct and reverb paths), and reverb calculations, NULL specifies omnidirectionality OrientFront: VECTOR, // orientation of front direction, used only for emitter angle calculations or with multi-channel emitters for matrix calculations or single-channel emitters with cones for matrix, LPF (both direct and reverb paths), and reverb calculations, must be normalized when used @@ -205,7 +205,7 @@ EMITTER :: struct { // Receives results from a call to Calculate to be sent to the low-level audio rendering API for 3D signal processing. // // The user is responsible for allocating the matrix coefficient table, delay time array, and initializing the channel counts when used. -DSP_SETTINGS :: struct { +DSP_SETTINGS :: struct #packed { pMatrixCoefficients: [^]f32, // [inout] matrix coefficient table, receives an array representing the volume level used to send from source channel S to destination channel D, stored as pMatrixCoefficients[SrcChannelCount * D + S], must have at least SrcChannelCount*DstChannelCount elements pDelayTimes: [^]f32, // [inout] delay time array, receives delays for each destination channel in milliseconds, must have at least DstChannelCount elements (stereo final mix only) SrcChannelCount: u32, // [in] number of source channels, must equal number of channels in respective emitter @@ -223,11 +223,11 @@ DSP_SETTINGS :: struct { } //-------------------------------------------------------// -@(default_calling_convention="system", link_prefix="X3DAudio") +@(default_calling_convention="cdecl", link_prefix="X3DAudio") foreign xa2 { // initializes instance handle Initialize :: proc(SpeakerChannelMask: SPEAKER_FLAGS, SpeedOfSound: f32, Instance: HANDLE) -> HRESULT --- // calculates DSP settings with respect to 3D parameters - Calculate :: proc(Instance: HANDLE, pListener: ^LISTENER, pEmitter: ^EMITTER, Flags: CALCULATE_FLAGS, pDSPSettings: ^DSP_SETTINGS) --- + Calculate :: proc(Instance: HANDLE, #by_ptr pListener: LISTENER, #by_ptr pEmitter: EMITTER, Flags: CALCULATE_FLAGS, pDSPSettings: ^DSP_SETTINGS) --- } diff --git a/vendor/windows/XAudio2/xapo.odin b/vendor/windows/XAudio2/xapo.odin new file mode 100644 index 000000000..21132100c --- /dev/null +++ b/vendor/windows/XAudio2/xapo.odin @@ -0,0 +1,377 @@ +#+build windows + +/* NOTES: + 1. Definition of terms: + DSP: Digital Signal Processing. + + CBR: Constant BitRate -- DSP that consumes a constant number of + input samples to produce an output sample. + For example, a 22kHz to 44kHz resampler is CBR DSP. + Even though the number of input to output samples differ, + the ratio between input to output rate remains constant. + All user-defined XAPOs are assumed to be CBR as + XAudio2 only allows CBR DSP to be added to an effect chain. + + XAPO: Cross-platform Audio Processing Object -- + a thin wrapper that manages DSP code, allowing it + to be easily plugged into an XAudio2 effect chain. + + Frame: A block of samples, one per channel, + to be played simultaneously. + E.g. a mono stream has one sample per frame. + + In-Place: Processing such that the input buffer equals the + output buffer (i.e. input data modified directly). + This form of processing is generally more efficient + than using separate memory for input and output. + However, an XAPO may not perform format conversion + when processing in-place. + + 2. XAPO member variables are divided into three classifications: + Immutable: Set once via IXAPO.Initialize and remain + constant during the lifespan of the XAPO. + + Locked: May change before the XAPO is locked via + IXAPO.LockForProcess but remain constant + until IXAPO.UnlockForProcess is called. + + Dynamic: May change from one processing pass to the next, + usually via IXAPOParameters.SetParameters. + XAPOs should assign reasonable defaults to their dynamic + variables during IXAPO.Initialize/LockForProcess so + that calling IXAPOParameters.SetParameters is not + required before processing begins. + + When implementing an XAPO, determine the type of each variable and + initialize them in the appropriate method. Immutable variables are + generally preferable over locked which are preferable over dynamic. + That is, one should strive to minimize XAPO state changes for + best performance, maintainability, and ease of use. + + 3. To minimize glitches, the realtime audio processing thread must + not block. XAPO methods called by the realtime thread are commented + as non-blocking and therefore should not use blocking synchronization, + allocate memory, access the disk, etc. The XAPO interfaces were + designed to allow an effect implementer to move such operations + into other methods called on an application controlled thread. + + 4. Extending functionality is accomplished through the addition of new + COM interfaces. For example, if a new member is added to a parameter + structure, a new interface using the new structure should be added, + leaving the original interface unchanged. + This ensures consistent communication between future versions of + XAudio2 and various versions of XAPOs that may exist in an application. + + 5. All audio data is interleaved in XAudio2. + The default audio format for an effect chain is WAVE_FORMAT_IEEE_FLOAT. + + 6. User-defined XAPOs should assume all input and output buffers are + 16-byte aligned. + + 7. See XAPOBase.odin for an XAPO base class which provides a default + implementation for most of the interface methods defined below. */ + +package windows_xaudio2 + +import win "core:sys/windows" + +//---------------------------------------------------// + +// XAPO error codes +FORMAT_UNSUPPORTED := win.MAKE_HRESULT(win.SEVERITY.ERROR, 0x897, 0x01) // requested audio format unsupported + +// supported number of channels (samples per frame) range +XAPO_MIN_CHANNELS :: 1 +XAPO_MAX_CHANNELS :: 64 + +// supported framerate range +XAPO_MIN_FRAMERATE :: 1000 +XAPO_MAX_FRAMERATE :: 200000 + +// unicode string length, including terminator, used with XAPO_REGISTRATION_PROPERTIES +XAPO_REGISTRATION_STRING_LENGTH :: 256 + + +// XAPO property flags, used with XAPO_REGISTRATION_PROPERTIES.Flags: +XAPO_FLAGS :: distinct bit_set[XAPO_FLAG; u32] +XAPO_FLAG :: enum u32 { + // Number of channels of input and output buffers must match, applies to XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.pFormat. + CHANNELS_MUST_MATCH = 0, + + // Framerate of input and output buffers must match, applies to XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.pFormat. + FRAMERATE_MUST_MATCH = 1, + + // Bit depth of input and output buffers must match, applies to XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.pFormat. + // Container size of input and output buffers must also match if XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.pFormat is WAVEFORMATEXTENSIBLE. + BITSPERSAMPLE_MUST_MATCH = 2, + + // Number of input and output buffers must match, applies to XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS. + // Also, XAPO_REGISTRATION_PROPERTIES.MinInputBufferCount must equal XAPO_REGISTRATION_PROPERTIES.MinOutputBufferCount and XAPO_REGISTRATION_PROPERTIES.MaxInputBufferCount must equal XAPO_REGISTRATION_PROPERTIES.MaxOutputBufferCount when used. + BUFFERCOUNT_MUST_MATCH = 3, + + // XAPO must be run in-place. Use this flag only if your DSP implementation cannot process separate input and output buffers. + // If set, the following flags must also be set: + // XAPO_FLAG_CHANNELS_MUST_MATCH + // XAPO_FLAG_FRAMERATE_MUST_MATCH + // XAPO_FLAG_BITSPERSAMPLE_MUST_MATCH + // XAPO_FLAG_BUFFERCOUNT_MUST_MATCH + // XAPO_FLAG_INPLACE_SUPPORTED + // Multiple input and output buffers may be used with in-place XAPOs, though the input buffer count must equal the output buffer count. + // When multiple input/output buffers are used, the XAPO may assume input buffer [N] equals output buffer [N] for in-place processing. + INPLACE_REQUIRED = 5, + + // XAPO may be run in-place. If the XAPO is used in a chain such that the requirements for XAPO_FLAG_INPLACE_REQUIRED are met, XAudio2 will ensure the XAPO is run in-place. + // If not met, XAudio2 will still run the XAPO albeit with separate input and output buffers. + // For example, consider an effect which may be ran in stereo->5.1 mode or mono->mono mode. When set to stereo->5.1, it will be run with separate input and output buffers as format conversion is not permitted in-place. + // However, if configured to run mono->mono, the same XAPO can be run in-place. Thus the same implementation may be conveniently reused for various input/output configurations, while taking advantage of in-place processing when possible. + INPLACE_SUPPORTED = 4, +} + +//-----------------------------------------------------// + +// XAPO registration properties, describes general XAPO characteristics, used with IXAPO.GetRegistrationProperties +XAPO_REGISTRATION_PROPERTIES :: struct #packed { + clsid: win.CLSID, // COM class ID, used with CoCreate + FriendlyName: [XAPO_REGISTRATION_STRING_LENGTH]u16, // friendly name unicode string + CopyrightInfo: [XAPO_REGISTRATION_STRING_LENGTH]u16, // copyright information unicode string + MajorVersion: u32, // major version + MinorVersion: u32, // minor version + Flags: XAPO_FLAGS, // XAPO property flags, describes supported input/output configuration + MinInputBufferCount: u32, // minimum number of input buffers required for processing, can be 0 + MaxInputBufferCount: u32, // maximum number of input buffers supported for processing, must be >= MinInputBufferCount + MinOutputBufferCount: u32, // minimum number of output buffers required for processing, can be 0, must match MinInputBufferCount when XAPO_FLAG_BUFFERCOUNT_MUST_MATCH used + MaxOutputBufferCount: u32, // maximum number of output buffers supported for processing, must be >= MinOutputBufferCount, must match MaxInputBufferCount when XAPO_FLAG_BUFFERCOUNT_MUST_MATCH used +} + +// LockForProcess buffer parameters: +// Defines buffer parameters that remain constant while an XAPO is locked. +// Used with IXAPO::LockForProcess. +// For CBR XAPOs, MaxFrameCount is the only number of frames +// IXAPO::Process would have to handle for the respective buffer. +XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS :: struct #packed { + pFormat: ^WAVEFORMATEX, // buffer audio format + MaxFrameCount: u32, // maximum number of frames in respective buffer that IXAPO::Process would have to handle, irrespective of dynamic variable settings, can be 0 +} + +// Buffer flags: +// Describes assumed content of the respective buffer. +// Used with XAPO_PROCESS_BUFFER_PARAMETERS.BufferFlags. +// This meta-data can be used by an XAPO to implement optimizations that require knowledge of a buffer's content. +// For example, XAPOs that always produce silent output from silent input can check the flag on the input buffer to determine if any signal processing is necessary. +// If silent, the XAPO may simply set the flag on the output buffer to silent and return, optimizing out the work of processing silent data: XAPOs that generate silence for any reason may set the buffer's flag accordingly rather than writing out silent frames to the buffer itself. +// The flags represent what should be assumed is in the respective buffer. The flags may not reflect what is actually stored in memory. +XAPO_BUFFER_FLAGS :: enum i32 { + XAPO_BUFFER_SILENT, // silent data should be assumed, respective memory may be uninitialized + XAPO_BUFFER_VALID, // arbitrary data should be assumed (may or may not be silent frames), respective memory initialized +} + +// Process buffer parameters: +// Defines buffer parameters that may change from one +// processing pass to the next. Used with IXAPO::Process. +// +// Note the byte size of the respective buffer must be at least: +// XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount * XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.pFormat->nBlockAlign +// +// Although the audio format and maximum size of the respective +// buffer is locked (defined by XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS), +// the actual memory address of the buffer given is permitted to change +// from one processing pass to the next. +// +// For CBR XAPOs, ValidFrameCount is constant while locked and equals +// the respective XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount. +XAPO_PROCESS_BUFFER_PARAMETERS :: struct #packed { + pBuffer: rawptr, // audio data buffer, must be non-NULL + BufferFlags: XAPO_BUFFER_FLAGS, // describes assumed content of pBuffer, does not affect ValidFrameCount + ValidFrameCount: u32, // number of frames of valid data, must be within respective [0, XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount], always XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount for CBR/user-defined XAPOs, does not affect BufferFlags +} + +XAPOFree :: win.CoTaskMemFree + +IXAPO_UUID_STRING :: "A410B984-9839-4819-A0BE-2856AE6B3ADB" +IXAPO_UUID := &win.IID{0xA410B984, 0x9839, 0x4819, {0xA0, 0xBE, 0x28, 0x56, 0xAE, 0x6B, 0x3A, 0xDB}} +IXAPO :: struct #raw_union { + #subtype iunknown: IUnknown, + using ixapo_vtable: ^IXAPO_VTable, +} +IXAPO_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + + // DESCRIPTION: + // Allocates a copy of the registration properties of the XAPO. + // PARAMETERS: + // ppRegistrationProperties - [out] receives pointer to copy of registration properties, use XAPOFree to free structure, left untouched on failure + // RETURN VALUE: + // COM error code + GetRegistrationProperties: proc "system" (this: ^IXAPO, ppRegistrationProperties: ^^XAPO_REGISTRATION_PROPERTIES) -> HRESULT, + + // DESCRIPTION: + // Queries if an input/output configuration is supported. + // REMARKS: + // This method allows XAPOs to express dependency of input format with respect to output format. + // If the input/output format pair configuration is unsupported, this method also determines the nearest input format supported. + // Nearest meaning closest bit depth, framerate, and channel count, in that order of importance. + // The behaviour of this method should remain constant after the XAPO has been initialized. + // PARAMETERS: + // pOutputFormat - [in] output format known to be supported + // pRequestedInputFormat - [in] input format to examine + // ppSupportedInputFormat - [out] receives pointer to nearest input format supported if not NULL and input/output configuration unsupported, use XAPOFree to free structure, left untouched on any failure except XAPO_E_FORMAT_UNSUPPORTED + // RETURN VALUE: + // COM error code, including: + // S_OK - input/output configuration supported, ppSupportedInputFormat left untouched + // FORMAT_UNSUPPORTED - input/output configuration unsupported, ppSupportedInputFormat receives pointer to nearest input format supported if not NULL + // E_INVALIDARG - either audio format invalid, ppSupportedInputFormat left untouched + IsInputFormatSupported: proc "system" (this: ^IXAPO, pOutputFormat: ^WAVEFORMATEX, pRequestedInputFormat: ^WAVEFORMATEX, ppSupportedInputFormat: ^^WAVEFORMATEX) -> HRESULT, + + // DESCRIPTION: + // Queries if an input/output configuration is supported. + // REMARKS: + // This method allows XAPOs to express dependency of output format with respect to input format. + // If the input/output format pair configuration is unsupported, this method also determines the nearest output format supported. + // Nearest meaning closest bit depth, framerate, and channel count, in that order of importance. + // The behaviour of this method should remain constant after the XAPO has been initialized. + // PARAMETERS: + // pInputFormat - [in] input format known to be supported + // pRequestedOutputFormat - [in] output format to examine + // ppSupportedOutputFormat - [out] receives pointer to nearest output format supported if not NULL and input/output configuration unsupported, use XAPOFree to free structure, left untouched on any failure except XAPO_E_FORMAT_UNSUPPORTED + // RETURN VALUE: + // COM error code, including: + // S_OK - input/output configuration supported, ppSupportedOutputFormat left untouched + // FORMAT_UNSUPPORTED - input/output configuration unsupported, ppSupportedOutputFormat receives pointer to nearest output format supported if not NULL + // E_INVALIDARG - either audio format invalid, ppSupportedOutputFormat left untouched + IsOutputFormatSupported: proc "system" (this: ^IXAPO, pInputFormat: ^WAVEFORMATEX, pRequestedOutputFormat: ^WAVEFORMATEX, ppSupportedOutputFormat: ^^WAVEFORMATEX) -> HRESULT, + + // DESCRIPTION: + // Performs any effect-specific initialization if required. + // REMARKS: + // The contents of pData are defined by the XAPO. + // Immutable variables (constant during the lifespan of the XAPO) should be set once via this method. + // Once initialized, an XAPO cannot be initialized again. + // An XAPO should be initialized before passing it to XAudio2 as part of an effect chain. XAudio2 will not call this method; it exists for future content-driven initialization. + // PARAMETERS: + // pData - [in] effect-specific initialization parameters, may be NULL if DataByteSize == 0 + // DataByteSize - [in] size of pData in bytes, may be 0 if pData is NULL + // RETURN VALUE: + // COM error code + Initialize: proc "system" (this: ^IXAPO, pData: rawptr, DataByteSize: u32) -> HRESULT, + + // DESCRIPTION: + // Resets variables dependent on frame history. + // REMARKS: + // All other variables remain unchanged, including variables set by IXAPOParameters.SetParameters. + // For example, an effect with delay should zero out its delay line during this method, but should not reallocate anything as the + // XAPO remains locked with a constant input/output configuration. XAudio2 calls this method only if the XAPO is locked. + // This method should not block as it is called from the realtime thread. + // PARAMETERS: + // void + // RETURN VALUE: + // void + Reset: proc "system" (this: ^IXAPO), + + // DESCRIPTION: + // Locks the XAPO to a specific input/output configuration, + // allowing it to do any final initialization before Process + // is called on the realtime thread. + // REMARKS: + // Once locked, the input/output configuration and any other locked variables remain constant until UnlockForProcess is called. + // XAPOs should assert the input/output configuration is supported and that any required effect-specific initialization is complete. + // IsInputFormatSupported, IsOutputFormatSupported, and Initialize should be called as necessary before this method is called. + // All internal memory buffers required for Process should be allocated by the time this method returns successfully as Process is non-blocking and should not allocate memory. + // Once locked, an XAPO cannot be locked again until UnLockForProcess is called. + // PARAMETERS: + // InputLockedParameterCount - [in] number of input buffers, must be within [XAPO_REGISTRATION_PROPERTIES.MinInputBufferCount, XAPO_REGISTRATION_PROPERTIES.MaxInputBufferCount] + // pInputLockedParameters - [in] array of input locked buffer parameter structures, may be NULL if InputLockedParameterCount == 0, otherwise must have InputLockedParameterCount elements + // OutputLockedParameterCount - [in] number of output buffers, must be within [XAPO_REGISTRATION_PROPERTIES.MinOutputBufferCount, XAPO_REGISTRATION_PROPERTIES.MaxOutputBufferCount], must match InputLockedParameterCount when XAPO_FLAG_BUFFERCOUNT_MUST_MATCH used + // pOutputLockedParameters - [in] array of output locked buffer parameter structures, may be NULL if OutputLockedParameterCount == 0, otherwise must have OutputLockedParameterCount elements + // RETURN VALUE: + // COM error code + LockForProcess: proc "system" (this: ^IXAPO, InputLockedParameterCount: u32, pInputLockedParameters: [^]XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS, OutputLockedParameterCount: u32, pOutputLockedParameters: [^]XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS) -> HRESULT, + + // DESCRIPTION: + // Opposite of LockForProcess. Variables allocated during LockForProcess should be deallocated by this method. + // REMARKS: + // Unlocking an XAPO allows an XAPO instance to be reused with different input/output configurations. + // PARAMETERS: + // void + // RETURN VALUE: + // void + UnlockForProcess: proc "system" (this: ^IXAPO), + + // DESCRIPTION: + // Runs the XAPO's DSP code on the given input/output buffers. + // REMARKS: + // In addition to writing to the output buffers as appropriate, an XAPO must set the BufferFlags and ValidFrameCount members of all elements in pOutputProcessParameters accordingly. + // ppInputProcessParameters will not necessarily be the same as ppOutputProcessParameters for in-place processing, rather the pBuffer members of each will point to the same memory. + // Multiple input/output buffers may be used with in-place XAPOs, though the input buffer count must equal the output buffer count. + // When multiple input/output buffers are used with in-place XAPOs, the XAPO may assume input buffer [N] equals output buffer [N]. + // When IsEnabled is FALSE, the XAPO should process thru. Thru processing means an XAPO should not apply its normal processing to the given input/output buffers during Process. + // It should instead pass data from input to output with as little modification possible. Effects that perform format conversion should continue to do so. + // The effect must ensure transitions between normal and thru processing do not introduce discontinuities into the signal. + // XAudio2 calls this method only if the XAPO is locked. This method should not block as it is called from the realtime thread. + // PARAMETERS: + // InputProcessParameterCount - [in] number of input buffers, matches respective InputLockedParameterCount parameter given to LockForProcess + // pInputProcessParameters - [in] array of input process buffer parameter structures, may be NULL if InputProcessParameterCount == 0, otherwise must have InputProcessParameterCount elements + // OutputProcessParameterCount - [in] number of output buffers, matches respective OutputLockedParameterCount parameter given to LockForProcess + // pOutputProcessParameters - [in/out] array of output process buffer parameter structures, may be NULL if OutputProcessParameterCount == 0, otherwise must have OutputProcessParameterCount elements + // IsEnabled - [in] TRUE to process normally, FALSE to process thru + // RETURN VALUE: + // void + Process: proc "system" (this: ^IXAPO, InputProcessParameterCount: u32, pInputProcessParameters: [^]XAPO_PROCESS_BUFFER_PARAMETERS, OutputProcessParameterCount: u32, pOutputProcessParameters: [^]XAPO_PROCESS_BUFFER_PARAMETERS, IsEnabled: b32), + + // DESCRIPTION: + // Returns the number of input frames required to generate the requested number of output frames. + // REMARKS: + // XAudio2 may call this method to determine how many input frames an XAPO requires. + // This is constant for locked CBR XAPOs; this method need only be called once while an XAPO is locked. + // XAudio2 calls this method only if the XAPO is locked. This method should not block as it is called from the realtime thread. + // PARAMETERS: + // OutputFrameCount - [in] requested number of output frames, must be within respective [0, XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount], always XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount for CBR/user-defined XAPOs + // RETURN VALUE: + // number of input frames required + CalcInputFrames: proc "system" (this: ^IXAPO, OutputFrameCount: u32) -> u32, + + // DESCRIPTION: + // Returns the number of output frames generated for the requested number of input frames. + // REMARKS: + // XAudio2 may call this method to determine how many output frames an XAPO will generate. This is constant for locked CBR XAPOs; this method need only be called once while an XAPO is locked. + // XAudio2 calls this method only if the XAPO is locked. This method should not block as it is called from the realtime thread. + // PARAMETERS: + // InputFrameCount - [in] requested number of input frames, must be within respective [0, XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount], always XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS.MaxFrameCount for CBR/user-defined XAPOs + // RETURN VALUE: + // number of output frames generated + CalcOutputFrames: proc "system" (this: ^IXAPO, InputFrameCount: u32) -> u32, +} + +// IXAPOParameters: +// Optional XAPO COM interface that allows an XAPO to use effect-specific parameters. +IXAPOParameters_UUID_STRING :: "26D95C66-80F2-499A-AD54-5AE7F01C6D98" +IXAPOParameters_UUID := &win.IID{0x26D95C66, 0x80F2, 0x499A, {0xAD, 0x54, 0x5A, 0xE7, 0xF0, 0x1C, 0x6D, 0x98}} +IXAPOParameters :: struct #raw_union { + #subtype iunknown: IUnknown, + using ixapoparameters_vtable: ^IXAPOParameters_VTable, +} +IXAPOParameters_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + + // DESCRIPTION: + // Sets effect-specific parameters. + // REMARKS: + // This method may only be called on the realtime thread; no synchronization between it and IXAPO.Process is necessary. + // This method should not block as it is called from the realtime thread. + // PARAMETERS: + // pParameters - [in] effect-specific parameter block, must be != NULL + // ParameterByteSize - [in] size of pParameters in bytes, must be > 0 + // RETURN VALUE: + // void + SetParameters: proc "system" (this: ^IXAPOParameters, pParameters: rawptr, ParameterByteSize: u32), + + // DESCRIPTION: + // Gets effect-specific parameters. + // REMARKS: + // Unlike SetParameters, XAudio2 does not call this method on the realtime thread. Thus, the XAPO must protect variables shared with SetParameters/Process using appropriate synchronization. + // PARAMETERS: + // pParameters - [out] receives effect-specific parameter block, must be != NULL + // ParameterByteSize - [in] size of pParameters in bytes, must be > 0 + // RETURN VALUE: + // void + GetParameters: proc "system" (this: ^IXAPOParameters, pParameters: rawptr, ParameterByteSize: u32), +} diff --git a/vendor/windows/XAudio2/xapofx.odin b/vendor/windows/XAudio2/xapofx.odin new file mode 100644 index 000000000..6e6a9afd4 --- /dev/null +++ b/vendor/windows/XAudio2/xapofx.odin @@ -0,0 +1,138 @@ +#+build windows + +package windows_xaudio2 + +import win "core:sys/windows" + +foreign import xa2 "system:xaudio2.lib" + +//---------------------------------------------------// + +FXEQ_UUID_STRING :: "F5E01117-D6C4-485A-A3F5-695196F3DBFA" +FXEQ_UUID := &win.CLSID{0xF5E01117, 0xD6C4, 0x485A, {0xA3, 0xF5, 0x69, 0x51, 0x96, 0xF3, 0xDB, 0xFA}} + +FXMasteringLimiter_UUID_STRING :: "C4137916-2BE1-46FD-8599-441536F49856" +FXMasteringLimiter_UUID := &win.CLSID{0xC4137916, 0x2BE1, 0x46FD, {0x85, 0x99, 0x44, 0x15, 0x36, 0xF4, 0x98, 0x56}} + +FXReverb_UUID_STRING :: "7D9ACA56-CB68-4807-B632-B137352E8596" +FXReverb_UUID := &win.CLSID{0x7D9ACA56, 0xCB68, 0x4807, {0xB6, 0x32, 0xB1, 0x37, 0x35, 0x2E, 0x85, 0x96}} + +FXEcho_UUID_STRING :: "5039D740-F736-449A-84D3-A56202557B87" +FXEcho_UUID := &win.CLSID{0x5039D740, 0xF736, 0x449A, {0x84, 0xD3, 0xA5, 0x62, 0x02, 0x55, 0x7B, 0x87}} + +// EQ parameter bounds (inclusive), used with FXEQ: +FXEQ_MIN_FRAMERATE :: 22000 +FXEQ_MAX_FRAMERATE :: 48000 + +FXEQ_MIN_FREQUENCY_CENTER :: 20.0 +FXEQ_MAX_FREQUENCY_CENTER :: 20000.0 +FXEQ_DEFAULT_FREQUENCY_CENTER_0 :: 100.0 // band 0 +FXEQ_DEFAULT_FREQUENCY_CENTER_1 :: 800.0 // band 1 +FXEQ_DEFAULT_FREQUENCY_CENTER_2 :: 2000.0 // band 2 +FXEQ_DEFAULT_FREQUENCY_CENTER_3 :: 10000.0 // band 3 + +FXEQ_MIN_GAIN :: 0.126 // -18dB +FXEQ_MAX_GAIN :: 7.94 // +18dB +FXEQ_DEFAULT_GAIN :: 1.0 // 0dB change, all bands + +FXEQ_MIN_BANDWIDTH :: 0.1 +FXEQ_MAX_BANDWIDTH :: 2.0 +FXEQ_DEFAULT_BANDWIDTH :: 1.0 // all bands + + +// Mastering limiter parameter bounds (inclusive), used with FXMasteringLimiter: +FXMASTERINGLIMITER_MIN_RELEASE :: 1 +FXMASTERINGLIMITER_MAX_RELEASE :: 20 +FXMASTERINGLIMITER_DEFAULT_RELEASE :: 6 + +FXMASTERINGLIMITER_MIN_LOUDNESS :: 1 +FXMASTERINGLIMITER_MAX_LOUDNESS :: 1800 +FXMASTERINGLIMITER_DEFAULT_LOUDNESS :: 1000 + + +// Reverb parameter bounds (inclusive), used with FXReverb: +FXREVERB_MIN_DIFFUSION :: 0.0 +FXREVERB_MAX_DIFFUSION :: 1.0 +FXREVERB_DEFAULT_DIFFUSION :: 0.9 + +FXREVERB_MIN_ROOMSIZE :: 0.0001 +FXREVERB_MAX_ROOMSIZE :: 1.0 +FXREVERB_DEFAULT_ROOMSIZE :: 0.6 + +// Loudness defaults used with FXLoudness: +FXLOUDNESS_DEFAULT_MOMENTARY_MS :: 400 +FXLOUDNESS_DEFAULT_SHORTTERM_MS :: 3000 + +// Echo initialization data/parameter bounds (inclusive), used with FXEcho: +FXECHO_MIN_WETDRYMIX :: 0.0 +FXECHO_MAX_WETDRYMIX :: 1.0 +FXECHO_DEFAULT_WETDRYMIX :: 0.5 + +FXECHO_MIN_FEEDBACK :: 0.0 +FXECHO_MAX_FEEDBACK :: 1.0 +FXECHO_DEFAULT_FEEDBACK :: 0.5 + +FXECHO_MIN_DELAY :: 1.0 +FXECHO_MAX_DELAY :: 2000.0 +FXECHO_DEFAULT_DELAY :: 500.0 + +//-----------------------------------------------------// + +// EQ parameters (4 bands), used with IXAPOParameters.SetParameters: +// The EQ supports only f32 audio foramts. +// The framerate must be within [22000, 48000] Hz. +FXEQ_PARAMETERS :: struct #packed { + FrequencyCenter0: f32, // center frequency in Hz, band 0 + Gain0: f32, // boost/cut + Bandwidth0: f32, // bandwidth, region of EQ is center frequency +/- bandwidth/2 + FrequencyCenter1: f32, // band 1 + Gain1: f32, + Bandwidth1: f32, + FrequencyCenter2: f32, // band 2 + Gain2: f32, + Bandwidth2: f32, + FrequencyCenter3: f32, // band 3 + Gain3: f32, + Bandwidth3: f32, +} + +// Mastering limiter parameters, used with IXAPOParameters.SetParameters: +// The mastering limiter supports only f32 audio formats. +FXMASTERINGLIMITER_PARAMETERS :: struct #packed { + Release: u32, // release time (tuning factor with no specific units) + Loudness: u32, // loudness target (threshold) +} + +// Reverb parameters, used with IXAPOParameters.SetParameters: +// The reverb supports only f32 audio formats with the following channel configurations: +// Input: Mono Output: Mono +// Input: Stereo Output: Stereo +FXREVERB_PARAMETERS :: struct #packed { + Diffusion: f32, // diffusion + RoomSize: f32, // room size +}; + + +// Echo initialization data, used with CreateFX: +// Use of this structure is optional, the default MaxDelay is FXECHO_DEFAULT_DELAY. +FXECHO_INITDATA :: struct #packed { + MaxDelay: f32, // maximum delay (all channels) in milliseconds, must be within [FXECHO_MIN_DELAY, FXECHO_MAX_DELAY] +} + +// Echo parameters, used with IXAPOParameters.SetParameters: +// The echo supports only f32 audio formats. +FXECHO_PARAMETERS :: struct #packed { + WetDryMix: f32, // ratio of wet (processed) signal to dry (original) signal + Feedback: f32, // amount of output fed back into input + Delay: f32, // delay (all channels) in milliseconds, must be within [FXECHO_MIN_DELAY, FXECHO_PARAMETERS.MaxDelay] +} + +//-------------------------------------------------------// + +@(default_calling_convention="cdecl") +foreign xa2 { + // creates instance of requested XAPO, use Release to free instance + // pInitData - [in] effect-specific initialization parameters, may be NULL if InitDataByteSize == 0 + // InitDataByteSize - [in] size of pInitData in bytes, may be 0 if pInitData is NULL + CreateFX :: proc(clsid: win.REFCLSID, pEffect: ^^IUnknown, pInitDat: rawptr = nil, InitDataByteSize: u32 = 0) -> HRESULT --- +} diff --git a/vendor/windows/XAudio2/xaudio2.odin b/vendor/windows/XAudio2/xaudio2.odin index 231b41a90..2cf5e4214 100644 --- a/vendor/windows/XAudio2/xaudio2.odin +++ b/vendor/windows/XAudio2/xaudio2.odin @@ -16,7 +16,7 @@ foreign import xa2 "system:xaudio2.lib" HRESULT :: win.HRESULT IUnknown :: win.IUnknown IUnknown_VTable :: win.IUnknown_VTable -IID :: win.IID +WAVEFORMATEX :: win.WAVEFORMATEX /************************************************************************** * @@ -82,10 +82,10 @@ QUANTUM_DENOMINATOR :: 100 // in 10ms chunks (= 1/100 seconds) QUANTUM_MS :: (1000.0 * QUANTUM_NUMERATOR / QUANTUM_DENOMINATOR) // XAudio2 error codes -INVALID_CALL :: HRESULT(-0x7769FFFF) // An API call or one of its arguments was illegal -XMA_DECODER_ERROR :: HRESULT(-0x7769FFFE) // The XMA hardware suffered an unrecoverable error -XAPO_CREATION_FAILED :: HRESULT(-0x7769FFFD) // XAudio2 failed to initialize an XAPO effect -DEVICE_INVALIDATED :: HRESULT(-0x7769FFFC) // An audio device became unusable (unplugged, etc) +INVALID_CALL :: HRESULT(-2003435519) // 0x88960001 An API call or one of its arguments was illegal +XMA_DECODER_ERROR :: HRESULT(-2003435518) // 0x88960002 The XMA hardware suffered an unrecoverable error +XAPO_CREATION_FAILED :: HRESULT(-2003435517) // 0x88960003 XAudio2 failed to initialize an XAPO effect +DEVICE_INVALIDATED :: HRESULT(-2003435516) // 0x88960004 An audio device became unusable (unplugged, etc) /************************************************************************** @@ -134,7 +134,7 @@ PROCESOR_FLAG :: enum u32 { USE_DEFAULT_PROCESSOR :: PROCESSOR_FLAGS{} // Returned by IXAudio2Voice.GetVoiceDetails -VOICE_DETAILS :: struct { +VOICE_DETAILS :: struct #packed { CreatingFlags: FLAGS, ActiveFlags: FLAGS, InputChannels: u32, @@ -142,26 +142,26 @@ VOICE_DETAILS :: struct { } // Used in VOICE_SENDS below -SEND_DESCRIPTOR :: struct { +SEND_DESCRIPTOR :: struct #packed { Flags: FLAGS, // Either 0 or SEND_USEFILTER. pOutputVoice: ^IXAudio2Voice, // This send's destination voice. } // Used in the voice creation functions and in IXAudio2Voice.SetOutputVoices -VOICE_SENDS :: struct { +VOICE_SENDS :: struct #packed { SendCount: u32, // Number of sends from this voice. pSends: [^]SEND_DESCRIPTOR, // Array of SendCount send descriptors. } // Used in EFFECT_CHAIN below -EFFECT_DESCRIPTOR :: struct { +EFFECT_DESCRIPTOR :: struct #packed { pEffect: ^IUnknown, // Pointer to the effect object's IUnknown interface. - InitialState: bool, // TRUE if the effect should begin in the enabled state. + InitialState: b32, // TRUE if the effect should begin in the enabled state. OutputChannels: u32, // How many output channels the effect should produce. } // Used in the voice creation functions and in IXAudio2Voice.SetEffectChain -EFFECT_CHAIN :: struct { +EFFECT_CHAIN :: struct #packed { EffectCount: u32, // Number of effects in this voice's effect chain. pEffectDescriptors: [^]EFFECT_DESCRIPTOR, // Array of effect descriptors. } @@ -177,14 +177,14 @@ FILTER_TYPE :: enum i32 { } // Used in IXAudio2Voice.Set/GetFilterParameters and Set/GetOutputFilterParameters -FILTER_PARAMETERS :: struct { +FILTER_PARAMETERS :: struct #packed { Type: FILTER_TYPE, // Filter type. Frequency: f32, // Filter coefficient. Must be >= 0 and <= MAX_FILTER_FREQUENCY. See CutoffFrequencyToRadians() for state-variable filter types and CutoffFrequencyToOnePoleCoefficient() for one-pole filter types. OneOverQ: f32, // Reciprocal of the filter's quality factor Q; must be > 0 and <= MAX_FILTER_ONEOVERQ. Has no effect for one-pole filters. } // Used in IXAudio2SourceVoice.SubmitSourceBuffer -BUFFER :: struct { +BUFFER :: struct #packed { Flags: FLAGS, // Either 0 or END_OF_STREAM. AudioBytes: u32, // Size of the audio data buffer in bytes. pAudioData: [^]byte, // Pointer to the audio data buffer. @@ -199,20 +199,20 @@ BUFFER :: struct { // Used in IXAudio2SourceVoice.SubmitSourceBuffer when submitting XWMA data. // NOTE: If an XWMA sound is submitted in more than one buffer, each buffer's pDecodedPacketCumulativeBytes[PacketCount-1] value must be subtracted from all the entries in the next buffer's pDecodedPacketCumulativeBytes array. // And whether a sound is submitted in more than one buffer or not, the final buffer of the sound should use the END_OF_STREAM flag, or else the client must call IXAudio2SourceVoice.Discontinuity after submitting it. -BUFFER_WMA :: struct { +BUFFER_WMA :: struct #packed { pDecodedPacketCumulativeBytes: [^]u32, // Decoded packet's cumulative size array. Each element is the number of bytes accumulated when the corresponding XWMA packet is decoded in order. The array must have PacketCount elements. PacketCount: u32, // Number of XWMA packets submitted. Must be >= 1 and divide evenly into BUFFER.AudioBytes. } // Returned by IXAudio2SourceVoice.GetState -VOICE_STATE :: struct { +VOICE_STATE :: struct #packed { pCurrentBufferContext: rawptr, // The pContext value provided in the BUFFER that is currently being processed, or NULL if there are no buffers in the queue. BuffersQueued: u32, // Number of buffers currently queued on the voice (including the one that is being processed). SamplesPlayed: u64, // Total number of samples produced by the voice since it began processing the current audio stream. If VOICE_NOSAMPLESPLAYED is specified in the call to IXAudio2SourceVoice.GetState, this member will not be calculated, saving CPU. } // Returned by IXAudio2.GetPerformanceData -PERFORMANCE_DATA :: struct { +PERFORMANCE_DATA :: struct #packed { // CPU usage information AudioCyclesSinceLastQuery: u64, // CPU cycles spent on audio processing since the last call to StartEngine or GetPerformanceData. TotalCyclesSinceLastQuery: u64, // Total CPU cycles elapsed since the last call (only counts the CPU XAudio2 is running on). @@ -240,13 +240,13 @@ PERFORMANCE_DATA :: struct { } // Used in IXAudio2.SetDebugConfiguration -DEBUG_CONFIGURATION :: struct { +DEBUG_CONFIGURATION :: struct #packed { TraceMask: DEBUG_CONFIG_FLAGS, // Bitmap of enabled debug message types. BreakMask: DEBUG_CONFIG_FLAGS, // Message types that will break into the debugger. - LogThreadID: bool, // Whether to log the thread ID with each message. - LogFileline: bool, // Whether to log the source file and line number. - LogFunctionName: bool, // Whether to log the function name. - LogTiming: bool, // Whether to log message timestamps. + LogThreadID: b32, // Whether to log the thread ID with each message. + LogFileline: b32, // Whether to log the source file and line number. + LogFunctionName: b32, // Whether to log the function name. + LogTiming: b32, // Whether to log message timestamps. } // Values for the TraceMask and BreakMask bitmaps. Only ERRORS and WARNINGS are valid in BreakMask. @@ -273,7 +273,7 @@ DEBUG_CONFIG_FLAG :: enum u32 { **************************************************************************/ IXAudio2_UUID_STRING :: "2B02E3CF-2E0B-4ec3-BE45-1B2A3FE7210D" -IXAudio2_UUID := &IID{0x2B02E3CF, 0x2E0B, 0x4ec3, {0xBE, 0x45, 0x1B, 0x2A, 0x3F, 0xE7, 0x21, 0x0D}} +IXAudio2_UUID := &win.IID{0x2B02E3CF, 0x2E0B, 0x4ec3, {0xBE, 0x45, 0x1B, 0x2A, 0x3F, 0xE7, 0x21, 0x0D}} IXAudio2 :: struct #raw_union { #subtype iunknown: IUnknown, using ixaudio2_vtable: ^IXAudio2_VTable, @@ -303,7 +303,7 @@ IXAudio2_VTable :: struct { // pCallback - Optional pointer to a client-provided callback interface. // pSendList - Optional list of voices this voice should send audio to. // pEffectChain - Optional list of effects to apply to the audio data. - CreateSourceVoice: proc "system" (this: ^IXAudio2, ppSourceVoice: ^^IXAudio2SourceVoice, pSourceFormat: ^win.WAVEFORMATEX, Flags: FLAGS = {}, MaxFrequencyRatio: f32 = DEFAULT_FREQ_RATIO, pCallback: ^IXAudio2VoiceCallback = nil, pSendList: [^]VOICE_SENDS = nil, pEffectChain: [^]EFFECT_CHAIN = nil) -> HRESULT, + CreateSourceVoice: proc "system" (this: ^IXAudio2, ppSourceVoice: ^^IXAudio2SourceVoice, pSourceFormat: ^WAVEFORMATEX, Flags: FLAGS = {}, MaxFrequencyRatio: f32 = DEFAULT_FREQ_RATIO, pCallback: ^IXAudio2VoiceCallback = nil, pSendList: [^]VOICE_SENDS = nil, pEffectChain: [^]EFFECT_CHAIN = nil) -> HRESULT, // NAME: IXAudio2.CreateSubmixVoice // DESCRIPTION: Creates and configures a submix voice. @@ -361,7 +361,7 @@ IXAudio2_VTable :: struct { // This interface extends IXAudio2 with additional functionality. // Use IXAudio2.QueryInterface to obtain a pointer to this interface. IXAudio2Extension_UUID_STRING :: "84ac29bb-d619-44d2-b197-e4acf7df3ed6" -IXAudio2Extension_UUID := &IID{0x84ac29bb, 0xd619, 0x44d2, {0xb1, 0x97, 0xe4, 0xac, 0xf7, 0xdf, 0x3e, 0xd6}} +IXAudio2Extension_UUID := &win.IID{0x84ac29bb, 0xd619, 0x44d2, {0xb1, 0x97, 0xe4, 0xac, 0xf7, 0xdf, 0x3e, 0xd6}} IXAudio2Extension :: struct #raw_union { #subtype iunknown: IUnknown, using ixaudio2extension_vtable: ^IXAudio2Extension_VTable, @@ -432,7 +432,7 @@ IXAudio2Voice_VTable :: struct { // ARGUMENTS: // EffectIndex - Index of an effect within this voice's effect chain. // pEnabled - Returns the enabled/disabled state of the given effect. - GetEffectState: proc "system" (this: ^IXAudio2Voice, EffectIndex: u32, pEnabled: ^bool), + GetEffectState: proc "system" (this: ^IXAudio2Voice, EffectIndex: u32, pEnabled: ^b32), // NAME: IXAudio2Voice.SetEffectParameters // DESCRIPTION: Sets effect-specific parameters. @@ -717,12 +717,32 @@ IXAudio2VoiceCallback_VTable :: struct { * **************************************************************************/ -// We're an xaudio2 client -@(default_calling_convention="system", link_prefix="XAudio2") -foreign xa2 { - Create :: proc(ppXAudio2: ^^IXAudio2, Flags: FLAGS = {}, XAudio2Processor: PROCESSOR_FLAGS = USE_DEFAULT_PROCESSOR) -> HRESULT --- -} +Create :: proc "stdcall" (ppXAudio2: ^^IXAudio2, Flags: FLAGS = {}, XAudio2Processor: PROCESSOR_FLAGS = {.Processor1}) -> HRESULT { + CreateWithVersionInfoFunc :: #type proc "c" (a0: ^^IXAudio2, a1: FLAGS, a2: PROCESSOR_FLAGS, a3: win.DWORD) -> HRESULT + CreateInfoFunc :: #type proc "c" (a0: ^^IXAudio2, a1: FLAGS, a2: PROCESSOR_FLAGS) -> HRESULT + dll_Instance: win.HMODULE + create_with_version_info: CreateWithVersionInfoFunc + create_info: CreateInfoFunc + + if dll_Instance == nil { + dll_Instance = win.LoadLibraryExW(win.L("xaudio2_9.dll"), nil, {.LOAD_LIBRARY_SEARCH_SYSTEM32}) + if dll_Instance == nil { + return HRESULT(win.GetLastError()) + } + create_with_version_info = cast(CreateWithVersionInfoFunc)win.GetProcAddress(dll_Instance, "XAudio2CreateWithVersionInfo") + if create_with_version_info == nil { + create_info = cast(CreateInfoFunc)win.GetProcAddress(dll_Instance, "XAudio2Create") + if create_info == nil { + return HRESULT(win.GetLastError()) + } + } + } + if create_with_version_info != nil { + return create_with_version_info(ppXAudio2, Flags, XAudio2Processor, 0x0A000010) + } + return create_info(ppXAudio2, Flags, XAudio2Processor) +} /************************************************************************** * diff --git a/vendor/windows/XAudio2/xaudio2fx.odin b/vendor/windows/XAudio2/xaudio2fx.odin index a875b5516..1f7c91f50 100644 --- a/vendor/windows/XAudio2/xaudio2fx.odin +++ b/vendor/windows/XAudio2/xaudio2fx.odin @@ -6,12 +6,6 @@ import "core:math" foreign import xa2 "system:xaudio2.lib" -CLSID_AudioVolumeMeter_UUID_STRING :: "4FC3B166-972A-40CF-BC37-7DB03DB2FBA3" -CLSID_AudioVolumeMeter_UUID := &IID{0x4FC3B166, 0x972A, 0x40CF, {0xBC, 0x37, 0x7D, 0xB0, 0x3D, 0xB2, 0xFB, 0xA3}} - -CLSID_AudioReverb_UUID_STRING :: "C2633B16-471B-4498-B8C5-4F0959E2EC09" -CLSID_AudioReverb_UUID := &IID{0xC2633B16, 0x471B, 0x4498, {0xB8, 0xC5, 0x4F, 0x09, 0x59, 0xE2, 0xEC, 0x09}} - /************************************************************************** * * Effect creation functions. @@ -21,7 +15,7 @@ CLSID_AudioReverb_UUID := &IID{0xC2633B16, 0x471B, 0x4498, {0xB8, 0xC5, 0x4F, 0x * **************************************************************************/ - @(default_calling_convention="system", link_prefix="XAudio2") +@(default_calling_convention="system") foreign xa2 { CreateAudioVolumeMeter :: proc(ppApo: ^^IUnknown) -> HRESULT --- CreateAudioReverb :: proc(ppApo: ^^IUnknown) -> HRESULT --- @@ -37,7 +31,7 @@ foreign xa2 { // VOLUMEMETER_LEVELS: Receives results from GetEffectParameters(). // The user is responsible for allocating pPeakLevels, pRMSLevels, and initializing ChannelCount accordingly. // The volume meter does not support SetEffectParameters(). -VOLUMEMETER_LEVELS :: struct { +VOLUMEMETER_LEVELS :: struct #packed { pPeakLevels: [^]f32, // Peak levels table: receives maximum absolute level for each channel over a processing pass, may be NULL if pRMSLevls != NULL, otherwise must have at least ChannelCount elements. pRMSLevels: [^]f32, // Root mean square levels table: receives RMS level for each channel over a processing pass, may be NULL if pPeakLevels != NULL, otherwise must have at least ChannelCount elements. ChannelCount: u32, // Number of channels being processed by the volume meter APO @@ -64,7 +58,7 @@ REVERB_MAX_FRAMERATE :: 48000 // REVERB_PARAMETERS: Native parameter set for the reverb effect -REVERB_PARAMETERS :: struct { +REVERB_PARAMETERS :: struct #packed { // ratio of wet (processed) signal to dry (original) signal WetDryMix: f32, // [0, 100] (percentage) // Delay times @@ -93,7 +87,7 @@ REVERB_PARAMETERS :: struct { Density: f32, // [0, 100] (percentage) RoomSize: f32, // [1, 100] in feet // component control - DisableLateField: bool, // TRUE to disable late field reflections + DisableLateField: b32, // TRUE to disable late field reflections } // Maximum, minimum and default values for the parameters above @@ -160,11 +154,12 @@ REVERB_DEFAULT_REVERB_GAIN :: 0.0 REVERB_DEFAULT_DECAY_TIME :: 1.0 REVERB_DEFAULT_DENSITY :: 100.0 REVERB_DEFAULT_ROOM_SIZE :: 100.0 -REVERB_DEFAULT_DISABLE_LATE_FIELD :: false + +REVERB_DEFAULT_DISABLE_LATE_FIELD: b32 : false // REVERB_I3DL2_PARAMETERS: Parameter set compliant with the I3DL2 standard -REVERB_I3DL2_PARAMETERS :: struct { +REVERB_I3DL2_PARAMETERS :: struct #packed { // ratio of wet (processed) signal to dry (original) signal WetDryMix: f32, // [0, 100] (percentage) @@ -222,7 +217,7 @@ I3DL2_PRESET_PLATE := REVERB_I3DL2_PARAMETERS{100.0, -1000, -200,0.0, // ReverbConvertI3DL2ToNative: Utility function to map from I3DL2 to native parameters -ReverbConvertI3DL2ToNative :: proc "contextless" (pI3DL2: ^REVERB_I3DL2_PARAMETERS, pNative: ^REVERB_PARAMETERS, sevenDotOneReverb: bool = true) { +ReverbConvertI3DL2ToNative :: proc "contextless" (pI3DL2: ^REVERB_I3DL2_PARAMETERS, pNative: ^REVERB_PARAMETERS, sevenDotOneReverb: b32 = true) { reflectionsDelay: f32 reverbDelay: f32 From ad4866653a05a2850d60616b6d7458d4718a2c83 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Wed, 7 May 2025 14:38:40 +0200 Subject: [PATCH 036/120] fix disposing builder when not created Fixes #5128 p->builder is created in lb_begin_procedure_body, but that isn't called if there is no body, and we were still calling dispose at that point. Moved it into lb_end_procedure_body to match. --- src/llvm_backend.cpp | 1 - src/llvm_backend.hpp | 1 - src/llvm_backend_proc.cpp | 3 +-- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 2f861573a..fd10cd5c1 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2185,7 +2185,6 @@ gb_internal void lb_generate_procedure(lbModule *m, lbProcedure *p) { p->is_done = true; m->curr_procedure = nullptr; } - lb_end_procedure(p); // Add Flags if (p->entity && p->entity->kind == Entity_Procedure && p->entity->Procedure.is_memcpy_like) { diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index de6841ed8..51931dac3 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -409,7 +409,6 @@ gb_internal LLVMAttributeRef lb_create_enum_attribute_with_type(LLVMContextRef c gb_internal void lb_add_proc_attribute_at_index(lbProcedure *p, isize index, char const *name, u64 value); gb_internal void lb_add_proc_attribute_at_index(lbProcedure *p, isize index, char const *name); gb_internal lbProcedure *lb_create_procedure(lbModule *module, Entity *entity, bool ignore_body=false); -gb_internal void lb_end_procedure(lbProcedure *p); gb_internal LLVMTypeRef lb_type(lbModule *m, Type *type); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 1f023037d..057d6562f 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -783,8 +783,7 @@ gb_internal void lb_end_procedure_body(lbProcedure *p) { p->curr_block = nullptr; p->state_flags = 0; -} -gb_internal void lb_end_procedure(lbProcedure *p) { + LLVMDisposeBuilder(p->builder); } From b9db1dd3e0b2b53f344e7572f88719586bd4ab83 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Wed, 30 Apr 2025 19:21:00 +1000 Subject: [PATCH 037/120] os2: Resolve temp allocator collisions --- core/os/os2/allocators.odin | 80 ++++++++++++++------------- core/os/os2/dir.odin | 14 ++--- core/os/os2/dir_linux.odin | 2 +- core/os/os2/dir_windows.odin | 10 ++-- core/os/os2/env_posix.odin | 14 ++--- core/os/os2/env_wasi.odin | 4 +- core/os/os2/env_windows.odin | 20 +++---- core/os/os2/errors.odin | 4 +- core/os/os2/file.odin | 8 +-- core/os/os2/file_linux.odin | 58 +++++++++---------- core/os/os2/file_posix.odin | 54 +++++++++--------- core/os/os2/file_posix_other.odin | 4 +- core/os/os2/file_windows.odin | 36 ++++++------ core/os/os2/internal_util.odin | 5 -- core/os/os2/path.odin | 8 +-- core/os/os2/path_linux.odin | 18 +++--- core/os/os2/path_netbsd.odin | 4 +- core/os/os2/path_openbsd.odin | 6 +- core/os/os2/path_posix.odin | 22 ++++---- core/os/os2/path_posixfs.odin | 4 +- core/os/os2/path_wasi.odin | 4 +- core/os/os2/path_windows.odin | 36 ++++++------ core/os/os2/process_linux.odin | 46 +++++++-------- core/os/os2/process_posix.odin | 18 +++--- core/os/os2/process_posix_darwin.odin | 6 +- core/os/os2/process_windows.odin | 48 ++++++++-------- core/os/os2/stat.odin | 8 +-- core/os/os2/stat_linux.odin | 8 +-- core/os/os2/stat_posix.odin | 16 +++--- core/os/os2/stat_windows.odin | 18 +++--- core/os/os2/temp_file.odin | 20 ++++--- core/os/os2/temp_file_linux.odin | 4 +- core/os/os2/temp_file_windows.odin | 4 +- core/os/os2/user.odin | 22 ++++---- 34 files changed, 319 insertions(+), 314 deletions(-) diff --git a/core/os/os2/allocators.odin b/core/os/os2/allocators.odin index 864532850..1a02d4514 100644 --- a/core/os/os2/allocators.odin +++ b/core/os/os2/allocators.odin @@ -8,43 +8,13 @@ file_allocator :: proc() -> runtime.Allocator { return heap_allocator() } -temp_allocator_proc :: runtime.arena_allocator_proc - @(private="file") MAX_TEMP_ARENA_COUNT :: 2 - +@(private="file") +MAX_TEMP_ARENA_COLLISIONS :: MAX_TEMP_ARENA_COUNT - 1 @(private="file", thread_local) global_default_temp_allocator_arenas: [MAX_TEMP_ARENA_COUNT]runtime.Arena -@(private="file", thread_local) -global_default_temp_allocator_index: uint - - -@(require_results) -temp_allocator :: proc() -> runtime.Allocator { - arena := &global_default_temp_allocator_arenas[global_default_temp_allocator_index] - if arena.backing_allocator.procedure == nil { - arena.backing_allocator = heap_allocator() - } - - return runtime.Allocator{ - procedure = temp_allocator_proc, - data = arena, - } -} - - - -@(require_results) -temp_allocator_temp_begin :: proc(loc := #caller_location) -> (temp: runtime.Arena_Temp) { - temp = runtime.arena_temp_begin(&global_default_temp_allocator_arenas[global_default_temp_allocator_index], loc) - return -} - -temp_allocator_temp_end :: proc(temp: runtime.Arena_Temp, loc := #caller_location) { - runtime.arena_temp_end(temp, loc) -} - @(fini, private) temp_allocator_fini :: proc() { for &arena in global_default_temp_allocator_arenas { @@ -55,18 +25,52 @@ temp_allocator_fini :: proc() { TEMP_ALLOCATOR_GUARD_END :: proc(temp: runtime.Arena_Temp, loc := #caller_location) { runtime.arena_temp_end(temp, loc) - if temp.arena != nil { - global_default_temp_allocator_index = (global_default_temp_allocator_index-1)%MAX_TEMP_ARENA_COUNT - } } @(deferred_out=TEMP_ALLOCATOR_GUARD_END) -TEMP_ALLOCATOR_GUARD :: #force_inline proc(loc := #caller_location) -> (runtime.Arena_Temp, runtime.Source_Code_Location) { - global_default_temp_allocator_index = (global_default_temp_allocator_index+1)%MAX_TEMP_ARENA_COUNT - tmp := temp_allocator_temp_begin(loc) +TEMP_ALLOCATOR_GUARD :: #force_inline proc(collisions: []runtime.Allocator, loc := #caller_location) -> (runtime.Arena_Temp, runtime.Source_Code_Location) { + assert(len(collisions) <= MAX_TEMP_ARENA_COLLISIONS) + good_arena: ^runtime.Arena + for i in 0.. Temp_Allocator { + return { tmp.arena, runtime.arena_allocator(tmp.arena) } +} + +temp_allocator_begin :: runtime.arena_temp_begin +temp_allocator_end :: runtime.arena_temp_end +@(deferred_out=_temp_allocator_end) +temp_allocator_scope :: proc(tmp: Temp_Allocator) -> (runtime.Arena_Temp) { + return temp_allocator_begin(tmp.arena) +} +@(private="file") +_temp_allocator_end :: proc(tmp: runtime.Arena_Temp) { + temp_allocator_end(tmp) +} + + @(init, private) init_thread_local_cleaner :: proc() { runtime.add_thread_local_cleaner(temp_allocator_fini) diff --git a/core/os/os2/dir.odin b/core/os/os2/dir.odin index 9e6eaab72..a20c1b346 100644 --- a/core/os/os2/dir.odin +++ b/core/os/os2/dir.odin @@ -18,12 +18,12 @@ read_directory :: proc(f: ^File, n: int, allocator: runtime.Allocator) -> (files size = 100 } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) it := read_directory_iterator_create(f) defer _read_directory_iterator_destroy(&it) - dfi := make([dynamic]File_Info, 0, size, temp_allocator()) + dfi := make([dynamic]File_Info, 0, size, temp_allocator) defer if err != nil { for fi in dfi { file_info_delete(fi, allocator) @@ -202,13 +202,13 @@ copy_directory :: proc(dst, src: string, dst_perm := 0o755) -> Error { return err } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - file_infos := read_all_directory_by_path(src, temp_allocator()) or_return + file_infos := read_all_directory_by_path(src, temp_allocator) or_return for fi in file_infos { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - dst_path := join_path({dst, fi.name}, temp_allocator()) or_return + dst_path := join_path({dst, fi.name}, temp_allocator) or_return src_path := fi.fullpath if fi.type == .Directory { @@ -218,4 +218,4 @@ copy_directory :: proc(dst, src: string, dst_perm := 0o755) -> Error { } } return nil -} \ No newline at end of file +} diff --git a/core/os/os2/dir_linux.odin b/core/os/os2/dir_linux.odin index a868a02c4..4676c23b5 100644 --- a/core/os/os2/dir_linux.odin +++ b/core/os/os2/dir_linux.odin @@ -78,7 +78,7 @@ _read_directory_iterator :: proc(it: ^Read_Directory_Iterator) -> (fi: File_Info it.impl.prev_fi = fi if err != nil { - path, _ := _get_full_path(entry_fd, temp_allocator()) + path, _ := _get_full_path(entry_fd, temp_allocator) read_directory_iterator_set_error(it, path, err) } diff --git a/core/os/os2/dir_windows.odin b/core/os/os2/dir_windows.odin index dc517a9e4..722f49717 100644 --- a/core/os/os2/dir_windows.odin +++ b/core/os/os2/dir_windows.odin @@ -14,7 +14,9 @@ find_data_to_file_info :: proc(base_path: string, d: ^win32.WIN32_FIND_DATAW, al if d.cFileName[0] == '.' && d.cFileName[1] == '.' && d.cFileName[2] == 0 { return } - path := concatenate({base_path, `\`, win32_wstring_to_utf8(raw_data(d.cFileName[:]), temp_allocator()) or_else ""}, allocator) or_return + + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + path := concatenate({base_path, `\`, win32_wstring_to_utf8(raw_data(d.cFileName[:]), temp_allocator) or_else ""}, allocator) or_return handle := win32.HANDLE(_open_internal(path, {.Read}, 0o666) or_else 0) defer win32.CloseHandle(handle) @@ -49,7 +51,7 @@ Read_Directory_Iterator_Impl :: struct { @(require_results) _read_directory_iterator :: proc(it: ^Read_Directory_Iterator) -> (fi: File_Info, index: int, ok: bool) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) for !it.impl.no_more_files { err: Error @@ -116,9 +118,9 @@ _read_directory_iterator_init :: proc(it: ^Read_Directory_Iterator, f: ^File) { wpath = impl.wname[:i] } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - wpath_search := make([]u16, len(wpath)+3, temp_allocator()) + wpath_search := make([]u16, len(wpath)+3, temp_allocator) copy(wpath_search, wpath) wpath_search[len(wpath)+0] = '\\' wpath_search[len(wpath)+1] = '*' diff --git a/core/os/os2/env_posix.odin b/core/os/os2/env_posix.odin index 35084893a..62ba6bbe4 100644 --- a/core/os/os2/env_posix.odin +++ b/core/os/os2/env_posix.odin @@ -12,9 +12,9 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string return } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - ckey := strings.clone_to_cstring(key, temp_allocator()) + ckey := strings.clone_to_cstring(key, temp_allocator) cval := posix.getenv(ckey) if cval == nil { return @@ -27,10 +27,10 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string } _set_env :: proc(key, value: string) -> (err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - ckey := strings.clone_to_cstring(key, temp_allocator()) or_return - cval := strings.clone_to_cstring(value, temp_allocator()) or_return + ckey := strings.clone_to_cstring(key, temp_allocator) or_return + cval := strings.clone_to_cstring(value, temp_allocator) or_return if posix.setenv(ckey, cval, true) != nil { err = _get_platform_error_from_errno() @@ -39,9 +39,9 @@ _set_env :: proc(key, value: string) -> (err: Error) { } _unset_env :: proc(key: string) -> (ok: bool) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - ckey := strings.clone_to_cstring(key, temp_allocator()) + ckey := strings.clone_to_cstring(key, temp_allocator) ok = posix.unsetenv(ckey) == .OK return diff --git a/core/os/os2/env_wasi.odin b/core/os/os2/env_wasi.odin index 305192c92..e9896370a 100644 --- a/core/os/os2/env_wasi.odin +++ b/core/os/os2/env_wasi.odin @@ -39,9 +39,9 @@ build_env :: proc() -> (err: Error) { g_env_buf = make([]byte, size_of_envs, file_allocator()) or_return defer if err != nil { delete(g_env_buf, file_allocator()) } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - envs := make([]cstring, num_envs, temp_allocator()) or_return + envs := make([]cstring, num_envs, temp_allocator) or_return _err = wasi.environ_get(raw_data(envs), raw_data(g_env_buf)) if _err != nil { diff --git a/core/os/os2/env_windows.odin b/core/os/os2/env_windows.odin index 3ac26a261..cd2c5e758 100644 --- a/core/os/os2/env_windows.odin +++ b/core/os/os2/env_windows.odin @@ -8,8 +8,8 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string if key == "" { return } - TEMP_ALLOCATOR_GUARD() - wkey, _ := win32_utf8_to_wstring(key, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + wkey, _ := win32_utf8_to_wstring(key, temp_allocator) n := win32.GetEnvironmentVariableW(wkey, nil, 0) if n == 0 { @@ -20,7 +20,7 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string return "", true } - b := make([]u16, n+1, temp_allocator()) + b := make([]u16, n+1, temp_allocator) n = win32.GetEnvironmentVariableW(wkey, raw_data(b), u32(len(b))) if n == 0 { @@ -37,9 +37,9 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string } _set_env :: proc(key, value: string) -> Error { - TEMP_ALLOCATOR_GUARD() - k := win32_utf8_to_wstring(key, temp_allocator()) or_return - v := win32_utf8_to_wstring(value, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + k := win32_utf8_to_wstring(key, temp_allocator) or_return + v := win32_utf8_to_wstring(value, temp_allocator) or_return if !win32.SetEnvironmentVariableW(k, v) { return _get_platform_error() @@ -48,14 +48,14 @@ _set_env :: proc(key, value: string) -> Error { } _unset_env :: proc(key: string) -> bool { - TEMP_ALLOCATOR_GUARD() - k, _ := win32_utf8_to_wstring(key, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + k, _ := win32_utf8_to_wstring(key, temp_allocator) return bool(win32.SetEnvironmentVariableW(k, nil)) } _clear_env :: proc() { - TEMP_ALLOCATOR_GUARD() - envs, _ := environ(temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + envs, _ := environ(temp_allocator) for env in envs { for j in 1.. bool { @(require_results) is_file :: proc(path: string) -> bool { - TEMP_ALLOCATOR_GUARD() - fi, err := stat(path, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + fi, err := stat(path, temp_allocator) if err != nil { return false } @@ -303,8 +303,8 @@ is_dir :: is_directory @(require_results) is_directory :: proc(path: string) -> bool { - TEMP_ALLOCATOR_GUARD() - fi, err := stat(path, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + fi, err := stat(path, temp_allocator) if err != nil { return false } diff --git a/core/os/os2/file_linux.odin b/core/os/os2/file_linux.odin index 811ee7055..bb5edd345 100644 --- a/core/os/os2/file_linux.odin +++ b/core/os/os2/file_linux.odin @@ -66,8 +66,8 @@ _standard_stream_init :: proc() { } _open :: proc(name: string, flags: File_Flags, perm: int) -> (f: ^File, err: Error) { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr := clone_to_cstring(name, temp_allocator) or_return // Just default to using O_NOCTTY because needing to open a controlling // terminal would be incredibly rare. This has no effect on files while @@ -299,8 +299,8 @@ _truncate :: proc(f: ^File, size: i64) -> Error { } _remove :: proc(name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr := clone_to_cstring(name, temp_allocator) or_return if fd, errno := linux.open(name_cstr, _OPENDIR_FLAGS + {.NOFOLLOW}); errno == .NONE { linux.close(fd) @@ -311,25 +311,25 @@ _remove :: proc(name: string) -> Error { } _rename :: proc(old_name, new_name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - old_name_cstr := temp_cstring(old_name) or_return - new_name_cstr := temp_cstring(new_name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + old_name_cstr := clone_to_cstring(old_name, temp_allocator) or_return + new_name_cstr := clone_to_cstring(new_name, temp_allocator) or_return return _get_platform_error(linux.rename(old_name_cstr, new_name_cstr)) } _link :: proc(old_name, new_name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - old_name_cstr := temp_cstring(old_name) or_return - new_name_cstr := temp_cstring(new_name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + old_name_cstr := clone_to_cstring(old_name, temp_allocator) or_return + new_name_cstr := clone_to_cstring(new_name, temp_allocator) or_return return _get_platform_error(linux.link(old_name_cstr, new_name_cstr)) } _symlink :: proc(old_name, new_name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - old_name_cstr := temp_cstring(old_name) or_return - new_name_cstr := temp_cstring(new_name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + old_name_cstr := clone_to_cstring(old_name, temp_allocator) or_return + new_name_cstr := clone_to_cstring(new_name, temp_allocator) or_return return _get_platform_error(linux.symlink(old_name_cstr, new_name_cstr)) } @@ -352,14 +352,14 @@ _read_link_cstr :: proc(name_cstr: cstring, allocator: runtime.Allocator) -> (st } _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, e: Error) { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + name_cstr := clone_to_cstring(name, temp_allocator) or_return return _read_link_cstr(name_cstr, allocator) } _chdir :: proc(name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.chdir(name_cstr)) } @@ -369,8 +369,8 @@ _fchdir :: proc(f: ^File) -> Error { } _chmod :: proc(name: string, mode: int) -> Error { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.chmod(name_cstr, transmute(linux.Mode)(u32(mode)))) } @@ -381,15 +381,15 @@ _fchmod :: proc(f: ^File, mode: int) -> Error { // NOTE: will throw error without super user priviledges _chown :: proc(name: string, uid, gid: int) -> Error { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.chown(name_cstr, linux.Uid(uid), linux.Gid(gid))) } // NOTE: will throw error without super user priviledges _lchown :: proc(name: string, uid, gid: int) -> Error { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.lchown(name_cstr, linux.Uid(uid), linux.Gid(gid))) } @@ -400,8 +400,8 @@ _fchown :: proc(f: ^File, uid, gid: int) -> Error { } _chtimes :: proc(name: string, atime, mtime: time.Time) -> Error { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr := clone_to_cstring(name, temp_allocator) or_return times := [2]linux.Time_Spec { { uint(atime._nsec) / uint(time.Second), @@ -431,8 +431,8 @@ _fchtimes :: proc(f: ^File, atime, mtime: time.Time) -> Error { } _exists :: proc(name: string) -> bool { - TEMP_ALLOCATOR_GUARD() - name_cstr, _ := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + name_cstr, _ := clone_to_cstring(name, temp_allocator) return linux.access(name_cstr, linux.F_OK) == .NONE } @@ -440,8 +440,8 @@ _exists :: proc(name: string) -> bool { _read_entire_pseudo_file :: proc { _read_entire_pseudo_file_string, _read_entire_pseudo_file_cstring } _read_entire_pseudo_file_string :: proc(name: string, allocator: runtime.Allocator) -> (b: []u8, e: Error) { - TEMP_ALLOCATOR_GUARD() - name_cstr := clone_to_cstring(name, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + name_cstr := clone_to_cstring(name, temp_allocator) or_return return _read_entire_pseudo_file_cstring(name_cstr, allocator) } diff --git a/core/os/os2/file_posix.odin b/core/os/os2/file_posix.odin index 43d5866b1..dc46b380f 100644 --- a/core/os/os2/file_posix.odin +++ b/core/os/os2/file_posix.odin @@ -69,8 +69,8 @@ _open :: proc(name: string, flags: File_Flags, perm: int) -> (f: ^File, err: Err if .Trunc in flags { sys_flags += {.TRUNC} } if .Inheritable in flags { sys_flags -= {.CLOEXEC} } - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) fd := posix.open(cname, sys_flags, transmute(posix.mode_t)posix._mode_t(perm)) if fd < 0 { @@ -184,8 +184,8 @@ _truncate :: proc(f: ^File, size: i64) -> Error { } _remove :: proc(name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) if posix.remove(cname) != 0 { return _get_platform_error() } @@ -193,9 +193,9 @@ _remove :: proc(name: string) -> Error { } _rename :: proc(old_path, new_path: string) -> Error { - TEMP_ALLOCATOR_GUARD() - cold := temp_cstring(old_path) - cnew := temp_cstring(new_path) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cold := clone_to_cstring(old_path, temp_allocator) + cnew := clone_to_cstring(new_path, temp_allocator) if posix.rename(cold, cnew) != 0 { return _get_platform_error() } @@ -203,9 +203,9 @@ _rename :: proc(old_path, new_path: string) -> Error { } _link :: proc(old_name, new_name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - cold := temp_cstring(old_name) - cnew := temp_cstring(new_name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cold := clone_to_cstring(old_name, temp_allocator) + cnew := clone_to_cstring(new_name, temp_allocator) if posix.link(cold, cnew) != .OK { return _get_platform_error() } @@ -213,9 +213,9 @@ _link :: proc(old_name, new_name: string) -> Error { } _symlink :: proc(old_name, new_name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - cold := temp_cstring(old_name) - cnew := temp_cstring(new_name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cold := clone_to_cstring(old_name, temp_allocator) + cnew := clone_to_cstring(new_name, temp_allocator) if posix.symlink(cold, cnew) != .OK { return _get_platform_error() } @@ -223,8 +223,8 @@ _symlink :: proc(old_name, new_name: string) -> Error { } _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, err: Error) { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + cname := clone_to_cstring(name, temp_allocator) buf: [dynamic]byte buf.allocator = allocator @@ -269,8 +269,8 @@ _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, er } _chdir :: proc(name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) if posix.chdir(cname) != .OK { return _get_platform_error() } @@ -292,8 +292,8 @@ _fchmod :: proc(f: ^File, mode: int) -> Error { } _chmod :: proc(name: string, mode: int) -> Error { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) if posix.chmod(cname, transmute(posix.mode_t)posix._mode_t(mode)) != .OK { return _get_platform_error() } @@ -308,8 +308,8 @@ _fchown :: proc(f: ^File, uid, gid: int) -> Error { } _chown :: proc(name: string, uid, gid: int) -> Error { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) if posix.chown(cname, posix.uid_t(uid), posix.gid_t(gid)) != .OK { return _get_platform_error() } @@ -317,8 +317,8 @@ _chown :: proc(name: string, uid, gid: int) -> Error { } _lchown :: proc(name: string, uid, gid: int) -> Error { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) if posix.lchown(cname, posix.uid_t(uid), posix.gid_t(gid)) != .OK { return _get_platform_error() } @@ -337,8 +337,8 @@ _chtimes :: proc(name: string, atime, mtime: time.Time) -> Error { }, } - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) if posix.utimes(cname, ×) != .OK { return _get_platform_error() @@ -365,8 +365,8 @@ _fchtimes :: proc(f: ^File, atime, mtime: time.Time) -> Error { } _exists :: proc(path: string) -> bool { - TEMP_ALLOCATOR_GUARD() - cpath := temp_cstring(path) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cpath := clone_to_cstring(path, temp_allocator) return posix.access(cpath) == .OK } diff --git a/core/os/os2/file_posix_other.odin b/core/os/os2/file_posix_other.odin index 74b6374ec..a7f095cb3 100644 --- a/core/os/os2/file_posix_other.odin +++ b/core/os/os2/file_posix_other.odin @@ -7,8 +7,8 @@ import "base:runtime" import "core:sys/posix" _posix_absolute_path :: proc(fd: posix.FD, name: string, allocator: runtime.Allocator) -> (path: cstring, err: Error) { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + cname := clone_to_cstring(name, temp_allocator) buf: [posix.PATH_MAX]byte path = posix.realpath(cname, raw_data(buf[:])) diff --git a/core/os/os2/file_windows.odin b/core/os/os2/file_windows.odin index 94e51a14c..8f45d4ab9 100644 --- a/core/os/os2/file_windows.odin +++ b/core/os/os2/file_windows.odin @@ -109,9 +109,9 @@ _open_internal :: proc(name: string, flags: File_Flags, perm: int) -> (handle: u err = .Not_Exist return } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - path := _fix_long_path(name, temp_allocator()) or_return + path := _fix_long_path(name, temp_allocator) or_return access: u32 switch flags & {.Read, .Write} { case {.Read}: access = win32.FILE_GENERIC_READ @@ -580,8 +580,8 @@ _truncate :: proc(f: ^File, size: i64) -> Error { } _remove :: proc(name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - p := _fix_long_path(name, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + p := _fix_long_path(name, temp_allocator) or_return err, err1: Error if !win32.DeleteFileW(p) { err = _get_platform_error() @@ -618,9 +618,9 @@ _remove :: proc(name: string) -> Error { } _rename :: proc(old_path, new_path: string) -> Error { - TEMP_ALLOCATOR_GUARD() - from := _fix_long_path(old_path, temp_allocator()) or_return - to := _fix_long_path(new_path, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + from := _fix_long_path(old_path, temp_allocator) or_return + to := _fix_long_path(new_path, temp_allocator) or_return if win32.MoveFileExW(from, to, win32.MOVEFILE_REPLACE_EXISTING) { return nil } @@ -629,9 +629,9 @@ _rename :: proc(old_path, new_path: string) -> Error { } _link :: proc(old_name, new_name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - o := _fix_long_path(old_name, temp_allocator()) or_return - n := _fix_long_path(new_name, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + o := _fix_long_path(old_name, temp_allocator) or_return + n := _fix_long_path(new_name, temp_allocator) or_return if win32.CreateHardLinkW(n, o, nil) { return nil } @@ -692,9 +692,9 @@ _normalize_link_path :: proc(p: []u16, allocator: runtime.Allocator) -> (str: st return "", _get_platform_error() } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - buf := make([]u16, n+1, temp_allocator()) + buf := make([]u16, n+1, temp_allocator) n = win32.GetFinalPathNameByHandleW(handle, raw_data(buf), u32(len(buf)), win32.VOLUME_NAME_DOS) if n == 0 { return "", _get_platform_error() @@ -718,9 +718,9 @@ _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, er @thread_local rdb_buf: [MAXIMUM_REPARSE_DATA_BUFFER_SIZE]byte - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - p := _fix_long_path(name, temp_allocator()) or_return + p := _fix_long_path(name, temp_allocator) or_return handle := _open_sym_link(p) or_return defer win32.CloseHandle(handle) @@ -785,8 +785,8 @@ _fchown :: proc(f: ^File, uid, gid: int) -> Error { } _chdir :: proc(name: string) -> Error { - TEMP_ALLOCATOR_GUARD() - p := _fix_long_path(name, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + p := _fix_long_path(name, temp_allocator) or_return if !win32.SetCurrentDirectoryW(p) { return _get_platform_error() } @@ -834,8 +834,8 @@ _fchtimes :: proc(f: ^File, atime, mtime: time.Time) -> Error { } _exists :: proc(path: string) -> bool { - TEMP_ALLOCATOR_GUARD() - wpath, _ := _fix_long_path(path, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + wpath, _ := _fix_long_path(path, temp_allocator) attribs := win32.GetFileAttributesW(wpath) return attribs != win32.INVALID_FILE_ATTRIBUTES } diff --git a/core/os/os2/internal_util.odin b/core/os/os2/internal_util.odin index ce253d17b..9616af8b0 100644 --- a/core/os/os2/internal_util.odin +++ b/core/os/os2/internal_util.odin @@ -43,11 +43,6 @@ clone_to_cstring :: proc(s: string, allocator: runtime.Allocator) -> (res: cstri return cstring(&buf[0]), nil } -@(require_results) -temp_cstring :: proc(s: string) -> (cstring, runtime.Allocator_Error) #optional_allocator_error { - return clone_to_cstring(s, temp_allocator()) -} - @(require_results) string_from_null_terminated_bytes :: proc(b: []byte) -> (res: string) { s := string(b) diff --git a/core/os/os2/path.odin b/core/os/os2/path.odin index 47ac0236d..2caf13092 100644 --- a/core/os/os2/path.odin +++ b/core/os/os2/path.odin @@ -119,11 +119,11 @@ clean_path :: proc(path: string, allocator: runtime.Allocator) -> (cleaned: stri return strings.clone(".", allocator) } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) // The extra byte is to simplify appending path elements by letting the // loop to end each with a separator. We'll trim the last one when we're done. - buffer := make([]u8, len(path) + 1, temp_allocator()) or_return + buffer := make([]u8, len(path) + 1, temp_allocator) or_return // This is the only point where Windows and POSIX differ, as Windows has // alphabet-based volumes for root paths. @@ -326,8 +326,8 @@ For example, `join_path({"/home", "foo", "bar.txt"})` will result in `"/home/foo join_path :: proc(elems: []string, allocator: runtime.Allocator) -> (joined: string, err: Error) { for e, i in elems { if e != "" { - TEMP_ALLOCATOR_GUARD() - p := strings.join(elems[i:], Path_Separator_String, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + p := strings.join(elems[i:], Path_Separator_String, temp_allocator) or_return return clean_path(p, allocator) } } diff --git a/core/os/os2/path_linux.odin b/core/os/os2/path_linux.odin index 410b4cb28..d0569c165 100644 --- a/core/os/os2/path_linux.odin +++ b/core/os/os2/path_linux.odin @@ -18,8 +18,8 @@ _is_path_separator :: proc(c: byte) -> bool { } _mkdir :: proc(path: string, perm: int) -> Error { - TEMP_ALLOCATOR_GUARD() - path_cstr := temp_cstring(path) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + path_cstr := clone_to_cstring(path, temp_allocator) or_return return _get_platform_error(linux.mkdir(path_cstr, transmute(linux.Mode)u32(perm))) } @@ -52,9 +52,9 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { } return _get_platform_error(errno) } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) // need something we can edit, and use to generate cstrings - path_bytes := make([]u8, len(path) + 1, temp_allocator()) + path_bytes := make([]u8, len(path) + 1, temp_allocator) // zero terminate the byte slice to make it a valid cstring copy(path_bytes, path) @@ -129,8 +129,8 @@ _remove_all :: proc(path: string) -> Error { return nil } - TEMP_ALLOCATOR_GUARD() - path_cstr := temp_cstring(path) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + path_cstr := clone_to_cstring(path, temp_allocator) or_return fd, errno := linux.open(path_cstr, _OPENDIR_FLAGS) #partial switch errno { @@ -168,14 +168,14 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (string, Error) } _set_working_directory :: proc(dir: string) -> Error { - dir_cstr := temp_cstring(dir) or_return + dir_cstr := clone_to_cstring(dir, temp_allocator) or_return return _get_platform_error(linux.chdir(dir_cstr)) } _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - buf := make([dynamic]byte, 1024, temp_allocator()) or_return + buf := make([dynamic]byte, 1024, temp_allocator) or_return for { n, errno := linux.readlink("/proc/self/exe", buf[:]) if errno != .NONE { diff --git a/core/os/os2/path_netbsd.odin b/core/os/os2/path_netbsd.odin index f56a91fd6..41abfb3f1 100644 --- a/core/os/os2/path_netbsd.odin +++ b/core/os/os2/path_netbsd.odin @@ -5,9 +5,9 @@ import "base:runtime" import "core:sys/posix" _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - buf := make([dynamic]byte, 1024, temp_allocator()) or_return + buf := make([dynamic]byte, 1024, temp_allocator) or_return for { n := posix.readlink("/proc/curproc/exe", raw_data(buf), len(buf)) if n < 0 { diff --git a/core/os/os2/path_openbsd.odin b/core/os/os2/path_openbsd.odin index 37b5de927..e27a31dda 100644 --- a/core/os/os2/path_openbsd.odin +++ b/core/os/os2/path_openbsd.odin @@ -35,11 +35,11 @@ _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err return real(arg, allocator) } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - buf := strings.builder_make(temp_allocator()) + buf := strings.builder_make(temp_allocator) - paths := get_env("PATH", temp_allocator()) + paths := get_env("PATH", temp_allocator) for dir in strings.split_iterator(&paths, ":") { strings.builder_reset(&buf) strings.write_string(&buf, dir) diff --git a/core/os/os2/path_posix.odin b/core/os/os2/path_posix.odin index 39bd0a188..01a149854 100644 --- a/core/os/os2/path_posix.odin +++ b/core/os/os2/path_posix.odin @@ -15,8 +15,8 @@ _is_path_separator :: proc(c: byte) -> bool { } _mkdir :: proc(name: string, perm: int) -> Error { - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cname := clone_to_cstring(name, temp_allocator) if posix.mkdir(cname, transmute(posix.mode_t)posix._mode_t(perm)) != .OK { return _get_platform_error() } @@ -28,13 +28,13 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { return .Invalid_Path } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) if exists(path) { return .Exist } - clean_path := clean_path(path, temp_allocator()) or_return + clean_path := clean_path(path, temp_allocator) or_return return internal_mkdir_all(clean_path, perm) internal_mkdir_all :: proc(path: string, perm: int) -> Error { @@ -53,8 +53,8 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { } _remove_all :: proc(path: string) -> Error { - TEMP_ALLOCATOR_GUARD() - cpath := temp_cstring(path) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cpath := clone_to_cstring(path, temp_allocator) dir := posix.opendir(cpath) if dir == nil { @@ -78,7 +78,7 @@ _remove_all :: proc(path: string) -> Error { continue } - fullpath, _ := concatenate({path, "/", string(cname), "\x00"}, temp_allocator()) + fullpath, _ := concatenate({path, "/", string(cname), "\x00"}, temp_allocator) if entry.d_type == .DIR { _remove_all(fullpath[:len(fullpath)-1]) or_return } else { @@ -95,10 +95,10 @@ _remove_all :: proc(path: string) -> Error { } _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) buf: [dynamic]byte - buf.allocator = temp_allocator() + buf.allocator = temp_allocator size := uint(posix.PATH_MAX) cwd: cstring @@ -116,8 +116,8 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, er } _set_working_directory :: proc(dir: string) -> (err: Error) { - TEMP_ALLOCATOR_GUARD() - cdir := temp_cstring(dir) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + cdir := clone_to_cstring(dir, temp_allocator) if posix.chdir(cdir) != .OK { err = _get_platform_error() } diff --git a/core/os/os2/path_posixfs.odin b/core/os/os2/path_posixfs.odin index 8f9d43d63..24575bbd8 100644 --- a/core/os/os2/path_posixfs.odin +++ b/core/os/os2/path_posixfs.odin @@ -31,8 +31,8 @@ _get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absol if rel == "" { rel = "." } - TEMP_ALLOCATOR_GUARD() - rel_cstr := strings.clone_to_cstring(rel, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + rel_cstr := strings.clone_to_cstring(rel, temp_allocator) path_ptr := posix.realpath(rel_cstr, nil) if path_ptr == nil { return "", Platform_Error(posix.errno()) diff --git a/core/os/os2/path_wasi.odin b/core/os/os2/path_wasi.odin index 7aee8fcc0..3e00463b1 100644 --- a/core/os/os2/path_wasi.odin +++ b/core/os/os2/path_wasi.odin @@ -28,13 +28,13 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { return .Invalid_Path } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) if exists(path) { return .Exist } - clean_path := clean_path(path, temp_allocator()) + clean_path := clean_path(path, temp_allocator) return internal_mkdir_all(clean_path) internal_mkdir_all :: proc(path: string) -> Error { diff --git a/core/os/os2/path_windows.odin b/core/os/os2/path_windows.odin index dd9b7748c..07e202222 100644 --- a/core/os/os2/path_windows.odin +++ b/core/os/os2/path_windows.odin @@ -14,8 +14,8 @@ _is_path_separator :: proc(c: byte) -> bool { } _mkdir :: proc(name: string, perm: int) -> Error { - TEMP_ALLOCATOR_GUARD() - if !win32.CreateDirectoryW(_fix_long_path(name, temp_allocator()) or_return, nil) { + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + if !win32.CreateDirectoryW(_fix_long_path(name, temp_allocator) or_return, nil) { return _get_platform_error() } return nil @@ -33,9 +33,9 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { return p, false, nil } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - dir_stat, err := stat(path, temp_allocator()) + dir_stat, err := stat(path, temp_allocator) if err == nil { if dir_stat.type == .Directory { return nil @@ -63,7 +63,7 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { err = mkdir(path, perm) if err != nil { - new_dir_stat, err1 := lstat(path, temp_allocator()) + new_dir_stat, err1 := lstat(path, temp_allocator) if err1 == nil && new_dir_stat.type == .Directory { return nil } @@ -82,8 +82,8 @@ _remove_all :: proc(path: string) -> Error { return nil } - TEMP_ALLOCATOR_GUARD() - dir := win32_utf8_to_wstring(path, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + dir := win32_utf8_to_wstring(path, temp_allocator) or_return empty: [1]u16 @@ -109,10 +109,10 @@ _remove_all :: proc(path: string) -> Error { _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { win32.AcquireSRWLockExclusive(&cwd_lock) - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) sz_utf16 := win32.GetCurrentDirectoryW(0, nil) - dir_buf_wstr := make([]u16, sz_utf16, temp_allocator()) or_return + dir_buf_wstr := make([]u16, sz_utf16, temp_allocator) or_return sz_utf16 = win32.GetCurrentDirectoryW(win32.DWORD(len(dir_buf_wstr)), raw_data(dir_buf_wstr)) assert(int(sz_utf16)+1 == len(dir_buf_wstr)) // the second time, it _excludes_ the NUL. @@ -123,8 +123,8 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, er } _set_working_directory :: proc(dir: string) -> (err: Error) { - TEMP_ALLOCATOR_GUARD() - wstr := win32_utf8_to_wstring(dir, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + wstr := win32_utf8_to_wstring(dir, temp_allocator) or_return win32.AcquireSRWLockExclusive(&cwd_lock) @@ -138,9 +138,9 @@ _set_working_directory :: proc(dir: string) -> (err: Error) { } _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - buf := make([dynamic]u16, 512, temp_allocator()) or_return + buf := make([dynamic]u16, 512, temp_allocator) or_return for { ret := win32.GetModuleFileNameW(nil, raw_data(buf), win32.DWORD(len(buf))) if ret == 0 { @@ -222,10 +222,10 @@ _fix_long_path_internal :: proc(path: string) -> string { return path } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) PREFIX :: `\\?` - path_buf := make([]byte, len(PREFIX)+len(path)+1, temp_allocator()) + path_buf := make([]byte, len(PREFIX)+len(path)+1, temp_allocator) copy(path_buf, PREFIX) n := len(path) r, w := 0, len(PREFIX) @@ -297,14 +297,14 @@ _get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absol if rel == "" { rel = "." } - TEMP_ALLOCATOR_GUARD() - rel_utf16 := win32.utf8_to_utf16(rel, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + rel_utf16 := win32.utf8_to_utf16(rel, temp_allocator) n := win32.GetFullPathNameW(raw_data(rel_utf16), 0, nil, nil) if n == 0 { return "", Platform_Error(win32.GetLastError()) } - buf := make([]u16, n, temp_allocator()) or_return + buf := make([]u16, n, temp_allocator) or_return n = win32.GetFullPathNameW(raw_data(rel_utf16), u32(n), raw_data(buf), nil) if n == 0 { return "", Platform_Error(win32.GetLastError()) diff --git a/core/os/os2/process_linux.odin b/core/os/os2/process_linux.odin index afb398c8d..6d239ef25 100644 --- a/core/os/os2/process_linux.odin +++ b/core/os/os2/process_linux.odin @@ -50,7 +50,7 @@ _get_ppid :: proc() -> int { @(private="package") _process_list :: proc(allocator: runtime.Allocator) -> (list: []int, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) dir_fd, errno := linux.open("/proc/", _OPENDIR_FLAGS) #partial switch errno { @@ -68,9 +68,9 @@ _process_list :: proc(allocator: runtime.Allocator) -> (list: []int, err: Error) } defer linux.close(dir_fd) - dynamic_list := make([dynamic]int, temp_allocator()) or_return + dynamic_list := make([dynamic]int, temp_allocator) or_return - buf := make([dynamic]u8, 128, 128, temp_allocator()) or_return + buf := make([dynamic]u8, 128, 128, temp_allocator) or_return loop: for { buflen: int buflen, errno = linux.getdents(dir_fd, buf[:]) @@ -100,7 +100,7 @@ _process_list :: proc(allocator: runtime.Allocator) -> (list: []int, err: Error) @(private="package") _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator: runtime.Allocator) -> (info: Process_Info, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) info.pid = pid @@ -126,7 +126,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator passwd_bytes: []u8 passwd_err: Error - passwd_bytes, passwd_err = _read_entire_pseudo_file_cstring("/etc/passwd", temp_allocator()) + passwd_bytes, passwd_err = _read_entire_pseudo_file_cstring("/etc/passwd", temp_allocator) if passwd_err != nil { err = passwd_err break username_if @@ -168,7 +168,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator strings.write_int(&path_builder, pid) strings.write_string(&path_builder, "/cmdline") - cmdline_bytes, cmdline_err := _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator()) + cmdline_bytes, cmdline_err := _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator) if cmdline_err != nil || len(cmdline_bytes) == 0 { err = cmdline_err break cmdline_if @@ -189,7 +189,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator strings.write_int(&path_builder, pid) strings.write_string(&path_builder, "/cwd") - cwd, cwd_err = _read_link_cstr(strings.to_cstring(&path_builder) or_return, temp_allocator()) // allowed to fail + cwd, cwd_err = _read_link_cstr(strings.to_cstring(&path_builder) or_return, temp_allocator) // allowed to fail if cwd_err == nil && .Working_Dir in selection { info.working_dir = strings.clone(cwd, allocator) or_return info.fields += {.Working_Dir} @@ -245,7 +245,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator strings.write_int(&path_builder, pid) strings.write_string(&path_builder, "/stat") - proc_stat_bytes, stat_err := _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator()) + proc_stat_bytes, stat_err := _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator) if stat_err != nil { err = stat_err break stat_if @@ -284,7 +284,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator Nice, //... etc, } - stat_fields := strings.split(stats, " ", temp_allocator()) or_return + stat_fields := strings.split(stats, " ", temp_allocator) or_return if len(stat_fields) <= int(Fields.Nice) { break stat_if @@ -341,7 +341,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator strings.write_int(&path_builder, pid) strings.write_string(&path_builder, "/environ") - if env_bytes, env_err := _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator()); env_err == nil { + if env_bytes, env_err := _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator); env_err == nil { env := string(env_bytes) env_list := make([dynamic]string, allocator) or_return @@ -392,7 +392,7 @@ _process_open :: proc(pid: int, _: Process_Open_Flags) -> (process: Process, err @(private="package") _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) if len(desc.command) == 0 { return process, .Invalid_Command @@ -401,7 +401,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { dir_fd := linux.AT_FDCWD errno: linux.Errno if desc.working_dir != "" { - dir_cstr := temp_cstring(desc.working_dir) or_return + dir_cstr := clone_to_cstring(desc.working_dir, temp_allocator) or_return if dir_fd, errno = linux.open(dir_cstr, _OPENDIR_FLAGS); errno != .NONE { return process, _get_platform_error(errno) } @@ -414,10 +414,10 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { exe_path: cstring executable_name := desc.command[0] if strings.index_byte(executable_name, '/') < 0 { - path_env := get_env("PATH", temp_allocator()) - path_dirs := split_path_list(path_env, temp_allocator()) or_return + path_env := get_env("PATH", temp_allocator) + path_dirs := split_path_list(path_env, temp_allocator) or_return - exe_builder := strings.builder_make(temp_allocator()) or_return + exe_builder := strings.builder_make(temp_allocator) or_return found: bool for dir in path_dirs { @@ -444,7 +444,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } } } else { - exe_path = temp_cstring(executable_name) or_return + exe_path = clone_to_cstring(executable_name, temp_allocator) or_return if linux.access(exe_path, linux.X_OK) != .NONE { return process, .Not_Exist } @@ -452,20 +452,20 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { // args and environment need to be a list of cstrings // that are terminated by a nil pointer. - cargs := make([]cstring, len(desc.command) + 1, temp_allocator()) or_return + cargs := make([]cstring, len(desc.command) + 1, temp_allocator) or_return for command, i in desc.command { - cargs[i] = temp_cstring(command) or_return + cargs[i] = clone_to_cstring(command, temp_allocator) or_return } // Use current process' environment if description didn't provide it. env: [^]cstring if desc.env == nil { // take this process's current environment - env = raw_data(export_cstring_environment(temp_allocator())) + env = raw_data(export_cstring_environment(temp_allocator)) } else { - cenv := make([]cstring, len(desc.env) + 1, temp_allocator()) or_return + cenv := make([]cstring, len(desc.env) + 1, temp_allocator) or_return for env, i in desc.env { - cenv[i] = temp_cstring(env) or_return + cenv[i] = clone_to_cstring(env, temp_allocator) or_return } env = &cenv[0] } @@ -593,7 +593,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } _process_state_update_times :: proc(state: ^Process_State) -> (err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) stat_path_buf: [48]u8 path_builder := strings.builder_from_bytes(stat_path_buf[:]) @@ -602,7 +602,7 @@ _process_state_update_times :: proc(state: ^Process_State) -> (err: Error) { strings.write_string(&path_builder, "/stat") stat_buf: []u8 - stat_buf, err = _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator()) + stat_buf, err = _read_entire_pseudo_file(strings.to_cstring(&path_builder) or_return, temp_allocator) if err != nil { return } diff --git a/core/os/os2/process_posix.odin b/core/os/os2/process_posix.odin index 6070b19d6..425e56ce3 100644 --- a/core/os/os2/process_posix.odin +++ b/core/os/os2/process_posix.odin @@ -52,14 +52,14 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { return } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) // search PATH if just a plain name is provided. - exe_builder := strings.builder_make(temp_allocator()) + exe_builder := strings.builder_make(temp_allocator) exe_name := desc.command[0] if strings.index_byte(exe_name, '/') < 0 { - path_env := get_env("PATH", temp_allocator()) - path_dirs := split_path_list(path_env, temp_allocator()) or_return + path_env := get_env("PATH", temp_allocator) + path_dirs := split_path_list(path_env, temp_allocator) or_return found: bool for dir in path_dirs { @@ -108,12 +108,12 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } cwd: cstring; if desc.working_dir != "" { - cwd = temp_cstring(desc.working_dir) + cwd = clone_to_cstring(desc.working_dir, temp_allocator) } - cmd := make([]cstring, len(desc.command) + 1, temp_allocator()) + cmd := make([]cstring, len(desc.command) + 1, temp_allocator) for part, i in desc.command { - cmd[i] = temp_cstring(part) + cmd[i] = clone_to_cstring(part, temp_allocator) } env: [^]cstring @@ -121,9 +121,9 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { // take this process's current environment env = posix.environ } else { - cenv := make([]cstring, len(desc.env) + 1, temp_allocator()) + cenv := make([]cstring, len(desc.env) + 1, temp_allocator) for env, i in desc.env { - cenv[i] = temp_cstring(env) + cenv[i] = clone_to_cstring(env, temp_allocator) } env = raw_data(cenv) } diff --git a/core/os/os2/process_posix_darwin.odin b/core/os/os2/process_posix_darwin.odin index 0ea1f643c..f150d728b 100644 --- a/core/os/os2/process_posix_darwin.odin +++ b/core/os/os2/process_posix_darwin.odin @@ -127,7 +127,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator break args } - buf := runtime.make_aligned([]byte, length, 4, temp_allocator()) + buf := runtime.make_aligned([]byte, length, 4, temp_allocator) if sysctl(raw_data(mib), 3, raw_data(buf), &length, nil, 0) != .OK { if err == nil { err = _get_platform_error() @@ -239,9 +239,9 @@ _process_list :: proc(allocator: runtime.Allocator) -> (list: []int, err: Error) return } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - buffer := make([]i32, ret, temp_allocator()) + buffer := make([]i32, ret, temp_allocator) ret = darwin.proc_listallpids(raw_data(buffer), ret*size_of(i32)) if ret < 0 { err = _get_platform_error() diff --git a/core/os/os2/process_windows.odin b/core/os/os2/process_windows.odin index 69764dff7..1d4cda511 100644 --- a/core/os/os2/process_windows.odin +++ b/core/os/os2/process_windows.odin @@ -162,9 +162,10 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator if err != nil { break read_peb } + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) if selection >= {.Command_Line, .Command_Args} { - TEMP_ALLOCATOR_GUARD() - cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator()) or_return + temp_allocator_scope(temp_allocator) + cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator) or_return _, err = read_memory_as_slice(ph, process_params.CommandLine.Buffer, cmdline_w) if err != nil { break read_peb @@ -179,9 +180,9 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator } } if .Environment in selection { - TEMP_ALLOCATOR_GUARD() + temp_allocator_scope(temp_allocator) env_len := process_params.EnvironmentSize / 2 - envs_w := make([]u16, env_len, temp_allocator()) or_return + envs_w := make([]u16, env_len, temp_allocator) or_return _, err = read_memory_as_slice(ph, process_params.Environment, envs_w) if err != nil { break read_peb @@ -190,8 +191,8 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator info.fields += {.Environment} } if .Working_Dir in selection { - TEMP_ALLOCATOR_GUARD() - cwd_w := make([]u16, process_params.CurrentDirectoryPath.Length, temp_allocator()) or_return + temp_allocator_scope(temp_allocator) + cwd_w := make([]u16, process_params.CurrentDirectoryPath.Length, temp_allocator) or_return _, err = read_memory_as_slice(ph, process_params.CurrentDirectoryPath.Buffer, cwd_w) if err != nil { break read_peb @@ -272,9 +273,10 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields if err != nil { break read_peb } + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) if selection >= {.Command_Line, .Command_Args} { - TEMP_ALLOCATOR_GUARD() - cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator()) or_return + temp_allocator_scope(temp_allocator) + cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator) or_return _, err = read_memory_as_slice(ph, process_params.CommandLine.Buffer, cmdline_w) if err != nil { break read_peb @@ -289,9 +291,9 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields } } if .Environment in selection { - TEMP_ALLOCATOR_GUARD() + temp_allocator_scope(temp_allocator) env_len := process_params.EnvironmentSize / 2 - envs_w := make([]u16, env_len, temp_allocator()) or_return + envs_w := make([]u16, env_len, temp_allocator) or_return _, err = read_memory_as_slice(ph, process_params.Environment, envs_w) if err != nil { break read_peb @@ -300,8 +302,8 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields info.fields += {.Environment} } if .Working_Dir in selection { - TEMP_ALLOCATOR_GUARD() - cwd_w := make([]u16, process_params.CurrentDirectoryPath.Length, temp_allocator()) or_return + temp_allocator_scope(temp_allocator) + cwd_w := make([]u16, process_params.CurrentDirectoryPath.Length, temp_allocator) or_return _, err = read_memory_as_slice(ph, process_params.CurrentDirectoryPath.Buffer, cwd_w) if err != nil { break read_peb @@ -419,15 +421,15 @@ _process_open :: proc(pid: int, flags: Process_Open_Flags) -> (process: Process, @(private="package") _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { - TEMP_ALLOCATOR_GUARD() - command_line := _build_command_line(desc.command, temp_allocator()) - command_line_w := win32_utf8_to_wstring(command_line, temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + command_line := _build_command_line(desc.command, temp_allocator) + command_line_w := win32_utf8_to_wstring(command_line, temp_allocator) or_return environment := desc.env if desc.env == nil { - environment = environ(temp_allocator()) or_return + environment = environ(temp_allocator) or_return } - environment_block := _build_environment_block(environment, temp_allocator()) - environment_block_w := win32_utf8_to_utf16(environment_block, temp_allocator()) or_return + environment_block := _build_environment_block(environment, temp_allocator) + environment_block_w := win32_utf8_to_utf16(environment_block, temp_allocator) or_return stderr_handle: win32.HANDLE stdout_handle: win32.HANDLE @@ -474,7 +476,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { stdin_handle = win32.HANDLE((^File_Impl)(desc.stdin.impl).fd) } - working_dir_w := (win32_utf8_to_wstring(desc.working_dir, temp_allocator()) or_else nil) if len(desc.working_dir) > 0 else nil + working_dir_w := (win32_utf8_to_wstring(desc.working_dir, temp_allocator) or_else nil) if len(desc.working_dir) > 0 else nil process_info: win32.PROCESS_INFORMATION ok := win32.CreateProcessW( nil, @@ -612,7 +614,7 @@ _process_exe_by_pid :: proc(pid: int, allocator: runtime.Allocator) -> (exe_path } _get_process_user :: proc(process_handle: win32.HANDLE, allocator: runtime.Allocator) -> (full_username: string, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) token_handle: win32.HANDLE if !win32.OpenProcessToken(process_handle, win32.TOKEN_QUERY, &token_handle) { err = _get_platform_error() @@ -627,7 +629,7 @@ _get_process_user :: proc(process_handle: win32.HANDLE, allocator: runtime.Alloc } err = nil } - token_user := (^win32.TOKEN_USER)(raw_data(make([]u8, token_user_size, temp_allocator()) or_return)) + token_user := (^win32.TOKEN_USER)(raw_data(make([]u8, token_user_size, temp_allocator) or_return)) if !win32.GetTokenInformation(token_handle, .TokenUser, token_user, token_user_size, &token_user_size) { err = _get_platform_error() return @@ -643,8 +645,8 @@ _get_process_user :: proc(process_handle: win32.HANDLE, allocator: runtime.Alloc err = _get_platform_error() return } - username := win32_utf16_to_utf8(username_w[:username_chrs], temp_allocator()) or_return - domain := win32_utf16_to_utf8(domain_w[:domain_chrs], temp_allocator()) or_return + username := win32_utf16_to_utf8(username_w[:username_chrs], temp_allocator) or_return + domain := win32_utf16_to_utf8(domain_w[:domain_chrs], temp_allocator) or_return return strings.concatenate({domain, "\\", username}, allocator) } diff --git a/core/os/os2/stat.odin b/core/os/os2/stat.odin index 7d76902eb..63bb42f13 100644 --- a/core/os/os2/stat.odin +++ b/core/os/os2/stat.odin @@ -73,14 +73,14 @@ last_write_time_by_name :: modification_time_by_path @(require_results) modification_time :: proc(f: ^File) -> (time.Time, Error) { - TEMP_ALLOCATOR_GUARD() - fi, err := fstat(f, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + fi, err := fstat(f, temp_allocator) return fi.modification_time, err } @(require_results) modification_time_by_path :: proc(path: string) -> (time.Time, Error) { - TEMP_ALLOCATOR_GUARD() - fi, err := stat(path, temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + fi, err := stat(path, temp_allocator) return fi.modification_time, err } diff --git a/core/os/os2/stat_linux.odin b/core/os/os2/stat_linux.odin index 7bff08f29..119c39c52 100644 --- a/core/os/os2/stat_linux.odin +++ b/core/os/os2/stat_linux.odin @@ -47,8 +47,8 @@ _fstat_internal :: proc(fd: linux.Fd, allocator: runtime.Allocator) -> (fi: File // NOTE: _stat and _lstat are using _fstat to avoid a race condition when populating fullpath _stat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err: Error) { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + name_cstr := clone_to_cstring(name, temp_allocator) or_return fd, errno := linux.open(name_cstr, {}) if errno != .NONE { @@ -59,8 +59,8 @@ _stat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err } _lstat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err: Error) { - TEMP_ALLOCATOR_GUARD() - name_cstr := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + name_cstr := clone_to_cstring(name, temp_allocator) or_return fd, errno := linux.open(name_cstr, {.PATH, .NOFOLLOW}) if errno != .NONE { diff --git a/core/os/os2/stat_posix.odin b/core/os/os2/stat_posix.odin index 260dc7b52..0f873cd40 100644 --- a/core/os/os2/stat_posix.odin +++ b/core/os/os2/stat_posix.odin @@ -69,8 +69,8 @@ _stat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err return } - TEMP_ALLOCATOR_GUARD() - cname := temp_cstring(name) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + cname := clone_to_cstring(name, temp_allocator) or_return fd := posix.open(cname, {}) if fd == -1 { @@ -96,33 +96,33 @@ _lstat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, er return } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) // NOTE: can't use realpath or open (+ fcntl F_GETPATH) here because it tries to resolve symlinks. // NOTE: This might not be correct when given "/symlink/foo.txt", // you would want that to resolve "/symlink", but not resolve "foo.txt". - fullpath := clean_path(name, temp_allocator()) or_return + fullpath := clean_path(name, temp_allocator) or_return assert(len(fullpath) > 0) switch { case fullpath[0] == '/': // nothing. case fullpath == ".": - fullpath = getwd(temp_allocator()) or_return + fullpath = getwd(temp_allocator) or_return case len(fullpath) > 1 && fullpath[0] == '.' && fullpath[1] == '/': fullpath = fullpath[2:] fallthrough case: fullpath = concatenate({ - getwd(temp_allocator()) or_return, + getwd(temp_allocator) or_return, "/", fullpath, - }, temp_allocator()) or_return + }, temp_allocator) or_return } stat: posix.stat_t - if posix.lstat(temp_cstring(fullpath), &stat) != .OK { + if posix.lstat(clone_to_cstring(fullpath), &stat, temp_allocator) != .OK { err = _get_platform_error() return } diff --git a/core/os/os2/stat_windows.odin b/core/os/os2/stat_windows.odin index 8c3d4a610..ac7acfebf 100644 --- a/core/os/os2/stat_windows.odin +++ b/core/os/os2/stat_windows.odin @@ -45,15 +45,15 @@ full_path_from_name :: proc(name: string, allocator: runtime.Allocator) -> (path name = "." } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - p := win32_utf8_to_utf16(name, temp_allocator()) or_return + p := win32_utf8_to_utf16(name, temp_allocator) or_return n := win32.GetFullPathNameW(raw_data(p), 0, nil, nil) if n == 0 { return "", _get_platform_error() } - buf := make([]u16, n+1, temp_allocator()) + buf := make([]u16, n+1, temp_allocator) n = win32.GetFullPathNameW(raw_data(p), u32(len(buf)), raw_data(buf), nil) if n == 0 { return "", _get_platform_error() @@ -65,9 +65,9 @@ internal_stat :: proc(name: string, create_file_attributes: u32, allocator: runt if len(name) == 0 { return {}, .Not_Exist } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - wname := _fix_long_path(name, temp_allocator()) or_return + wname := _fix_long_path(name, temp_allocator) or_return fa: win32.WIN32_FILE_ATTRIBUTE_DATA ok := win32.GetFileAttributesExW(wname, win32.GetFileExInfoStandard, &fa) if ok && fa.dwFileAttributes & win32.FILE_ATTRIBUTE_REPARSE_POINT == 0 { @@ -137,9 +137,9 @@ _cleanpath_from_handle :: proc(f: ^File, allocator: runtime.Allocator) -> (strin return "", _get_platform_error() } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - buf := make([]u16, max(n, 260)+1, temp_allocator()) + buf := make([]u16, max(n, 260)+1, temp_allocator) n = win32.GetFinalPathNameByHandleW(h, raw_data(buf), u32(len(buf)), 0) return _cleanpath_from_buf(buf[:n], allocator) } @@ -155,9 +155,9 @@ _cleanpath_from_handle_u16 :: proc(f: ^File) -> ([]u16, Error) { return nil, _get_platform_error() } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - buf := make([]u16, max(n, 260)+1, temp_allocator()) + buf := make([]u16, max(n, 260)+1, temp_allocator) n = win32.GetFinalPathNameByHandleW(h, raw_data(buf), u32(len(buf)), 0) return _cleanpath_strip_prefix(buf[:n]), nil } diff --git a/core/os/os2/temp_file.odin b/core/os/os2/temp_file.odin index e93117f02..c63acfd82 100644 --- a/core/os/os2/temp_file.odin +++ b/core/os/os2/temp_file.odin @@ -15,13 +15,13 @@ MAX_ATTEMPTS :: 1<<13 // Should be enough for everyone, right? // The caller must `close` the file once finished with. @(require_results) create_temp_file :: proc(dir, pattern: string) -> (f: ^File, err: Error) { - TEMP_ALLOCATOR_GUARD() - dir := dir if dir != "" else temp_directory(temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + dir := dir if dir != "" else temp_directory(temp_allocator) or_return prefix, suffix := _prefix_and_suffix(pattern) or_return prefix = temp_join_path(dir, prefix) or_return rand_buf: [10]byte - name_buf := make([]byte, len(prefix)+len(rand_buf)+len(suffix), temp_allocator()) + name_buf := make([]byte, len(prefix)+len(rand_buf)+len(suffix), temp_allocator) attempts := 0 for { @@ -47,13 +47,13 @@ mkdir_temp :: make_directory_temp // If `dir` is an empty tring, `temp_directory()` will be used. @(require_results) make_directory_temp :: proc(dir, pattern: string, allocator: runtime.Allocator) -> (temp_path: string, err: Error) { - TEMP_ALLOCATOR_GUARD() - dir := dir if dir != "" else temp_directory(temp_allocator()) or_return + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + dir := dir if dir != "" else temp_directory(temp_allocator) or_return prefix, suffix := _prefix_and_suffix(pattern) or_return prefix = temp_join_path(dir, prefix) or_return rand_buf: [10]byte - name_buf := make([]byte, len(prefix)+len(rand_buf)+len(suffix), temp_allocator()) + name_buf := make([]byte, len(prefix)+len(rand_buf)+len(suffix), temp_allocator) attempts := 0 for { @@ -70,7 +70,7 @@ make_directory_temp :: proc(dir, pattern: string, allocator: runtime.Allocator) return "", err } if err == .Not_Exist { - if _, serr := stat(dir, temp_allocator()); serr == .Not_Exist { + if _, serr := stat(dir, temp_allocator); serr == .Not_Exist { return "", serr } } @@ -89,9 +89,11 @@ temp_directory :: proc(allocator: runtime.Allocator) -> (string, Error) { @(private="file") temp_join_path :: proc(dir, name: string) -> (string, runtime.Allocator_Error) { + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + if len(dir) > 0 && is_path_separator(dir[len(dir)-1]) { - return concatenate({dir, name}, temp_allocator(),) + return concatenate({dir, name}, temp_allocator,) } - return concatenate({dir, Path_Separator_String, name}, temp_allocator()) + return concatenate({dir, Path_Separator_String, name}, temp_allocator) } diff --git a/core/os/os2/temp_file_linux.odin b/core/os/os2/temp_file_linux.odin index 4eacbc54a..4fb273c48 100644 --- a/core/os/os2/temp_file_linux.odin +++ b/core/os/os2/temp_file_linux.odin @@ -4,8 +4,8 @@ package os2 import "base:runtime" _temp_dir :: proc(allocator: runtime.Allocator) -> (string, runtime.Allocator_Error) { - TEMP_ALLOCATOR_GUARD() - tmpdir := get_env("TMPDIR", temp_allocator()) + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + tmpdir := get_env("TMPDIR", temp_allocator) if tmpdir == "" { tmpdir = "/tmp" } diff --git a/core/os/os2/temp_file_windows.odin b/core/os/os2/temp_file_windows.odin index 3e3e1285c..ae6f856e1 100644 --- a/core/os/os2/temp_file_windows.odin +++ b/core/os/os2/temp_file_windows.odin @@ -9,9 +9,9 @@ _temp_dir :: proc(allocator: runtime.Allocator) -> (string, runtime.Allocator_Er if n == 0 { return "", nil } - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - b := make([]u16, max(win32.MAX_PATH, n), temp_allocator()) + b := make([]u16, max(win32.MAX_PATH, n), temp_allocator) n = win32.GetTempPathW(u32(len(b)), raw_data(b)) if n == 3 && b[1] == ':' && b[2] == '\\' { diff --git a/core/os/os2/user.odin b/core/os/os2/user.odin index 7fcc87bf8..7785e50af 100644 --- a/core/os/os2/user.odin +++ b/core/os/os2/user.odin @@ -4,27 +4,27 @@ import "base:runtime" @(require_results) user_cache_dir :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) #partial switch ODIN_OS { case .Windows: - dir = get_env("LocalAppData", temp_allocator()) + dir = get_env("LocalAppData", temp_allocator) if dir != "" { - dir = clone_string(dir, allocator) or_return + dir = clone_string(dir, temp_allocator) or_return } case .Darwin: - dir = get_env("HOME", temp_allocator()) + dir = get_env("HOME", temp_allocator) if dir != "" { - dir = concatenate({dir, "/Library/Caches"}, allocator) or_return + dir = concatenate({dir, "/Library/Caches"}, temp_allocator) or_return } case: // All other UNIX systems dir = get_env("XDG_CACHE_HOME", allocator) if dir == "" { - dir = get_env("HOME", temp_allocator()) + dir = get_env("HOME", temp_allocator) if dir == "" { return } - dir = concatenate({dir, "/.cache"}, allocator) or_return + dir = concatenate({dir, "/.cache"}, temp_allocator) or_return } } if dir == "" { @@ -35,23 +35,23 @@ user_cache_dir :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error @(require_results) user_config_dir :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { - TEMP_ALLOCATOR_GUARD() + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) #partial switch ODIN_OS { case .Windows: - dir = get_env("AppData", temp_allocator()) + dir = get_env("AppData", temp_allocator) if dir != "" { dir = clone_string(dir, allocator) or_return } case .Darwin: - dir = get_env("HOME", temp_allocator()) + dir = get_env("HOME", temp_allocator) if dir != "" { dir = concatenate({dir, "/.config"}, allocator) or_return } case: // All other UNIX systems dir = get_env("XDG_CONFIG_HOME", allocator) if dir == "" { - dir = get_env("HOME", temp_allocator()) + dir = get_env("HOME", temp_allocator) if dir == "" { return } From 190960e103585fad1b7e833e08ea6d3a99584830 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Wed, 30 Apr 2025 19:56:52 +1000 Subject: [PATCH 038/120] fix -vet --- core/os/os2/allocators.odin | 2 +- core/os/os2/dir.odin | 2 +- core/os/os2/dir_windows.odin | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/core/os/os2/allocators.odin b/core/os/os2/allocators.odin index 1a02d4514..5481c4c61 100644 --- a/core/os/os2/allocators.odin +++ b/core/os/os2/allocators.odin @@ -52,7 +52,7 @@ TEMP_ALLOCATOR_GUARD :: #force_inline proc(collisions: []runtime.Allocator, loc Temp_Allocator :: struct { using arena: ^runtime.Arena, - using allocator: runtime.Allocator + using allocator: runtime.Allocator, } get_temp_allocator :: proc(tmp: runtime.Arena_Temp, _: runtime.Source_Code_Location) -> Temp_Allocator { diff --git a/core/os/os2/dir.odin b/core/os/os2/dir.odin index a20c1b346..7e0dfe97e 100644 --- a/core/os/os2/dir.odin +++ b/core/os/os2/dir.odin @@ -206,7 +206,7 @@ copy_directory :: proc(dst, src: string, dst_perm := 0o755) -> Error { file_infos := read_all_directory_by_path(src, temp_allocator) or_return for fi in file_infos { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator_scope(temp_allocator) dst_path := join_path({dst, fi.name}, temp_allocator) or_return src_path := fi.fullpath diff --git a/core/os/os2/dir_windows.odin b/core/os/os2/dir_windows.odin index 722f49717..daabbaf67 100644 --- a/core/os/os2/dir_windows.odin +++ b/core/os/os2/dir_windows.odin @@ -51,8 +51,6 @@ Read_Directory_Iterator_Impl :: struct { @(require_results) _read_directory_iterator :: proc(it: ^Read_Directory_Iterator) -> (fi: File_Info, index: int, ok: bool) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - for !it.impl.no_more_files { err: Error file_info_delete(it.impl.prev_fi, file_allocator()) From 1bea59ee6840d36f114d8a105531e3c0da5e3386 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Wed, 30 Apr 2025 20:07:17 +1000 Subject: [PATCH 039/120] Fix linux --- core/os/os2/dir_linux.odin | 1 + core/os/os2/path_linux.odin | 2 ++ 2 files changed, 3 insertions(+) diff --git a/core/os/os2/dir_linux.odin b/core/os/os2/dir_linux.odin index 4676c23b5..30dce56e6 100644 --- a/core/os/os2/dir_linux.odin +++ b/core/os/os2/dir_linux.odin @@ -78,6 +78,7 @@ _read_directory_iterator :: proc(it: ^Read_Directory_Iterator) -> (fi: File_Info it.impl.prev_fi = fi if err != nil { + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) path, _ := _get_full_path(entry_fd, temp_allocator) read_directory_iterator_set_error(it, path, err) } diff --git a/core/os/os2/path_linux.odin b/core/os/os2/path_linux.odin index d0569c165..11de5cf37 100644 --- a/core/os/os2/path_linux.odin +++ b/core/os/os2/path_linux.odin @@ -168,6 +168,8 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (string, Error) } _set_working_directory :: proc(dir: string) -> Error { + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + dir_cstr := clone_to_cstring(dir, temp_allocator) or_return return _get_platform_error(linux.chdir(dir_cstr)) } From 5292a7f4f386baec0ecd239b38cdfddb9c9be614 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Wed, 30 Apr 2025 20:17:06 +1000 Subject: [PATCH 040/120] Fix posix --- core/os/os2/file_posix.odin | 47 ++++++++++++++------------- core/os/os2/path_posix.odin | 10 +++--- core/os/os2/process_posix.odin | 6 ++-- core/os/os2/process_posix_darwin.odin | 1 + core/os/os2/stat_posix.odin | 3 +- 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/core/os/os2/file_posix.odin b/core/os/os2/file_posix.odin index dc46b380f..c53a176f2 100644 --- a/core/os/os2/file_posix.odin +++ b/core/os/os2/file_posix.odin @@ -70,7 +70,7 @@ _open :: proc(name: string, flags: File_Flags, perm: int) -> (f: ^File, err: Err if .Inheritable in flags { sys_flags -= {.CLOEXEC} } temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return fd := posix.open(cname, sys_flags, transmute(posix.mode_t)posix._mode_t(perm)) if fd < 0 { @@ -183,39 +183,39 @@ _truncate :: proc(f: ^File, size: i64) -> Error { return nil } -_remove :: proc(name: string) -> Error { +_remove :: proc(name: string) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return if posix.remove(cname) != 0 { return _get_platform_error() } return nil } -_rename :: proc(old_path, new_path: string) -> Error { +_rename :: proc(old_path, new_path: string) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cold := clone_to_cstring(old_path, temp_allocator) - cnew := clone_to_cstring(new_path, temp_allocator) + cold := clone_to_cstring(old_path, temp_allocator) or_return + cnew := clone_to_cstring(new_path, temp_allocator) or_return if posix.rename(cold, cnew) != 0 { return _get_platform_error() } return nil } -_link :: proc(old_name, new_name: string) -> Error { +_link :: proc(old_name, new_name: string) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cold := clone_to_cstring(old_name, temp_allocator) - cnew := clone_to_cstring(new_name, temp_allocator) + cold := clone_to_cstring(old_name, temp_allocator) or_return + cnew := clone_to_cstring(new_name, temp_allocator) or_return if posix.link(cold, cnew) != .OK { return _get_platform_error() } return nil } -_symlink :: proc(old_name, new_name: string) -> Error { +_symlink :: proc(old_name, new_name: string) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cold := clone_to_cstring(old_name, temp_allocator) - cnew := clone_to_cstring(new_name, temp_allocator) + cold := clone_to_cstring(old_name, temp_allocator) or_return + cnew := clone_to_cstring(new_name, temp_allocator) or_return if posix.symlink(cold, cnew) != .OK { return _get_platform_error() } @@ -224,7 +224,7 @@ _symlink :: proc(old_name, new_name: string) -> Error { _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return buf: [dynamic]byte buf.allocator = allocator @@ -268,9 +268,9 @@ _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, er } } -_chdir :: proc(name: string) -> Error { +_chdir :: proc(name: string) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return if posix.chdir(cname) != .OK { return _get_platform_error() } @@ -291,9 +291,9 @@ _fchmod :: proc(f: ^File, mode: int) -> Error { return nil } -_chmod :: proc(name: string, mode: int) -> Error { +_chmod :: proc(name: string, mode: int) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return if posix.chmod(cname, transmute(posix.mode_t)posix._mode_t(mode)) != .OK { return _get_platform_error() } @@ -307,9 +307,9 @@ _fchown :: proc(f: ^File, uid, gid: int) -> Error { return nil } -_chown :: proc(name: string, uid, gid: int) -> Error { +_chown :: proc(name: string, uid, gid: int) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return if posix.chown(cname, posix.uid_t(uid), posix.gid_t(gid)) != .OK { return _get_platform_error() } @@ -318,14 +318,14 @@ _chown :: proc(name: string, uid, gid: int) -> Error { _lchown :: proc(name: string, uid, gid: int) -> Error { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return if posix.lchown(cname, posix.uid_t(uid), posix.gid_t(gid)) != .OK { return _get_platform_error() } return nil } -_chtimes :: proc(name: string, atime, mtime: time.Time) -> Error { +_chtimes :: proc(name: string, atime, mtime: time.Time) -> (err: Error) { times := [2]posix.timeval{ { tv_sec = posix.time_t(atime._nsec/1e9), /* seconds */ @@ -338,7 +338,7 @@ _chtimes :: proc(name: string, atime, mtime: time.Time) -> Error { } temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return if posix.utimes(cname, ×) != .OK { return _get_platform_error() @@ -366,7 +366,8 @@ _fchtimes :: proc(f: ^File, atime, mtime: time.Time) -> Error { _exists :: proc(path: string) -> bool { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cpath := clone_to_cstring(path, temp_allocator) + cpath, err := clone_to_cstring(path, temp_allocator) + if err != nil { return false } return posix.access(cpath) == .OK } diff --git a/core/os/os2/path_posix.odin b/core/os/os2/path_posix.odin index 01a149854..1ad46259c 100644 --- a/core/os/os2/path_posix.odin +++ b/core/os/os2/path_posix.odin @@ -14,9 +14,9 @@ _is_path_separator :: proc(c: byte) -> bool { return c == _Path_Separator } -_mkdir :: proc(name: string, perm: int) -> Error { +_mkdir :: proc(name: string, perm: int) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cname := clone_to_cstring(name, temp_allocator) + cname := clone_to_cstring(name, temp_allocator) or_return if posix.mkdir(cname, transmute(posix.mode_t)posix._mode_t(perm)) != .OK { return _get_platform_error() } @@ -52,9 +52,9 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { } } -_remove_all :: proc(path: string) -> Error { +_remove_all :: proc(path: string) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cpath := clone_to_cstring(path, temp_allocator) + cpath := clone_to_cstring(path, temp_allocator) or_return dir := posix.opendir(cpath) if dir == nil { @@ -117,7 +117,7 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, er _set_working_directory :: proc(dir: string) -> (err: Error) { temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) - cdir := clone_to_cstring(dir, temp_allocator) + cdir := clone_to_cstring(dir, temp_allocator) or_return if posix.chdir(cdir) != .OK { err = _get_platform_error() } diff --git a/core/os/os2/process_posix.odin b/core/os/os2/process_posix.odin index 425e56ce3..f24aa12d3 100644 --- a/core/os/os2/process_posix.odin +++ b/core/os/os2/process_posix.odin @@ -108,12 +108,12 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } cwd: cstring; if desc.working_dir != "" { - cwd = clone_to_cstring(desc.working_dir, temp_allocator) + cwd = clone_to_cstring(desc.working_dir, temp_allocator) or_return } cmd := make([]cstring, len(desc.command) + 1, temp_allocator) for part, i in desc.command { - cmd[i] = clone_to_cstring(part, temp_allocator) + cmd[i] = clone_to_cstring(part, temp_allocator) or_return } env: [^]cstring @@ -123,7 +123,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } else { cenv := make([]cstring, len(desc.env) + 1, temp_allocator) for env, i in desc.env { - cenv[i] = clone_to_cstring(env, temp_allocator) + cenv[i] = clone_to_cstring(env, temp_allocator) or_return } env = raw_data(cenv) } diff --git a/core/os/os2/process_posix_darwin.odin b/core/os/os2/process_posix_darwin.odin index f150d728b..eb7ab492d 100644 --- a/core/os/os2/process_posix_darwin.odin +++ b/core/os/os2/process_posix_darwin.odin @@ -50,6 +50,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator } + temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) info.pid = pid // Thought on errors is: allocation failures return immediately (also why the non-allocation stuff is done first), diff --git a/core/os/os2/stat_posix.odin b/core/os/os2/stat_posix.odin index 0f873cd40..5119fe9ad 100644 --- a/core/os/os2/stat_posix.odin +++ b/core/os/os2/stat_posix.odin @@ -122,7 +122,8 @@ _lstat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, er } stat: posix.stat_t - if posix.lstat(clone_to_cstring(fullpath), &stat, temp_allocator) != .OK { + c_fullpath := clone_to_cstring(fullpath, temp_allocator) or_return + if posix.lstat(c_fullpath, &stat) != .OK { err = _get_platform_error() return } From 9f2d008a8a0d53ac58cdc4bdf1279f40215f28c7 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Thu, 1 May 2025 18:23:42 +1000 Subject: [PATCH 041/120] Remove TEMP_ALLOCATOR_GUARD wrapper --- core/os/os2/allocators.odin | 25 +++++++++++-------------- core/os/os2/dir.odin | 4 ++-- core/os/os2/dir_linux.odin | 2 +- core/os/os2/dir_windows.odin | 4 ++-- core/os/os2/env_posix.odin | 6 +++--- core/os/os2/env_wasi.odin | 2 +- core/os/os2/env_windows.odin | 8 ++++---- core/os/os2/errors.odin | 2 +- core/os/os2/file.odin | 4 ++-- core/os/os2/file_linux.odin | 26 +++++++++++++------------- core/os/os2/file_posix.odin | 24 ++++++++++++------------ core/os/os2/file_posix_other.odin | 2 +- core/os/os2/file_windows.odin | 16 ++++++++-------- core/os/os2/path.odin | 4 ++-- core/os/os2/path_linux.odin | 10 +++++----- core/os/os2/path_netbsd.odin | 2 +- core/os/os2/path_openbsd.odin | 2 +- core/os/os2/path_posix.odin | 10 +++++----- core/os/os2/path_posixfs.odin | 2 +- core/os/os2/path_wasi.odin | 2 +- core/os/os2/path_windows.odin | 16 ++++++++-------- core/os/os2/process_linux.odin | 8 ++++---- core/os/os2/process_posix.odin | 2 +- core/os/os2/process_posix_darwin.odin | 4 ++-- core/os/os2/process_windows.odin | 8 ++++---- core/os/os2/stat.odin | 4 ++-- core/os/os2/stat_linux.odin | 4 ++-- core/os/os2/stat_posix.odin | 4 ++-- core/os/os2/stat_windows.odin | 8 ++++---- core/os/os2/temp_file.odin | 6 +++--- core/os/os2/temp_file_linux.odin | 2 +- core/os/os2/temp_file_windows.odin | 2 +- core/os/os2/user.odin | 4 ++-- 33 files changed, 113 insertions(+), 116 deletions(-) diff --git a/core/os/os2/allocators.odin b/core/os/os2/allocators.odin index 5481c4c61..7dba69749 100644 --- a/core/os/os2/allocators.odin +++ b/core/os/os2/allocators.odin @@ -23,12 +23,19 @@ temp_allocator_fini :: proc() { global_default_temp_allocator_arenas = {} } -TEMP_ALLOCATOR_GUARD_END :: proc(temp: runtime.Arena_Temp, loc := #caller_location) { - runtime.arena_temp_end(temp, loc) +Temp_Allocator :: struct { + using arena: ^runtime.Arena, + using allocator: runtime.Allocator, + tmp: runtime.Arena_Temp, + loc: runtime.Source_Code_Location, +} + +TEMP_ALLOCATOR_GUARD_END :: proc(temp: Temp_Allocator) { + runtime.arena_temp_end(temp.tmp, temp.loc) } @(deferred_out=TEMP_ALLOCATOR_GUARD_END) -TEMP_ALLOCATOR_GUARD :: #force_inline proc(collisions: []runtime.Allocator, loc := #caller_location) -> (runtime.Arena_Temp, runtime.Source_Code_Location) { +TEMP_ALLOCATOR_GUARD :: #force_inline proc(collisions: []runtime.Allocator, loc := #caller_location) -> Temp_Allocator { assert(len(collisions) <= MAX_TEMP_ARENA_COLLISIONS) good_arena: ^runtime.Arena for i in 0.. Temp_Allocator { - return { tmp.arena, runtime.arena_allocator(tmp.arena) } + return { good_arena, runtime.arena_allocator(good_arena), tmp, loc } } temp_allocator_begin :: runtime.arena_temp_begin @@ -70,7 +68,6 @@ _temp_allocator_end :: proc(tmp: runtime.Arena_Temp) { temp_allocator_end(tmp) } - @(init, private) init_thread_local_cleaner :: proc() { runtime.add_thread_local_cleaner(temp_allocator_fini) diff --git a/core/os/os2/dir.odin b/core/os/os2/dir.odin index 7e0dfe97e..a33e8a8d9 100644 --- a/core/os/os2/dir.odin +++ b/core/os/os2/dir.odin @@ -18,7 +18,7 @@ read_directory :: proc(f: ^File, n: int, allocator: runtime.Allocator) -> (files size = 100 } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) it := read_directory_iterator_create(f) defer _read_directory_iterator_destroy(&it) @@ -202,7 +202,7 @@ copy_directory :: proc(dst, src: string, dst_perm := 0o755) -> Error { return err } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) file_infos := read_all_directory_by_path(src, temp_allocator) or_return for fi in file_infos { diff --git a/core/os/os2/dir_linux.odin b/core/os/os2/dir_linux.odin index 30dce56e6..34346c02f 100644 --- a/core/os/os2/dir_linux.odin +++ b/core/os/os2/dir_linux.odin @@ -78,7 +78,7 @@ _read_directory_iterator :: proc(it: ^Read_Directory_Iterator) -> (fi: File_Info it.impl.prev_fi = fi if err != nil { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) path, _ := _get_full_path(entry_fd, temp_allocator) read_directory_iterator_set_error(it, path, err) } diff --git a/core/os/os2/dir_windows.odin b/core/os/os2/dir_windows.odin index daabbaf67..4cf1f8396 100644 --- a/core/os/os2/dir_windows.odin +++ b/core/os/os2/dir_windows.odin @@ -15,7 +15,7 @@ find_data_to_file_info :: proc(base_path: string, d: ^win32.WIN32_FIND_DATAW, al return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) path := concatenate({base_path, `\`, win32_wstring_to_utf8(raw_data(d.cFileName[:]), temp_allocator) or_else ""}, allocator) or_return handle := win32.HANDLE(_open_internal(path, {.Read}, 0o666) or_else 0) @@ -116,7 +116,7 @@ _read_directory_iterator_init :: proc(it: ^Read_Directory_Iterator, f: ^File) { wpath = impl.wname[:i] } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) wpath_search := make([]u16, len(wpath)+3, temp_allocator) copy(wpath_search, wpath) diff --git a/core/os/os2/env_posix.odin b/core/os/os2/env_posix.odin index 62ba6bbe4..13682f76b 100644 --- a/core/os/os2/env_posix.odin +++ b/core/os/os2/env_posix.odin @@ -12,7 +12,7 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) ckey := strings.clone_to_cstring(key, temp_allocator) cval := posix.getenv(ckey) @@ -27,7 +27,7 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string } _set_env :: proc(key, value: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) ckey := strings.clone_to_cstring(key, temp_allocator) or_return cval := strings.clone_to_cstring(value, temp_allocator) or_return @@ -39,7 +39,7 @@ _set_env :: proc(key, value: string) -> (err: Error) { } _unset_env :: proc(key: string) -> (ok: bool) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) ckey := strings.clone_to_cstring(key, temp_allocator) diff --git a/core/os/os2/env_wasi.odin b/core/os/os2/env_wasi.odin index e9896370a..faa54e36b 100644 --- a/core/os/os2/env_wasi.odin +++ b/core/os/os2/env_wasi.odin @@ -39,7 +39,7 @@ build_env :: proc() -> (err: Error) { g_env_buf = make([]byte, size_of_envs, file_allocator()) or_return defer if err != nil { delete(g_env_buf, file_allocator()) } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) envs := make([]cstring, num_envs, temp_allocator) or_return diff --git a/core/os/os2/env_windows.odin b/core/os/os2/env_windows.odin index cd2c5e758..6bfde34bb 100644 --- a/core/os/os2/env_windows.odin +++ b/core/os/os2/env_windows.odin @@ -8,7 +8,7 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string if key == "" { return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) wkey, _ := win32_utf8_to_wstring(key, temp_allocator) n := win32.GetEnvironmentVariableW(wkey, nil, 0) @@ -37,7 +37,7 @@ _lookup_env :: proc(key: string, allocator: runtime.Allocator) -> (value: string } _set_env :: proc(key, value: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) k := win32_utf8_to_wstring(key, temp_allocator) or_return v := win32_utf8_to_wstring(value, temp_allocator) or_return @@ -48,13 +48,13 @@ _set_env :: proc(key, value: string) -> Error { } _unset_env :: proc(key: string) -> bool { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) k, _ := win32_utf8_to_wstring(key, temp_allocator) return bool(win32.SetEnvironmentVariableW(k, nil)) } _clear_env :: proc() { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) envs, _ := environ(temp_allocator) for env in envs { for j in 1.. string { } print_error :: proc(f: ^File, ferr: Error, msg: string) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) err_str := error_string(ferr) // msg + ": " + err_str + '\n' diff --git a/core/os/os2/file.odin b/core/os/os2/file.odin index 57a65894a..ff214182e 100644 --- a/core/os/os2/file.odin +++ b/core/os/os2/file.odin @@ -291,7 +291,7 @@ exists :: proc(path: string) -> bool { @(require_results) is_file :: proc(path: string) -> bool { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) fi, err := stat(path, temp_allocator) if err != nil { return false @@ -303,7 +303,7 @@ is_dir :: is_directory @(require_results) is_directory :: proc(path: string) -> bool { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) fi, err := stat(path, temp_allocator) if err != nil { return false diff --git a/core/os/os2/file_linux.odin b/core/os/os2/file_linux.odin index bb5edd345..a1ead7f9f 100644 --- a/core/os/os2/file_linux.odin +++ b/core/os/os2/file_linux.odin @@ -66,7 +66,7 @@ _standard_stream_init :: proc() { } _open :: proc(name: string, flags: File_Flags, perm: int) -> (f: ^File, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr := clone_to_cstring(name, temp_allocator) or_return // Just default to using O_NOCTTY because needing to open a controlling @@ -299,7 +299,7 @@ _truncate :: proc(f: ^File, size: i64) -> Error { } _remove :: proc(name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr := clone_to_cstring(name, temp_allocator) or_return if fd, errno := linux.open(name_cstr, _OPENDIR_FLAGS + {.NOFOLLOW}); errno == .NONE { @@ -311,7 +311,7 @@ _remove :: proc(name: string) -> Error { } _rename :: proc(old_name, new_name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) old_name_cstr := clone_to_cstring(old_name, temp_allocator) or_return new_name_cstr := clone_to_cstring(new_name, temp_allocator) or_return @@ -319,7 +319,7 @@ _rename :: proc(old_name, new_name: string) -> Error { } _link :: proc(old_name, new_name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) old_name_cstr := clone_to_cstring(old_name, temp_allocator) or_return new_name_cstr := clone_to_cstring(new_name, temp_allocator) or_return @@ -327,7 +327,7 @@ _link :: proc(old_name, new_name: string) -> Error { } _symlink :: proc(old_name, new_name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) old_name_cstr := clone_to_cstring(old_name, temp_allocator) or_return new_name_cstr := clone_to_cstring(new_name, temp_allocator) or_return return _get_platform_error(linux.symlink(old_name_cstr, new_name_cstr)) @@ -352,13 +352,13 @@ _read_link_cstr :: proc(name_cstr: cstring, allocator: runtime.Allocator) -> (st } _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, e: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) name_cstr := clone_to_cstring(name, temp_allocator) or_return return _read_link_cstr(name_cstr, allocator) } _chdir :: proc(name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.chdir(name_cstr)) } @@ -369,7 +369,7 @@ _fchdir :: proc(f: ^File) -> Error { } _chmod :: proc(name: string, mode: int) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.chmod(name_cstr, transmute(linux.Mode)(u32(mode)))) } @@ -381,14 +381,14 @@ _fchmod :: proc(f: ^File, mode: int) -> Error { // NOTE: will throw error without super user priviledges _chown :: proc(name: string, uid, gid: int) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.chown(name_cstr, linux.Uid(uid), linux.Gid(gid))) } // NOTE: will throw error without super user priviledges _lchown :: proc(name: string, uid, gid: int) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr := clone_to_cstring(name, temp_allocator) or_return return _get_platform_error(linux.lchown(name_cstr, linux.Uid(uid), linux.Gid(gid))) } @@ -400,7 +400,7 @@ _fchown :: proc(f: ^File, uid, gid: int) -> Error { } _chtimes :: proc(name: string, atime, mtime: time.Time) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr := clone_to_cstring(name, temp_allocator) or_return times := [2]linux.Time_Spec { { @@ -431,7 +431,7 @@ _fchtimes :: proc(f: ^File, atime, mtime: time.Time) -> Error { } _exists :: proc(name: string) -> bool { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) name_cstr, _ := clone_to_cstring(name, temp_allocator) return linux.access(name_cstr, linux.F_OK) == .NONE } @@ -440,7 +440,7 @@ _exists :: proc(name: string) -> bool { _read_entire_pseudo_file :: proc { _read_entire_pseudo_file_string, _read_entire_pseudo_file_cstring } _read_entire_pseudo_file_string :: proc(name: string, allocator: runtime.Allocator) -> (b: []u8, e: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) name_cstr := clone_to_cstring(name, temp_allocator) or_return return _read_entire_pseudo_file_cstring(name_cstr, allocator) } diff --git a/core/os/os2/file_posix.odin b/core/os/os2/file_posix.odin index c53a176f2..2d74618ee 100644 --- a/core/os/os2/file_posix.odin +++ b/core/os/os2/file_posix.odin @@ -69,7 +69,7 @@ _open :: proc(name: string, flags: File_Flags, perm: int) -> (f: ^File, err: Err if .Trunc in flags { sys_flags += {.TRUNC} } if .Inheritable in flags { sys_flags -= {.CLOEXEC} } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return fd := posix.open(cname, sys_flags, transmute(posix.mode_t)posix._mode_t(perm)) @@ -184,7 +184,7 @@ _truncate :: proc(f: ^File, size: i64) -> Error { } _remove :: proc(name: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return if posix.remove(cname) != 0 { return _get_platform_error() @@ -193,7 +193,7 @@ _remove :: proc(name: string) -> (err: Error) { } _rename :: proc(old_path, new_path: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cold := clone_to_cstring(old_path, temp_allocator) or_return cnew := clone_to_cstring(new_path, temp_allocator) or_return if posix.rename(cold, cnew) != 0 { @@ -203,7 +203,7 @@ _rename :: proc(old_path, new_path: string) -> (err: Error) { } _link :: proc(old_name, new_name: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cold := clone_to_cstring(old_name, temp_allocator) or_return cnew := clone_to_cstring(new_name, temp_allocator) or_return if posix.link(cold, cnew) != .OK { @@ -213,7 +213,7 @@ _link :: proc(old_name, new_name: string) -> (err: Error) { } _symlink :: proc(old_name, new_name: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cold := clone_to_cstring(old_name, temp_allocator) or_return cnew := clone_to_cstring(new_name, temp_allocator) or_return if posix.symlink(cold, cnew) != .OK { @@ -223,7 +223,7 @@ _symlink :: proc(old_name, new_name: string) -> (err: Error) { } _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) cname := clone_to_cstring(name, temp_allocator) or_return buf: [dynamic]byte @@ -269,7 +269,7 @@ _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, er } _chdir :: proc(name: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return if posix.chdir(cname) != .OK { return _get_platform_error() @@ -292,7 +292,7 @@ _fchmod :: proc(f: ^File, mode: int) -> Error { } _chmod :: proc(name: string, mode: int) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return if posix.chmod(cname, transmute(posix.mode_t)posix._mode_t(mode)) != .OK { return _get_platform_error() @@ -308,7 +308,7 @@ _fchown :: proc(f: ^File, uid, gid: int) -> Error { } _chown :: proc(name: string, uid, gid: int) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return if posix.chown(cname, posix.uid_t(uid), posix.gid_t(gid)) != .OK { return _get_platform_error() @@ -317,7 +317,7 @@ _chown :: proc(name: string, uid, gid: int) -> (err: Error) { } _lchown :: proc(name: string, uid, gid: int) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return if posix.lchown(cname, posix.uid_t(uid), posix.gid_t(gid)) != .OK { return _get_platform_error() @@ -337,7 +337,7 @@ _chtimes :: proc(name: string, atime, mtime: time.Time) -> (err: Error) { }, } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return if posix.utimes(cname, ×) != .OK { @@ -365,7 +365,7 @@ _fchtimes :: proc(f: ^File, atime, mtime: time.Time) -> Error { } _exists :: proc(path: string) -> bool { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cpath, err := clone_to_cstring(path, temp_allocator) if err != nil { return false } return posix.access(cpath) == .OK diff --git a/core/os/os2/file_posix_other.odin b/core/os/os2/file_posix_other.odin index a7f095cb3..d2946098b 100644 --- a/core/os/os2/file_posix_other.odin +++ b/core/os/os2/file_posix_other.odin @@ -7,7 +7,7 @@ import "base:runtime" import "core:sys/posix" _posix_absolute_path :: proc(fd: posix.FD, name: string, allocator: runtime.Allocator) -> (path: cstring, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) cname := clone_to_cstring(name, temp_allocator) buf: [posix.PATH_MAX]byte diff --git a/core/os/os2/file_windows.odin b/core/os/os2/file_windows.odin index 8f45d4ab9..16803f1ac 100644 --- a/core/os/os2/file_windows.odin +++ b/core/os/os2/file_windows.odin @@ -109,7 +109,7 @@ _open_internal :: proc(name: string, flags: File_Flags, perm: int) -> (handle: u err = .Not_Exist return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) path := _fix_long_path(name, temp_allocator) or_return access: u32 @@ -580,7 +580,7 @@ _truncate :: proc(f: ^File, size: i64) -> Error { } _remove :: proc(name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) p := _fix_long_path(name, temp_allocator) or_return err, err1: Error if !win32.DeleteFileW(p) { @@ -618,7 +618,7 @@ _remove :: proc(name: string) -> Error { } _rename :: proc(old_path, new_path: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) from := _fix_long_path(old_path, temp_allocator) or_return to := _fix_long_path(new_path, temp_allocator) or_return if win32.MoveFileExW(from, to, win32.MOVEFILE_REPLACE_EXISTING) { @@ -629,7 +629,7 @@ _rename :: proc(old_path, new_path: string) -> Error { } _link :: proc(old_name, new_name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) o := _fix_long_path(old_name, temp_allocator) or_return n := _fix_long_path(new_name, temp_allocator) or_return if win32.CreateHardLinkW(n, o, nil) { @@ -692,7 +692,7 @@ _normalize_link_path :: proc(p: []u16, allocator: runtime.Allocator) -> (str: st return "", _get_platform_error() } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buf := make([]u16, n+1, temp_allocator) n = win32.GetFinalPathNameByHandleW(handle, raw_data(buf), u32(len(buf)), win32.VOLUME_NAME_DOS) @@ -718,7 +718,7 @@ _read_link :: proc(name: string, allocator: runtime.Allocator) -> (s: string, er @thread_local rdb_buf: [MAXIMUM_REPARSE_DATA_BUFFER_SIZE]byte - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) p := _fix_long_path(name, temp_allocator) or_return handle := _open_sym_link(p) or_return @@ -785,7 +785,7 @@ _fchown :: proc(f: ^File, uid, gid: int) -> Error { } _chdir :: proc(name: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) p := _fix_long_path(name, temp_allocator) or_return if !win32.SetCurrentDirectoryW(p) { return _get_platform_error() @@ -834,7 +834,7 @@ _fchtimes :: proc(f: ^File, atime, mtime: time.Time) -> Error { } _exists :: proc(path: string) -> bool { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) wpath, _ := _fix_long_path(path, temp_allocator) attribs := win32.GetFileAttributesW(wpath) return attribs != win32.INVALID_FILE_ATTRIBUTES diff --git a/core/os/os2/path.odin b/core/os/os2/path.odin index 2caf13092..e12aa3c9c 100644 --- a/core/os/os2/path.odin +++ b/core/os/os2/path.odin @@ -119,7 +119,7 @@ clean_path :: proc(path: string, allocator: runtime.Allocator) -> (cleaned: stri return strings.clone(".", allocator) } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) // The extra byte is to simplify appending path elements by letting the // loop to end each with a separator. We'll trim the last one when we're done. @@ -326,7 +326,7 @@ For example, `join_path({"/home", "foo", "bar.txt"})` will result in `"/home/foo join_path :: proc(elems: []string, allocator: runtime.Allocator) -> (joined: string, err: Error) { for e, i in elems { if e != "" { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) p := strings.join(elems[i:], Path_Separator_String, temp_allocator) or_return return clean_path(p, allocator) } diff --git a/core/os/os2/path_linux.odin b/core/os/os2/path_linux.odin index 11de5cf37..64f415187 100644 --- a/core/os/os2/path_linux.odin +++ b/core/os/os2/path_linux.odin @@ -18,7 +18,7 @@ _is_path_separator :: proc(c: byte) -> bool { } _mkdir :: proc(path: string, perm: int) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) path_cstr := clone_to_cstring(path, temp_allocator) or_return return _get_platform_error(linux.mkdir(path_cstr, transmute(linux.Mode)u32(perm))) } @@ -52,7 +52,7 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { } return _get_platform_error(errno) } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) // need something we can edit, and use to generate cstrings path_bytes := make([]u8, len(path) + 1, temp_allocator) @@ -129,7 +129,7 @@ _remove_all :: proc(path: string) -> Error { return nil } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) path_cstr := clone_to_cstring(path, temp_allocator) or_return fd, errno := linux.open(path_cstr, _OPENDIR_FLAGS) @@ -168,14 +168,14 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (string, Error) } _set_working_directory :: proc(dir: string) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) dir_cstr := clone_to_cstring(dir, temp_allocator) or_return return _get_platform_error(linux.chdir(dir_cstr)) } _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buf := make([dynamic]byte, 1024, temp_allocator) or_return for { diff --git a/core/os/os2/path_netbsd.odin b/core/os/os2/path_netbsd.odin index 41abfb3f1..815102dea 100644 --- a/core/os/os2/path_netbsd.odin +++ b/core/os/os2/path_netbsd.odin @@ -5,7 +5,7 @@ import "base:runtime" import "core:sys/posix" _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buf := make([dynamic]byte, 1024, temp_allocator) or_return for { diff --git a/core/os/os2/path_openbsd.odin b/core/os/os2/path_openbsd.odin index e27a31dda..cbc0346d4 100644 --- a/core/os/os2/path_openbsd.odin +++ b/core/os/os2/path_openbsd.odin @@ -35,7 +35,7 @@ _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err return real(arg, allocator) } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buf := strings.builder_make(temp_allocator) diff --git a/core/os/os2/path_posix.odin b/core/os/os2/path_posix.odin index 1ad46259c..e59567240 100644 --- a/core/os/os2/path_posix.odin +++ b/core/os/os2/path_posix.odin @@ -15,7 +15,7 @@ _is_path_separator :: proc(c: byte) -> bool { } _mkdir :: proc(name: string, perm: int) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return if posix.mkdir(cname, transmute(posix.mode_t)posix._mode_t(perm)) != .OK { return _get_platform_error() @@ -28,7 +28,7 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { return .Invalid_Path } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) if exists(path) { return .Exist @@ -53,7 +53,7 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { } _remove_all :: proc(path: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cpath := clone_to_cstring(path, temp_allocator) or_return dir := posix.opendir(cpath) @@ -95,7 +95,7 @@ _remove_all :: proc(path: string) -> (err: Error) { } _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buf: [dynamic]byte buf.allocator = temp_allocator @@ -116,7 +116,7 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, er } _set_working_directory :: proc(dir: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) cdir := clone_to_cstring(dir, temp_allocator) or_return if posix.chdir(cdir) != .OK { err = _get_platform_error() diff --git a/core/os/os2/path_posixfs.odin b/core/os/os2/path_posixfs.odin index 24575bbd8..4102d71c1 100644 --- a/core/os/os2/path_posixfs.odin +++ b/core/os/os2/path_posixfs.odin @@ -31,7 +31,7 @@ _get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absol if rel == "" { rel = "." } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) rel_cstr := strings.clone_to_cstring(rel, temp_allocator) path_ptr := posix.realpath(rel_cstr, nil) if path_ptr == nil { diff --git a/core/os/os2/path_wasi.odin b/core/os/os2/path_wasi.odin index 3e00463b1..b8240e188 100644 --- a/core/os/os2/path_wasi.odin +++ b/core/os/os2/path_wasi.odin @@ -28,7 +28,7 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { return .Invalid_Path } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) if exists(path) { return .Exist diff --git a/core/os/os2/path_windows.odin b/core/os/os2/path_windows.odin index 07e202222..9c0fec9b9 100644 --- a/core/os/os2/path_windows.odin +++ b/core/os/os2/path_windows.odin @@ -14,7 +14,7 @@ _is_path_separator :: proc(c: byte) -> bool { } _mkdir :: proc(name: string, perm: int) -> Error { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) if !win32.CreateDirectoryW(_fix_long_path(name, temp_allocator) or_return, nil) { return _get_platform_error() } @@ -33,7 +33,7 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { return p, false, nil } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) dir_stat, err := stat(path, temp_allocator) if err == nil { @@ -82,7 +82,7 @@ _remove_all :: proc(path: string) -> Error { return nil } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) dir := win32_utf8_to_wstring(path, temp_allocator) or_return empty: [1]u16 @@ -109,7 +109,7 @@ _remove_all :: proc(path: string) -> Error { _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { win32.AcquireSRWLockExclusive(&cwd_lock) - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) sz_utf16 := win32.GetCurrentDirectoryW(0, nil) dir_buf_wstr := make([]u16, sz_utf16, temp_allocator) or_return @@ -123,7 +123,7 @@ _get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, er } _set_working_directory :: proc(dir: string) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) wstr := win32_utf8_to_wstring(dir, temp_allocator) or_return win32.AcquireSRWLockExclusive(&cwd_lock) @@ -138,7 +138,7 @@ _set_working_directory :: proc(dir: string) -> (err: Error) { } _get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buf := make([dynamic]u16, 512, temp_allocator) or_return for { @@ -222,7 +222,7 @@ _fix_long_path_internal :: proc(path: string) -> string { return path } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) PREFIX :: `\\?` path_buf := make([]byte, len(PREFIX)+len(path)+1, temp_allocator) @@ -297,7 +297,7 @@ _get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absol if rel == "" { rel = "." } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) rel_utf16 := win32.utf8_to_utf16(rel, temp_allocator) n := win32.GetFullPathNameW(raw_data(rel_utf16), 0, nil, nil) if n == 0 { diff --git a/core/os/os2/process_linux.odin b/core/os/os2/process_linux.odin index 6d239ef25..8dffac08b 100644 --- a/core/os/os2/process_linux.odin +++ b/core/os/os2/process_linux.odin @@ -50,7 +50,7 @@ _get_ppid :: proc() -> int { @(private="package") _process_list :: proc(allocator: runtime.Allocator) -> (list: []int, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) dir_fd, errno := linux.open("/proc/", _OPENDIR_FLAGS) #partial switch errno { @@ -100,7 +100,7 @@ _process_list :: proc(allocator: runtime.Allocator) -> (list: []int, err: Error) @(private="package") _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator: runtime.Allocator) -> (info: Process_Info, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) info.pid = pid @@ -392,7 +392,7 @@ _process_open :: proc(pid: int, _: Process_Open_Flags) -> (process: Process, err @(private="package") _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) if len(desc.command) == 0 { return process, .Invalid_Command @@ -593,7 +593,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } _process_state_update_times :: proc(state: ^Process_State) -> (err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) stat_path_buf: [48]u8 path_builder := strings.builder_from_bytes(stat_path_buf[:]) diff --git a/core/os/os2/process_posix.odin b/core/os/os2/process_posix.odin index f24aa12d3..fcacdf654 100644 --- a/core/os/os2/process_posix.odin +++ b/core/os/os2/process_posix.odin @@ -52,7 +52,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) // search PATH if just a plain name is provided. exe_builder := strings.builder_make(temp_allocator) diff --git a/core/os/os2/process_posix_darwin.odin b/core/os/os2/process_posix_darwin.odin index eb7ab492d..ac2d4b78c 100644 --- a/core/os/os2/process_posix_darwin.odin +++ b/core/os/os2/process_posix_darwin.odin @@ -50,7 +50,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) info.pid = pid // Thought on errors is: allocation failures return immediately (also why the non-allocation stuff is done first), @@ -240,7 +240,7 @@ _process_list :: proc(allocator: runtime.Allocator) -> (list: []int, err: Error) return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buffer := make([]i32, ret, temp_allocator) ret = darwin.proc_listallpids(raw_data(buffer), ret*size_of(i32)) diff --git a/core/os/os2/process_windows.odin b/core/os/os2/process_windows.odin index 1d4cda511..199e5ad74 100644 --- a/core/os/os2/process_windows.odin +++ b/core/os/os2/process_windows.odin @@ -162,7 +162,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator if err != nil { break read_peb } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) if selection >= {.Command_Line, .Command_Args} { temp_allocator_scope(temp_allocator) cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator) or_return @@ -273,7 +273,7 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields if err != nil { break read_peb } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) if selection >= {.Command_Line, .Command_Args} { temp_allocator_scope(temp_allocator) cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator) or_return @@ -421,7 +421,7 @@ _process_open :: proc(pid: int, flags: Process_Open_Flags) -> (process: Process, @(private="package") _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) command_line := _build_command_line(desc.command, temp_allocator) command_line_w := win32_utf8_to_wstring(command_line, temp_allocator) or_return environment := desc.env @@ -614,7 +614,7 @@ _process_exe_by_pid :: proc(pid: int, allocator: runtime.Allocator) -> (exe_path } _get_process_user :: proc(process_handle: win32.HANDLE, allocator: runtime.Allocator) -> (full_username: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) token_handle: win32.HANDLE if !win32.OpenProcessToken(process_handle, win32.TOKEN_QUERY, &token_handle) { err = _get_platform_error() diff --git a/core/os/os2/stat.odin b/core/os/os2/stat.odin index 63bb42f13..d6b524684 100644 --- a/core/os/os2/stat.odin +++ b/core/os/os2/stat.odin @@ -73,14 +73,14 @@ last_write_time_by_name :: modification_time_by_path @(require_results) modification_time :: proc(f: ^File) -> (time.Time, Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) fi, err := fstat(f, temp_allocator) return fi.modification_time, err } @(require_results) modification_time_by_path :: proc(path: string) -> (time.Time, Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) fi, err := stat(path, temp_allocator) return fi.modification_time, err } diff --git a/core/os/os2/stat_linux.odin b/core/os/os2/stat_linux.odin index 119c39c52..373765be5 100644 --- a/core/os/os2/stat_linux.odin +++ b/core/os/os2/stat_linux.odin @@ -47,7 +47,7 @@ _fstat_internal :: proc(fd: linux.Fd, allocator: runtime.Allocator) -> (fi: File // NOTE: _stat and _lstat are using _fstat to avoid a race condition when populating fullpath _stat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) name_cstr := clone_to_cstring(name, temp_allocator) or_return fd, errno := linux.open(name_cstr, {}) @@ -59,7 +59,7 @@ _stat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err } _lstat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) name_cstr := clone_to_cstring(name, temp_allocator) or_return fd, errno := linux.open(name_cstr, {.PATH, .NOFOLLOW}) diff --git a/core/os/os2/stat_posix.odin b/core/os/os2/stat_posix.odin index 5119fe9ad..6ffbdf1da 100644 --- a/core/os/os2/stat_posix.odin +++ b/core/os/os2/stat_posix.odin @@ -69,7 +69,7 @@ _stat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, err return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) cname := clone_to_cstring(name, temp_allocator) or_return fd := posix.open(cname, {}) @@ -96,7 +96,7 @@ _lstat :: proc(name: string, allocator: runtime.Allocator) -> (fi: File_Info, er return } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) // NOTE: can't use realpath or open (+ fcntl F_GETPATH) here because it tries to resolve symlinks. diff --git a/core/os/os2/stat_windows.odin b/core/os/os2/stat_windows.odin index ac7acfebf..918c86f76 100644 --- a/core/os/os2/stat_windows.odin +++ b/core/os/os2/stat_windows.odin @@ -45,7 +45,7 @@ full_path_from_name :: proc(name: string, allocator: runtime.Allocator) -> (path name = "." } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) p := win32_utf8_to_utf16(name, temp_allocator) or_return @@ -65,7 +65,7 @@ internal_stat :: proc(name: string, create_file_attributes: u32, allocator: runt if len(name) == 0 { return {}, .Not_Exist } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) wname := _fix_long_path(name, temp_allocator) or_return fa: win32.WIN32_FILE_ATTRIBUTE_DATA @@ -137,7 +137,7 @@ _cleanpath_from_handle :: proc(f: ^File, allocator: runtime.Allocator) -> (strin return "", _get_platform_error() } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) buf := make([]u16, max(n, 260)+1, temp_allocator) n = win32.GetFinalPathNameByHandleW(h, raw_data(buf), u32(len(buf)), 0) @@ -155,7 +155,7 @@ _cleanpath_from_handle_u16 :: proc(f: ^File) -> ([]u16, Error) { return nil, _get_platform_error() } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) buf := make([]u16, max(n, 260)+1, temp_allocator) n = win32.GetFinalPathNameByHandleW(h, raw_data(buf), u32(len(buf)), 0) diff --git a/core/os/os2/temp_file.odin b/core/os/os2/temp_file.odin index c63acfd82..ad20b5706 100644 --- a/core/os/os2/temp_file.odin +++ b/core/os/os2/temp_file.odin @@ -15,7 +15,7 @@ MAX_ATTEMPTS :: 1<<13 // Should be enough for everyone, right? // The caller must `close` the file once finished with. @(require_results) create_temp_file :: proc(dir, pattern: string) -> (f: ^File, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) dir := dir if dir != "" else temp_directory(temp_allocator) or_return prefix, suffix := _prefix_and_suffix(pattern) or_return prefix = temp_join_path(dir, prefix) or_return @@ -47,7 +47,7 @@ mkdir_temp :: make_directory_temp // If `dir` is an empty tring, `temp_directory()` will be used. @(require_results) make_directory_temp :: proc(dir, pattern: string, allocator: runtime.Allocator) -> (temp_path: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) dir := dir if dir != "" else temp_directory(temp_allocator) or_return prefix, suffix := _prefix_and_suffix(pattern) or_return prefix = temp_join_path(dir, prefix) or_return @@ -89,7 +89,7 @@ temp_directory :: proc(allocator: runtime.Allocator) -> (string, Error) { @(private="file") temp_join_path :: proc(dir, name: string) -> (string, runtime.Allocator_Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({})) + temp_allocator := TEMP_ALLOCATOR_GUARD({}) if len(dir) > 0 && is_path_separator(dir[len(dir)-1]) { return concatenate({dir, name}, temp_allocator,) diff --git a/core/os/os2/temp_file_linux.odin b/core/os/os2/temp_file_linux.odin index 4fb273c48..310720cbe 100644 --- a/core/os/os2/temp_file_linux.odin +++ b/core/os/os2/temp_file_linux.odin @@ -4,7 +4,7 @@ package os2 import "base:runtime" _temp_dir :: proc(allocator: runtime.Allocator) -> (string, runtime.Allocator_Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) tmpdir := get_env("TMPDIR", temp_allocator) if tmpdir == "" { tmpdir = "/tmp" diff --git a/core/os/os2/temp_file_windows.odin b/core/os/os2/temp_file_windows.odin index ae6f856e1..9d75ef99d 100644 --- a/core/os/os2/temp_file_windows.odin +++ b/core/os/os2/temp_file_windows.odin @@ -9,7 +9,7 @@ _temp_dir :: proc(allocator: runtime.Allocator) -> (string, runtime.Allocator_Er if n == 0 { return "", nil } - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) b := make([]u16, max(win32.MAX_PATH, n), temp_allocator) n = win32.GetTempPathW(u32(len(b)), raw_data(b)) diff --git a/core/os/os2/user.odin b/core/os/os2/user.odin index 7785e50af..b2856a319 100644 --- a/core/os/os2/user.odin +++ b/core/os/os2/user.odin @@ -4,7 +4,7 @@ import "base:runtime" @(require_results) user_cache_dir :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) #partial switch ODIN_OS { case .Windows: @@ -35,7 +35,7 @@ user_cache_dir :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error @(require_results) user_config_dir :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) { - temp_allocator := get_temp_allocator(TEMP_ALLOCATOR_GUARD({ allocator })) + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) #partial switch ODIN_OS { case .Windows: From 14c5096b81d38ecc585c598ca6d15c5ca342aca5 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Thu, 1 May 2025 18:24:41 +1000 Subject: [PATCH 042/120] Improve assert information --- core/os/os2/allocators.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/os/os2/allocators.odin b/core/os/os2/allocators.odin index 7dba69749..cedfbdee1 100644 --- a/core/os/os2/allocators.odin +++ b/core/os/os2/allocators.odin @@ -36,7 +36,7 @@ TEMP_ALLOCATOR_GUARD_END :: proc(temp: Temp_Allocator) { @(deferred_out=TEMP_ALLOCATOR_GUARD_END) TEMP_ALLOCATOR_GUARD :: #force_inline proc(collisions: []runtime.Allocator, loc := #caller_location) -> Temp_Allocator { - assert(len(collisions) <= MAX_TEMP_ARENA_COLLISIONS) + assert(len(collisions) <= MAX_TEMP_ARENA_COLLISIONS, "Maximum collision count exceeded. MAX_TEMP_ARENA_COUNT must be increased!") good_arena: ^runtime.Arena for i in 0.. Date: Thu, 8 May 2025 17:45:29 +1000 Subject: [PATCH 043/120] Fix linux --- core/os/os2/process_linux.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/os/os2/process_linux.odin b/core/os/os2/process_linux.odin index 8dffac08b..170f0ea1a 100644 --- a/core/os/os2/process_linux.odin +++ b/core/os/os2/process_linux.odin @@ -327,7 +327,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator strings.write_int(&path_builder, pid) strings.write_string(&path_builder, "/exe") - if exe_bytes, exe_err := _read_link(strings.to_string(path_builder), temp_allocator()); exe_err == nil { + if exe_bytes, exe_err := _read_link(strings.to_string(path_builder), temp_allocator); exe_err == nil { info.executable_path = strings.clone(string(exe_bytes), allocator) or_return info.fields += {.Executable_Path} } else { From 0ce8373528ef732bab348b8e5b76e07d1447a8dc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 8 May 2025 13:23:22 +0100 Subject: [PATCH 044/120] Formatting Fix --- core/odin/parser/parser.odin | 34 ++++++++++---------- examples/all/all_vendor_windows.odin | 2 ++ vendor/windows/XAudio2/x3daudio.odin | 46 +++++++++++++-------------- vendor/windows/XAudio2/xapo.odin | 14 ++++---- vendor/windows/XAudio2/xapofx.odin | 2 +- vendor/windows/XAudio2/xaudio2.odin | 8 ++--- vendor/windows/XAudio2/xaudio2fx.odin | 6 ++-- 7 files changed, 56 insertions(+), 56 deletions(-) diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index 63c7e388f..7f1f4ca87 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -1276,28 +1276,28 @@ parse_unrolled_for_loop :: proc(p: ^Parser, inline_tok: tokenizer.Token) -> ^ast args = make([dynamic]^ast.Expr) for p.curr_tok.kind != .Close_Paren && p.curr_tok.kind != .EOF { - arg := parse_value(p) + arg := parse_value(p) - if p.curr_tok.kind == .Eq { - eq := expect_token(p, .Eq) - if arg != nil { - if _, ok := arg.derived.(^ast.Ident); !ok { - error(p, arg.pos, "expected an identifier for 'key=value'") - } - } - value := parse_value(p) - fv := ast.new(ast.Field_Value, arg.pos, value) - fv.field = arg - fv.sep = eq.pos - fv.value = value + if p.curr_tok.kind == .Eq { + eq := expect_token(p, .Eq) + if arg != nil { + if _, ok := arg.derived.(^ast.Ident); !ok { + error(p, arg.pos, "expected an identifier for 'key=value'") + } + } + value := parse_value(p) + fv := ast.new(ast.Field_Value, arg.pos, value) + fv.field = arg + fv.sep = eq.pos + fv.value = value - arg = fv - } + arg = fv + } - append(&args, arg) + append(&args, arg) allow_token(p, .Comma) or_break - } + } } p.expr_level -= 1 diff --git a/examples/all/all_vendor_windows.odin b/examples/all/all_vendor_windows.odin index 5087bac07..df6542cdd 100644 --- a/examples/all/all_vendor_windows.odin +++ b/examples/all/all_vendor_windows.odin @@ -3,8 +3,10 @@ package all import wgpu "vendor:wgpu" import b2 "vendor:box2d" import game_input "vendor:windows/GameInput" +import XAudio2 "vendor:windows/XAudio2" _ :: wgpu _ :: b2 _ :: game_input +_ :: XAudio2 diff --git a/vendor/windows/XAudio2/x3daudio.odin b/vendor/windows/XAudio2/x3daudio.odin index ad18f0f45..27c4dc9fa 100644 --- a/vendor/windows/XAudio2/x3daudio.odin +++ b/vendor/windows/XAudio2/x3daudio.odin @@ -1,7 +1,7 @@ #+build windows /* NOTES: - 1. Definition of terms: + 1. Definition of terms: LFE: Low Frequency Effect -- always omnidirectional. LPF: Low Pass Filter, divided into two classifications: Direct -- Applied to the direct signal path, @@ -9,7 +9,7 @@ Reverb -- Applied to the reverb signal path, used for occlusion effects only. - 2. Volume level is expressed as a linear amplitude scaler: + 2. Volume level is expressed as a linear amplitude scaler: 1.0f represents no attenuation applied to the original signal, 0.5f denotes an attenuation of 6dB, and 0.0f results in silence. Amplification (volume > 1.0f) is also allowed, and is not clamped. @@ -17,7 +17,7 @@ LPF values range from 1.0f representing all frequencies pass through, to 0.0f which results in silence as all frequencies are filtered out. - 3. X3DAudio uses a left-handed Cartesian coordinate system with values + 3. X3DAudio uses a left-handed Cartesian coordinate system with values on the x-axis increasing from left to right, on the y-axis from bottom to top, and on the z-axis from near to far. Azimuths are measured clockwise from a given reference direction. @@ -29,7 +29,7 @@ Metric constants are supplied only as a convenience. Distance is calculated using the Euclidean norm formula. - 4. Only real values are permissible with functions using 32-bit + 4. Only real values are permissible with functions using 32-bit float parameters -- NAN and infinite values are not accepted. All computation occurs in 32-bit precision mode. */ @@ -100,7 +100,7 @@ CALCULATE_FLAG :: enum u32 { } //-----------------------------------------------------// -VECTOR :: distinct [3]f32 // float 3D vector +VECTOR :: [3]f32 // float 3D vector // instance handle of precalculated constants HANDLE :: distinct [HANDLE_BYTESIZE]byte @@ -123,22 +123,22 @@ DISTANCE_CURVE_POINT :: struct #packed { // pPoints[k-1].DSPSetting + ((pPoints[k].DSPSetting-pPoints[k-1].DSPSetting) / (pPoints[k].Distance-pPoints[k-1].Distance)) * (pPoints[k].Distance-pPoints[k-1].Distance) != NAN or infinite values // For all points in the distance curve where 1 <= k < PointCount. DISTANCE_CURVE :: struct #packed { - pPoints: [^]DISTANCE_CURVE_POINT, // distance curve point array, must have at least PointCount elements with no duplicates and be sorted in ascending order with respect to Distance - PointCount: u32, // number of distance curve points, must be >= 2 as all distance curves must have at least two endpoints, defining DSP settings at 0.0f and 1.0f normalized distance + pPoints: [^]DISTANCE_CURVE_POINT `fmt:"v,PointCount"`, // distance curve point array, must have at least PointCount elements with no duplicates and be sorted in ascending order with respect to Distance + PointCount: u32, // number of distance curve points, must be >= 2 as all distance curves must have at least two endpoints, defining DSP settings at 0.0f and 1.0f normalized distance } Default_LinearCurvePoints := [2]DISTANCE_CURVE_POINT{{0.0, 1.0}, {1.0, 0.0}} Default_LinearCurve := DISTANCE_CURVE{&Default_LinearCurvePoints[0], 2} CONE :: struct #packed { - InnerAngle: f32, // inner cone angle in radians, must be within [0.0f, TAU] - OuterAngle: f32, // outer cone angle in radians, must be within [InnerAngle, TAU] + InnerAngle: f32, // inner cone angle in radians, must be within [0.0f, TAU] + OuterAngle: f32, // outer cone angle in radians, must be within [InnerAngle, TAU] - InnerVolume: f32, // volume level scaler on/within inner cone, used only for matrix calculations, must be within [0.0f, 2.0f] when used - OuterVolume: f32, // volume level scaler on/beyond outer cone, used only for matrix calculations, must be within [0.0f, 2.0f] when used - InnerLPF: f32, // LPF (both direct and reverb paths) coefficient subtrahend on/within inner cone, used only for LPF (both direct and reverb paths) calculations, must be within [0.0f, 1.0f] when used - OuterLPF: f32, // LPF (both direct and reverb paths) coefficient subtrahend on/beyond outer cone, used only for LPF (both direct and reverb paths) calculations, must be within [0.0f, 1.0f] when used - InnerReverb: f32, // reverb send level scaler on/within inner cone, used only for reverb calculations, must be within [0.0f, 2.0f] when used - OuterReverb: f32, // reverb send level scaler on/beyond outer cone, used only for reverb calculations, must be within [0.0f, 2.0f] when used + InnerVolume: f32, // volume level scaler on/within inner cone, used only for matrix calculations, must be within [0.0f, 2.0f] when used + OuterVolume: f32, // volume level scaler on/beyond outer cone, used only for matrix calculations, must be within [0.0f, 2.0f] when used + InnerLPF: f32, // LPF (both direct and reverb paths) coefficient subtrahend on/within inner cone, used only for LPF (both direct and reverb paths) calculations, must be within [0.0f, 1.0f] when used + OuterLPF: f32, // LPF (both direct and reverb paths) coefficient subtrahend on/beyond outer cone, used only for LPF (both direct and reverb paths) calculations, must be within [0.0f, 1.0f] when used + InnerReverb: f32, // reverb send level scaler on/within inner cone, used only for reverb calculations, must be within [0.0f, 2.0f] when used + OuterReverb: f32, // reverb send level scaler on/beyond outer cone, used only for reverb calculations, must be within [0.0f, 2.0f] when used } Default_DirectionalCone := CONE{math.PI / 2, math.PI, 1.0, 0.708, 0.0, 0.25, 0.708, 1.0} @@ -147,13 +147,13 @@ Default_DirectionalCone := CONE{math.PI / 2, math.PI, 1.0, 0.708, 0.0, 0.25, 0.7 // // The cone is directed by the listener's front orientation. LISTENER :: struct #packed { - OrientFront: VECTOR, // orientation of front direction, used only for matrix and delay calculations or listeners with cones for matrix, LPF (both direct and reverb paths), and reverb calculations, must be normalized when used - OrientTop: VECTOR, // orientation of top direction, used only for matrix and delay calculations, must be orthonormal with OrientFront when used + OrientFront: VECTOR, // orientation of front direction, used only for matrix and delay calculations or listeners with cones for matrix, LPF (both direct and reverb paths), and reverb calculations, must be normalized when used + OrientTop: VECTOR, // orientation of top direction, used only for matrix and delay calculations, must be orthonormal with OrientFront when used - Position: VECTOR, // position in user-defined world units, does not affect Velocity - Velocity: VECTOR, // velocity vector in user-defined world units/second, used only for doppler calculations, does not affect Position + Position: VECTOR, // position in user-defined world units, does not affect Velocity + Velocity: VECTOR, // velocity vector in user-defined world units/second, used only for doppler calculations, does not affect Position - pCone: ^CONE, // sound cone, used only for matrix, LPF (both direct and reverb paths), and reverb calculations, NULL specifies omnidirectionality + pCone: ^CONE, // sound cone, used only for matrix, LPF (both direct and reverb paths), and reverb calculations, NULL specifies omnidirectionality } // Emitter: @@ -187,9 +187,9 @@ EMITTER :: struct #packed { InnerRadius: f32, // inner radius, must be within [0.0f, max(f32)] InnerRadiusAngle: f32, // inner radius angle, must be within [0.0f, PI/4.0) - ChannelCount: u32, // number of sound channels, must be > 0 - ChannelRadius: f32, // channel radius, used only with multi-channel emitters for matrix calculations, must be >= 0.0f when used - pChannelAzimuths: [^]f32, // channel azimuth array, used only with multi-channel emitters for matrix calculations, contains positions of each channel expressed in radians along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector, or TAU to specify an LFE channel, must have at least ChannelCount elements, all within [0.0f, TAU] when used + ChannelCount: u32, // number of sound channels, must be > 0 + ChannelRadius: f32, // channel radius, used only with multi-channel emitters for matrix calculations, must be >= 0.0f when used + pChannelAzimuths: [^]f32 `fmt:"v,ChannelCount"`, // channel azimuth array, used only with multi-channel emitters for matrix calculations, contains positions of each channel expressed in radians along the channel radius with respect to the front orientation vector in the plane orthogonal to the top orientation vector, or TAU to specify an LFE channel, must have at least ChannelCount elements, all within [0.0f, TAU] when used pVolumeCurve: ^DISTANCE_CURVE, // volume level distance curve, used only for matrix calculations, NULL specifies a default curve that conforms to the inverse square law, calculated in user-defined world units with distances <= CurveDistanceScaler clamped to no attenuation pLFECurve: ^DISTANCE_CURVE, // LFE level distance curve, used only for matrix calculations, NULL specifies a default curve that conforms to the inverse square law, calculated in user-defined world units with distances <= CurveDistanceScaler clamped to no attenuation diff --git a/vendor/windows/XAudio2/xapo.odin b/vendor/windows/XAudio2/xapo.odin index 21132100c..54fb420ca 100644 --- a/vendor/windows/XAudio2/xapo.odin +++ b/vendor/windows/XAudio2/xapo.odin @@ -1,7 +1,7 @@ #+build windows /* NOTES: - 1. Definition of terms: + 1. Definition of terms: DSP: Digital Signal Processing. CBR: Constant BitRate -- DSP that consumes a constant number of @@ -27,7 +27,7 @@ However, an XAPO may not perform format conversion when processing in-place. - 2. XAPO member variables are divided into three classifications: + 2. XAPO member variables are divided into three classifications: Immutable: Set once via IXAPO.Initialize and remain constant during the lifespan of the XAPO. @@ -48,27 +48,27 @@ That is, one should strive to minimize XAPO state changes for best performance, maintainability, and ease of use. - 3. To minimize glitches, the realtime audio processing thread must + 3. To minimize glitches, the realtime audio processing thread must not block. XAPO methods called by the realtime thread are commented as non-blocking and therefore should not use blocking synchronization, allocate memory, access the disk, etc. The XAPO interfaces were designed to allow an effect implementer to move such operations into other methods called on an application controlled thread. - 4. Extending functionality is accomplished through the addition of new + 4. Extending functionality is accomplished through the addition of new COM interfaces. For example, if a new member is added to a parameter structure, a new interface using the new structure should be added, leaving the original interface unchanged. This ensures consistent communication between future versions of XAudio2 and various versions of XAPOs that may exist in an application. - 5. All audio data is interleaved in XAudio2. + 5. All audio data is interleaved in XAudio2. The default audio format for an effect chain is WAVE_FORMAT_IEEE_FLOAT. - 6. User-defined XAPOs should assume all input and output buffers are + 6. User-defined XAPOs should assume all input and output buffers are 16-byte aligned. - 7. See XAPOBase.odin for an XAPO base class which provides a default + 7. See XAPOBase.odin for an XAPO base class which provides a default implementation for most of the interface methods defined below. */ package windows_xaudio2 diff --git a/vendor/windows/XAudio2/xapofx.odin b/vendor/windows/XAudio2/xapofx.odin index 6e6a9afd4..5c4c8c7ec 100644 --- a/vendor/windows/XAudio2/xapofx.odin +++ b/vendor/windows/XAudio2/xapofx.odin @@ -110,7 +110,7 @@ FXMASTERINGLIMITER_PARAMETERS :: struct #packed { FXREVERB_PARAMETERS :: struct #packed { Diffusion: f32, // diffusion RoomSize: f32, // room size -}; +} // Echo initialization data, used with CreateFX: diff --git a/vendor/windows/XAudio2/xaudio2.odin b/vendor/windows/XAudio2/xaudio2.odin index 2cf5e4214..178463b64 100644 --- a/vendor/windows/XAudio2/xaudio2.odin +++ b/vendor/windows/XAudio2/xaudio2.odin @@ -11,12 +11,10 @@ package windows_xaudio2 import win "core:sys/windows" import "core:math" -foreign import xa2 "system:xaudio2.lib" - -HRESULT :: win.HRESULT -IUnknown :: win.IUnknown +HRESULT :: win.HRESULT +IUnknown :: win.IUnknown IUnknown_VTable :: win.IUnknown_VTable -WAVEFORMATEX :: win.WAVEFORMATEX +WAVEFORMATEX :: win.WAVEFORMATEX /************************************************************************** * diff --git a/vendor/windows/XAudio2/xaudio2fx.odin b/vendor/windows/XAudio2/xaudio2fx.odin index 1f7c91f50..94793e16e 100644 --- a/vendor/windows/XAudio2/xaudio2fx.odin +++ b/vendor/windows/XAudio2/xaudio2fx.odin @@ -32,9 +32,9 @@ foreign xa2 { // The user is responsible for allocating pPeakLevels, pRMSLevels, and initializing ChannelCount accordingly. // The volume meter does not support SetEffectParameters(). VOLUMEMETER_LEVELS :: struct #packed { - pPeakLevels: [^]f32, // Peak levels table: receives maximum absolute level for each channel over a processing pass, may be NULL if pRMSLevls != NULL, otherwise must have at least ChannelCount elements. - pRMSLevels: [^]f32, // Root mean square levels table: receives RMS level for each channel over a processing pass, may be NULL if pPeakLevels != NULL, otherwise must have at least ChannelCount elements. - ChannelCount: u32, // Number of channels being processed by the volume meter APO + pPeakLevels: [^]f32 `fmt:"v,ChannelCount"`, // Peak levels table: receives maximum absolute level for each channel over a processing pass, may be NULL if pRMSLevls != NULL, otherwise must have at least ChannelCount elements. + pRMSLevels: [^]f32 `fmt:"v,ChannelCount"`, // Root mean square levels table: receives RMS level for each channel over a processing pass, may be NULL if pPeakLevels != NULL, otherwise must have at least ChannelCount elements. + ChannelCount: u32, // Number of channels being processed by the volume meter APO } /************************************************************************** From 204c6f514ad174258c3fca7d18ef01bc05dde0bf Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 8 May 2025 14:03:17 +0100 Subject: [PATCH 045/120] Remove use of `do` --- vendor/windows/XAudio2/xaudio2fx.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/windows/XAudio2/xaudio2fx.odin b/vendor/windows/XAudio2/xaudio2fx.odin index 94793e16e..1449ed4ea 100644 --- a/vendor/windows/XAudio2/xaudio2fx.odin +++ b/vendor/windows/XAudio2/xaudio2fx.odin @@ -244,13 +244,13 @@ ReverbConvertI3DL2ToNative :: proc "contextless" (pI3DL2: ^REVERB_I3DL2_PARAMETE if pI3DL2.DecayHFRatio >= 1.0 { index := i32(-4.0 * math.log10_f32(pI3DL2.DecayHFRatio)) - if index < -8 do index = -8 + if index < -8 { index = -8 } pNative.LowEQGain = byte((index < 0) ? index + 8 : 8) pNative.HighEQGain = 8 pNative.DecayTime = pI3DL2.DecayTime * pI3DL2.DecayHFRatio } else { index := i32(4.0 * math.log10_f32(pI3DL2.DecayHFRatio)) - if index < -8 do index = -8 + if index < -8 { index = -8 } pNative.LowEQGain = 8 pNative.HighEQGain = byte((index < 0) ? index + 8 : 8) pNative.DecayTime = pI3DL2.DecayTime From cacb9f9f540b7ffa93d7fd0d0e1b4667be42480f Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sat, 3 May 2025 13:29:37 +0200 Subject: [PATCH 046/120] os2: better copy_directory, and add native copy_file and copy_directory variants on MacOS --- core/os/os2/dir.odin | 53 +++++++++++---- core/os/os2/dir_posix_darwin.odin | 17 +++++ core/os/os2/file.odin | 9 +++ core/os/os2/file_posix_darwin.odin | 28 ++++++++ core/sys/darwin/copyfile.odin | 67 +++++++++++++++++++ core/sys/darwin/darwin.odin | 1 + core/sys/darwin/sync.odin | 2 - core/sys/darwin/xnu_system_call_wrappers.odin | 10 --- 8 files changed, 162 insertions(+), 25 deletions(-) create mode 100644 core/os/os2/dir_posix_darwin.odin create mode 100644 core/sys/darwin/copyfile.odin diff --git a/core/os/os2/dir.odin b/core/os/os2/dir.odin index a33e8a8d9..10b06a8ce 100644 --- a/core/os/os2/dir.odin +++ b/core/os/os2/dir.odin @@ -2,6 +2,7 @@ package os2 import "base:runtime" import "core:slice" +import "core:strings" read_dir :: read_directory @@ -194,28 +195,54 @@ read_directory_iterator :: proc(it: ^Read_Directory_Iterator) -> (fi: File_Info, } // Recursively copies a directory to `dst` from `src` -copy_directory :: proc(dst, src: string, dst_perm := 0o755) -> Error { - switch err := make_directory_all(dst, dst_perm); err { - case nil, .Exist: - // okay - case: +copy_directory_all :: proc(dst, src: string, dst_perm := 0o755) -> Error { + when #defined(_copy_directory_all_native) { + return _copy_directory_all_native(dst, src, dst_perm) + } else { + return _copy_directory_all(dst, src, dst_perm) + } +} + +@(private) +_copy_directory_all :: proc(dst, src: string, dst_perm := 0o755) -> Error { + err := make_directory(dst, dst_perm) + if err != nil && err != .Exist { return err } temp_allocator := TEMP_ALLOCATOR_GUARD({}) - file_infos := read_all_directory_by_path(src, temp_allocator) or_return - for fi in file_infos { - temp_allocator_scope(temp_allocator) + abs_src := get_absolute_path(src, temp_allocator) or_return + abs_dst := get_absolute_path(dst, temp_allocator) or_return - dst_path := join_path({dst, fi.name}, temp_allocator) or_return - src_path := fi.fullpath + dst_buf := make([dynamic]byte, 0, len(abs_dst) + 256, temp_allocator) or_return - if fi.type == .Directory { - copy_directory(dst_path, src_path) or_return + w: Walker + walker_init_path(&w, src) + defer walker_destroy(&w) + + for info in walker_walk(&w) { + _ = walker_error(&w) or_break + + rel := strings.trim_prefix(info.fullpath, abs_src) + + non_zero_resize(&dst_buf, 0) + reserve(&dst_buf, len(abs_dst) + len(Path_Separator_String) + len(rel)) or_return + append(&dst_buf, abs_dst) + append(&dst_buf, Path_Separator_String) + append(&dst_buf, rel) + + if info.type == .Directory { + err = make_directory(string(dst_buf[:]), dst_perm) + if err != nil && err != .Exist { + return err + } } else { - copy_file(dst_path, src_path) or_return + copy_file(string(dst_buf[:]), info.fullpath) or_return } } + + _ = walker_error(&w) or_return + return nil } diff --git a/core/os/os2/dir_posix_darwin.odin b/core/os/os2/dir_posix_darwin.odin new file mode 100644 index 000000000..3cae50d25 --- /dev/null +++ b/core/os/os2/dir_posix_darwin.odin @@ -0,0 +1,17 @@ +#+private +package os2 + +import "core:sys/darwin" + +_copy_directory_all_native :: proc(dst, src: string, dst_perm := 0o755) -> (err: Error) { + temp_allocator := TEMP_ALLOCATOR_GUARD({}) + + csrc := clone_to_cstring(src, temp_allocator) or_return + cdst := clone_to_cstring(dst, temp_allocator) or_return + + if darwin.copyfile(csrc, cdst, nil, darwin.COPYFILE_ALL + {.RECURSIVE}) < 0 { + err = _get_platform_error() + } + + return +} diff --git a/core/os/os2/file.odin b/core/os/os2/file.odin index ff214182e..a9878a563 100644 --- a/core/os/os2/file.odin +++ b/core/os/os2/file.odin @@ -313,6 +313,15 @@ is_directory :: proc(path: string) -> bool { copy_file :: proc(dst_path, src_path: string) -> Error { + when #defined(_copy_file_native) { + return _copy_file_native(dst_path, src_path) + } else { + return _copy_file(dst_path, src_path) + } +} + +@(private) +_copy_file :: proc(dst_path, src_path: string) -> Error { src := open(src_path) or_return defer close(src) diff --git a/core/os/os2/file_posix_darwin.odin b/core/os/os2/file_posix_darwin.odin index 920a63a71..aed3e56f5 100644 --- a/core/os/os2/file_posix_darwin.odin +++ b/core/os/os2/file_posix_darwin.odin @@ -3,6 +3,7 @@ package os2 import "base:runtime" +import "core:sys/darwin" import "core:sys/posix" _posix_absolute_path :: proc(fd: posix.FD, name: string, allocator: runtime.Allocator) -> (path: cstring, err: Error) { @@ -16,3 +17,30 @@ _posix_absolute_path :: proc(fd: posix.FD, name: string, allocator: runtime.Allo return clone_to_cstring(string(cstring(&buf[0])), allocator) } + +_copy_file_native :: proc(dst_path, src_path: string) -> (err: Error) { + temp_allocator := TEMP_ALLOCATOR_GUARD({}) + + csrc := clone_to_cstring(src_path, temp_allocator) or_return + cdst := clone_to_cstring(dst_path, temp_allocator) or_return + + // Disallow directories, as specified by the generic implementation. + + stat: posix.stat_t + if posix.stat(csrc, &stat) != .OK { + err = _get_platform_error() + return + } + + if posix.S_ISDIR(stat.st_mode) { + err = .Invalid_File + return + } + + ret := darwin.copyfile(csrc, cdst, nil, darwin.COPYFILE_ALL) + if ret < 0 { + err = _get_platform_error() + } + + return +} diff --git a/core/sys/darwin/copyfile.odin b/core/sys/darwin/copyfile.odin new file mode 100644 index 000000000..6c58b8067 --- /dev/null +++ b/core/sys/darwin/copyfile.odin @@ -0,0 +1,67 @@ +package darwin + +import "core:sys/posix" + +copyfile_state_t :: distinct rawptr + +copyfile_flags :: bit_set[enum { + ACL, + STAT, + XATTR, + DATA, + + RECURSIVE = 15, + + CHECK, + EXCL, + NOFOLLOW_SRC, + NOFOLLOW_DST, + MOVE, + UNLINK, + PACK, + UNPACK, + + CLONE, + CLONE_FORCE, + RUN_IN_PLACE, + DATA_SPARSE, + PRESERVE_DST_TRACKED, + VERBOSE = 30, +}; u32] + +COPYFILE_SECURITY :: copyfile_flags{.STAT, .ACL} +COPYFILE_METADATA :: COPYFILE_SECURITY + copyfile_flags{.XATTR} +COPYFILE_ALL :: COPYFILE_METADATA + copyfile_flags{.DATA} + +COPYFILE_NOFOLLOW :: copyfile_flags{.NOFOLLOW_SRC, .NOFOLLOW_DST} + +copyfile_state_flag :: enum u32 { + SRC_FD = 1, + SRC_FILENAME, + DST_FD, + DST_FILENAME, + QUARANTINE, + STATUS_CB, + STATUS_CTX, + COPIED, + XATTRNAME, + WAS_CLONED, + SRC_BSIZE, + DST_BSIZE, + BSIZE, + FORBID_CROSS_MOUNT, + NOCPROTECT, + PRESERVE_SUID, + RECURSIVE_SRC_FTSENT, + FORBID_DST_EXISTING_SYMLINKS, +} + +foreign system { + copyfile :: proc(from, to: cstring, state: copyfile_state_t, flags: copyfile_flags) -> i32 --- + fcopyfile :: proc(from, to: posix.FD, state: copyfile_state_t, flags: copyfile_flags) -> i32 --- + + copyfile_state_alloc :: proc() -> copyfile_state_t --- + copyfile_state_free :: proc(state: copyfile_state_t) -> posix.result --- + copyfile_state_get :: proc(state: copyfile_state_t, flag: copyfile_state_flag, dst: rawptr) -> posix.result --- + copyfile_state_set :: proc(state: copyfile_state_t, flag: copyfile_state_flag, src: rawptr) -> posix.result --- +} diff --git a/core/sys/darwin/darwin.odin b/core/sys/darwin/darwin.odin index d109f5544..96cfc7be6 100644 --- a/core/sys/darwin/darwin.odin +++ b/core/sys/darwin/darwin.odin @@ -3,6 +3,7 @@ package darwin import "core:c" +@(export) foreign import system "system:System.framework" Bool :: b8 diff --git a/core/sys/darwin/sync.odin b/core/sys/darwin/sync.odin index 58fc7c9e4..6d68dc8f8 100644 --- a/core/sys/darwin/sync.odin +++ b/core/sys/darwin/sync.odin @@ -1,7 +1,5 @@ package darwin -foreign import system "system:System.framework" - // #define OS_WAIT_ON_ADDR_AVAILABILITY \ // __API_AVAILABLE(macos(14.4), ios(17.4), tvos(17.4), watchos(10.4)) when ODIN_OS == .Darwin { diff --git a/core/sys/darwin/xnu_system_call_wrappers.odin b/core/sys/darwin/xnu_system_call_wrappers.odin index 1188091a9..6376949f4 100644 --- a/core/sys/darwin/xnu_system_call_wrappers.odin +++ b/core/sys/darwin/xnu_system_call_wrappers.odin @@ -19,16 +19,6 @@ X_OK :: c.int((1 << 0)) /* test for execute or search permission */ W_OK :: c.int((1 << 1)) /* test for write permission */ R_OK :: c.int((1 << 2)) /* test for read permission */ -/* copyfile flags */ -COPYFILE_ACL :: (1 << 0) -COPYFILE_STAT :: (1 << 1) -COPYFILE_XATTR :: (1 << 2) -COPYFILE_DATA :: (1 << 3) - -COPYFILE_SECURITY :: (COPYFILE_STAT | COPYFILE_ACL) -COPYFILE_METADATA :: (COPYFILE_SECURITY | COPYFILE_XATTR) -COPYFILE_ALL :: (COPYFILE_METADATA | COPYFILE_DATA) - /* syslimits.h */ PATH_MAX :: 1024 /* max bytes in pathname */ From 11d2a9c8673336c32f747b2d83c7cf358b925ce4 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Fri, 9 May 2025 14:46:57 +1000 Subject: [PATCH 047/120] Enable asan for windows and ubuntu CI tests Other platforms either do not support asan at all or they fail to link with the asan runtime. --- .github/workflows/ci.yml | 116 ++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 43 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a1d18231..2f03eb359 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,20 +75,13 @@ jobs: fail-fast: false matrix: # MacOS 13 runs on Intel, 14 runs on ARM - os: [ubuntu-latest, macos-13, macos-14] + os: [macos-13, macos-14] runs-on: ${{ matrix.os }} - name: ${{ matrix.os == 'macos-14' && 'MacOS ARM' || (matrix.os == 'macos-13' && 'MacOS Intel' || 'Ubuntu') }} Build, Check, and Test + name: ${{ matrix.os == 'macos-14' && 'MacOS ARM' || (matrix.os == 'macos-13' && 'MacOS Intel') }} Build, Check, and Test timeout-minutes: 15 steps: - - uses: actions/checkout@v4 - - name: Download LLVM (Linux) - if: matrix.os == 'ubuntu-latest' - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 20 - echo "/usr/lib/llvm-20/bin" >> $GITHUB_PATH + - uses: actions/checkout@v4 - name: Download LLVM (MacOS Intel) if: matrix.os == 'macos-13' @@ -136,41 +129,78 @@ jobs: cd tests/issues ./run.sh - - name: Check benchmarks - run: ./odin check tests/benchmark -vet -strict-style -no-entry-point - - name: Odin check examples/all for Linux i386 - run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_i386 - if: matrix.os == 'ubuntu-latest' - - name: Odin check examples/all for Linux arm64 - run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_arm64 - if: matrix.os == 'ubuntu-latest' - - name: Odin check examples/all for FreeBSD amd64 - run: ./odin check examples/all -vet -strict-style -disallow-do -target:freebsd_amd64 - if: matrix.os == 'ubuntu-latest' - - name: Odin check examples/all for OpenBSD amd64 - run: ./odin check examples/all -vet -strict-style -disallow-do -target:openbsd_amd64 - if: matrix.os == 'ubuntu-latest' - - - name: Odin check vendor/sdl3 for Linux i386 - run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:linux_i386 - if: matrix.os == 'ubuntu-latest' - - name: Odin check vendor/sdl3 for Linux arm64 - run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:linux_arm64 - if: matrix.os == 'ubuntu-latest' - - name: Odin check vendor/sdl3 for FreeBSD amd64 - run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:freebsd_amd64 - if: matrix.os == 'ubuntu-latest' - - name: Odin check vendor/sdl3 for OpenBSD amd64 - run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:openbsd_amd64 - if: matrix.os == 'ubuntu-latest' - - - name: Run demo on WASI WASM32 run: | ./odin build examples/demo -target:wasi_wasm32 -vet -strict-style -disallow-do -out:demo wasmtime ./demo.wasm if: matrix.os == 'macos-14' + build_ubuntu: + name: Ubuntu Build, Check, and Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Download LLVM + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 20 + echo "/usr/lib/llvm-20/bin" >> $GITHUB_PATH + + - name: Build Odin + run: ./build_odin.sh release + - name: Odin version + run: ./odin version + - name: Odin report + run: ./odin report + - name: Compile needed Vendor + run: | + make -C vendor/stb/src + make -C vendor/cgltf/src + make -C vendor/miniaudio/src + - name: Odin check + run: ./odin check examples/demo -vet + - name: Odin run + run: ./odin run examples/demo + - name: Odin run -debug + run: ./odin run examples/demo -debug + - name: Odin check examples/all + run: ./odin check examples/all -strict-style -vet -disallow-do + - name: Odin check vendor/sdl3 + run: ./odin check vendor/sdl3 -strict-style -vet -disallow-do -no-entry-point + - name: Normal Core library tests + run: ./odin test tests/core/normal.odin -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address + - name: Optimized Core library tests + run: ./odin test tests/core/speed.odin -o:speed -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address + - name: Vendor library tests + run: ./odin test tests/vendor -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address + - name: Internals tests + run: ./odin test tests/internal -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true + - name: GitHub Issue tests + run: | + cd tests/issues + ./run.sh + + - name: Check benchmarks + run: ./odin check tests/benchmark -vet -strict-style -no-entry-point + - name: Odin check examples/all for Linux i386 + run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_i386 + - name: Odin check examples/all for Linux arm64 + run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_arm64 + - name: Odin check examples/all for FreeBSD amd64 + run: ./odin check examples/all -vet -strict-style -disallow-do -target:freebsd_amd64 + - name: Odin check examples/all for OpenBSD amd64 + run: ./odin check examples/all -vet -strict-style -disallow-do -target:openbsd_amd64 + + - name: Odin check vendor/sdl3 for Linux i386 + run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:linux_i386 + - name: Odin check vendor/sdl3 for Linux arm64 + run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:linux_arm64 + - name: Odin check vendor/sdl3 for FreeBSD amd64 + run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:freebsd_amd64 + - name: Odin check vendor/sdl3 for OpenBSD amd64 + run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:openbsd_amd64 + build_windows: name: Windows Build, Check, and Test runs-on: windows-2022 @@ -215,23 +245,23 @@ jobs: shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat - odin test tests/core/normal.odin -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true + odin test tests/core/normal.odin -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address - name: Optimized core library tests shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat - odin test tests/core/speed.odin -o:speed -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true + odin test tests/core/speed.odin -o:speed -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address - name: Vendor library tests shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat copy vendor\lua\5.4\windows\*.dll . - odin test tests/vendor -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true + odin test tests/vendor -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address - name: Odin internals tests shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat - odin test tests/internal -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true + odin test tests/internal -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address - name: Check issues shell: cmd run: | From 8a225a6887958bcf23a603efa322a4f15bd96052 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 9 May 2025 11:07:53 +0100 Subject: [PATCH 048/120] Place RTTI into its own section `.odin-rtti` --- src/llvm_backend.cpp | 1 + src/llvm_backend_type.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 1be652107..7de147058 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -3122,6 +3122,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { LLVMSetInitializer(g, LLVMConstNull(lb_type(m, t))); LLVMSetLinkage(g, LLVMInternalLinkage); lb_make_global_private_const(g); + lb_set_odin_rtti_section(g); return lb_addr({g, alloc_type_pointer(t)}); }; diff --git a/src/llvm_backend_type.cpp b/src/llvm_backend_type.cpp index ad4250f3c..2aed4cbf7 100644 --- a/src/llvm_backend_type.cpp +++ b/src/llvm_backend_type.cpp @@ -1,4 +1,10 @@ +gb_internal void lb_set_odin_rtti_section(LLVMValueRef value) { + if (build_context.metrics.os != TargetOs_darwin) { + LLVMSetSection(value, ".odin-rtti"); + } +} + gb_internal isize lb_type_info_index(CheckerInfo *info, TypeInfoPair pair, bool err_on_not_found=true) { isize index = type_info_index(info, pair, err_on_not_found); if (index >= 0) { @@ -221,6 +227,7 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ gb_snprintf(name, 63, "__$ti-%lld", cast(long long)index); LLVMValueRef g = LLVMAddGlobal(m->mod, type, name); lb_make_global_private_const(g); + lb_set_odin_rtti_section(g); return g; }; @@ -716,6 +723,8 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ LLVMSetInitializer(value_array.value, value_init); LLVMSetGlobalConstant(name_array.value, true); LLVMSetGlobalConstant(value_array.value, true); + lb_set_odin_rtti_section(name_array.value); + lb_set_odin_rtti_section(value_array.value); lbValue v_count = lb_const_int(m, t_int, fields.count); @@ -1056,6 +1065,7 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ LLVMValueRef giant_array = lb_global_type_info_data_ptr(m).value; LLVMSetInitializer(giant_array, giant_const); lb_make_global_private_const(giant_array); + lb_set_odin_rtti_section(giant_array); } From 3adade26394c8be360ac0b6e964d4d0ee4e0cc02 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Fri, 9 May 2025 19:42:54 +0200 Subject: [PATCH 049/120] Add .rdi RadDbg files to .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 32e5f5b0f..254731c96 100644 --- a/.gitignore +++ b/.gitignore @@ -293,5 +293,5 @@ build.sh # RAD debugger project file *.raddbg - +*.rdi misc/featuregen/featuregen From e3fe733a555831342c54efdda36203132f2e8132 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Fri, 9 May 2025 19:45:46 +0200 Subject: [PATCH 050/120] Fix #5139 --- vendor/x11/xlib/xlib_procs.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/x11/xlib/xlib_procs.odin b/vendor/x11/xlib/xlib_procs.odin index 2a8d6832b..2cd4e0f83 100644 --- a/vendor/x11/xlib/xlib_procs.odin +++ b/vendor/x11/xlib/xlib_procs.odin @@ -234,7 +234,7 @@ foreign xlib { display: ^Display, window: Window, attr_mask: WindowAttributeMask, - attr: XWindowAttributes, + attr: ^XWindowAttributes, ) --- SetWindowBackground :: proc( display: ^Display, From 4d08b7637279c49cb56106a1247e7dfc09265fb2 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Fri, 9 May 2025 22:26:49 +0200 Subject: [PATCH 051/120] require the __asan_unpoison_memory_region runtime symbol so empty projects with asan enabled build --- base/runtime/internal.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/base/runtime/internal.odin b/base/runtime/internal.odin index bff5b8380..38b7f662c 100644 --- a/base/runtime/internal.odin +++ b/base/runtime/internal.odin @@ -1109,6 +1109,7 @@ __read_bits :: proc "contextless" (dst, src: [^]byte, offset: uintptr, size: uin when .Address in ODIN_SANITIZER_FLAGS { foreign { + @(require) __asan_unpoison_memory_region :: proc "system" (address: rawptr, size: uint) --- } } From f9b9e9e7dcbb605bc64bc5af1331855375f58494 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Fri, 9 May 2025 22:27:35 +0200 Subject: [PATCH 052/120] some ABI fixups and improvements Started with trying to enable asan in the CI for MacOS, noticed it wasn't enabled on the `tests/internal` folder, it came up with a couple of issues with the abi/OdinLLVMBuildTransmute that this also solves. - Looking at clang output for arm64, we should be promoting `{ i64, i32 }` to `{ i64, i64 }` - after doing the previous point, I noticed this is not handled well in OdinLLVMBuildTransmute which was emitting loads and stores into the space of a value that was alignment, asan does not want this, looking at clang output again, a memcpy is the appropriate way of handling this. - Having done this we don't need the hacky "return is packed" set anymore in the amd64 sysv ABI anymore either --- src/llvm_abi.cpp | 42 +++++++++----------------- src/llvm_backend_general.cpp | 58 ++++++++++++++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 31 deletions(-) diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp index c8e1ca764..baad3f873 100644 --- a/src/llvm_abi.cpp +++ b/src/llvm_abi.cpp @@ -977,7 +977,7 @@ namespace lbAbiAmd64SysV { return types[0]; } - return LLVMStructTypeInContext(c, types.data, cast(unsigned)types.count, sz == 0); + return LLVMStructTypeInContext(c, types.data, cast(unsigned)types.count, false); } gb_internal void classify_with(LLVMTypeRef t, Array *cls, i64 ix, i64 off) { @@ -1231,38 +1231,24 @@ namespace lbAbiArm64 { } } else { i64 size = lb_sizeof(return_type); - if (size <= 16) { - LLVMTypeRef cast_type = nullptr; - - if (size == 0) { - cast_type = LLVMStructTypeInContext(c, nullptr, 0, false); - } else if (size <= 8) { - cast_type = LLVMIntTypeInContext(c, cast(unsigned)(size*8)); - } else { - unsigned count = cast(unsigned)((size+7)/8); - - LLVMTypeRef llvm_i64 = LLVMIntTypeInContext(c, 64); - LLVMTypeRef *types = gb_alloc_array(temporary_allocator(), LLVMTypeRef, count); - - i64 size_copy = size; - for (unsigned i = 0; i < count; i++) { - if (size_copy >= 8) { - types[i] = llvm_i64; - } else { - types[i] = LLVMIntTypeInContext(c, 8*cast(unsigned)size_copy); - } - size_copy -= 8; - } - GB_ASSERT(size_copy <= 0); - cast_type = LLVMStructTypeInContext(c, types, count, true); - } - return lb_arg_type_direct(return_type, cast_type, nullptr, nullptr); - } else { + if (size > 16) { LB_ABI_MODIFY_RETURN_IF_TUPLE_MACRO(); LLVMAttributeRef attr = lb_create_enum_attribute_with_type(c, "sret", return_type); return lb_arg_type_indirect(return_type, attr); } + + GB_ASSERT(size <= 16); + LLVMTypeRef cast_type = nullptr; + if (size == 0) { + cast_type = LLVMStructTypeInContext(c, nullptr, 0, false); + } else if (size <= 8) { + cast_type = LLVMIntTypeInContext(c, cast(unsigned)(size*8)); + } else { + LLVMTypeRef llvm_i64 = LLVMIntTypeInContext(c, 64); + cast_type = LLVMArrayType2(llvm_i64, 2); + } + return lb_arg_type_direct(return_type, cast_type, nullptr, nullptr); } } diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index c52551b36..504c8234e 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -2525,10 +2525,13 @@ general_end:; } } - src_size = align_formula(src_size, src_align); - dst_size = align_formula(dst_size, dst_align); + // NOTE(laytan): even though this logic seems sound, the Address Sanitizer does not + // want you to load/store the space of a value that is there for alignment. +#if 0 + i64 aligned_src_size = align_formula(src_size, src_align); + i64 aligned_dst_size = align_formula(dst_size, dst_align); - if (LLVMIsALoadInst(val) && (src_size >= dst_size && src_align >= dst_align)) { + if (LLVMIsALoadInst(val) && (aligned_src_size >= aligned_dst_size && src_align >= dst_align)) { LLVMValueRef val_ptr = LLVMGetOperand(val, 0); val_ptr = LLVMBuildPointerCast(p->builder, val_ptr, LLVMPointerType(dst_type, 0), ""); LLVMValueRef loaded_val = OdinLLVMBuildLoad(p, dst_type, val_ptr); @@ -2536,8 +2539,57 @@ general_end:; // LLVMSetAlignment(loaded_val, gb_min(src_align, dst_align)); return loaded_val; + } +#endif + + if (src_size > dst_size) { + GB_ASSERT(p->decl_block != p->curr_block); + // NOTE(laytan): src is bigger than dst, need to memcpy the part of src we want. + + LLVMValueRef val_ptr; + if (LLVMIsALoadInst(val)) { + val_ptr = LLVMGetOperand(val, 0); + } else if (LLVMIsAAllocaInst(val)) { + val_ptr = LLVMBuildPointerCast(p->builder, val, LLVMPointerType(src_type, 0), ""); + } else { + // NOTE(laytan): we need a pointer to memcpy from. + LLVMValueRef val_copy = llvm_alloca(p, src_type, src_align); + val_ptr = LLVMBuildPointerCast(p->builder, val_copy, LLVMPointerType(src_type, 0), ""); + LLVMBuildStore(p->builder, val, val_ptr); + } + + i64 max_align = gb_max(lb_alignof(src_type), lb_alignof(dst_type)); + max_align = gb_max(max_align, 16); + + LLVMValueRef ptr = llvm_alloca(p, dst_type, max_align); + LLVMValueRef nptr = LLVMBuildPointerCast(p->builder, ptr, LLVMPointerType(dst_type, 0), ""); + + LLVMTypeRef types[3] = { + lb_type(p->module, t_rawptr), + lb_type(p->module, t_rawptr), + lb_type(p->module, t_int) + }; + + LLVMValueRef args[4] = { + nptr, + val_ptr, + LLVMConstInt(LLVMIntTypeInContext(p->module->ctx, 8*cast(unsigned)build_context.int_size), dst_size, 0), + LLVMConstInt(LLVMInt1TypeInContext(p->module->ctx), 0, 0), + }; + + lb_call_intrinsic( + p, + "llvm.memcpy.inline", + args, + gb_count_of(args), + types, + gb_count_of(types) + ); + + return OdinLLVMBuildLoad(p, dst_type, ptr); } else { GB_ASSERT(p->decl_block != p->curr_block); + GB_ASSERT(dst_size >= src_size); i64 max_align = gb_max(lb_alignof(src_type), lb_alignof(dst_type)); max_align = gb_max(max_align, 16); From 221dea76a42a4e41ff3f9a1b889f1439f54287b9 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Fri, 9 May 2025 17:12:35 +0200 Subject: [PATCH 053/120] Run MacOS CI with -sanitize:address --- .github/workflows/ci.yml | 68 +++++++++++----------------------------- 1 file changed, 19 insertions(+), 49 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f03eb359..590c52feb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,9 +75,9 @@ jobs: fail-fast: false matrix: # MacOS 13 runs on Intel, 14 runs on ARM - os: [macos-13, macos-14] + os: [macos-13, macos-14, ubuntu-latest] runs-on: ${{ matrix.os }} - name: ${{ matrix.os == 'macos-14' && 'MacOS ARM' || (matrix.os == 'macos-13' && 'MacOS Intel') }} Build, Check, and Test + name: ${{ matrix.os == 'macos-14' && 'MacOS ARM' || (matrix.os == 'macos-13' && 'MacOS Intel') || (matrix.os == 'ubuntu-latest' && 'Ubuntu') }} Build, Check, and Test timeout-minutes: 15 steps: @@ -95,52 +95,8 @@ jobs: brew update brew install llvm@20 wasmtime lua@5.4 lld - - name: Build Odin - run: ./build_odin.sh release - - name: Odin version - run: ./odin version - - name: Odin report - run: ./odin report - - name: Compile needed Vendor - run: | - make -C vendor/stb/src - make -C vendor/cgltf/src - make -C vendor/miniaudio/src - - name: Odin check - run: ./odin check examples/demo -vet - - name: Odin run - run: ./odin run examples/demo - - name: Odin run -debug - run: ./odin run examples/demo -debug - - name: Odin check examples/all - run: ./odin check examples/all -strict-style -vet -disallow-do - - name: Odin check vendor/sdl3 - run: ./odin check vendor/sdl3 -strict-style -vet -disallow-do -no-entry-point - - name: Normal Core library tests - run: ./odin test tests/core/normal.odin -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true - - name: Optimized Core library tests - run: ./odin test tests/core/speed.odin -o:speed -file -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true - - name: Vendor library tests - run: ./odin test tests/vendor -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true - - name: Internals tests - run: ./odin test tests/internal -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true - - name: GitHub Issue tests - run: | - cd tests/issues - ./run.sh - - - name: Run demo on WASI WASM32 - run: | - ./odin build examples/demo -target:wasi_wasm32 -vet -strict-style -disallow-do -out:demo - wasmtime ./demo.wasm - if: matrix.os == 'macos-14' - - build_ubuntu: - name: Ubuntu Build, Check, and Test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Download LLVM + - name: Download LLVM (Ubuntu) + if: matrix.os == 'ubuntu-latest' run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh @@ -175,30 +131,44 @@ jobs: - name: Vendor library tests run: ./odin test tests/vendor -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address - name: Internals tests - run: ./odin test tests/internal -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true + run: ./odin test tests/internal -all-packages -vet -strict-style -disallow-do -define:ODIN_TEST_FANCY=false -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=true -sanitize:address - name: GitHub Issue tests run: | cd tests/issues ./run.sh + - name: Run demo on WASI WASM32 + run: | + ./odin build examples/demo -target:wasi_wasm32 -vet -strict-style -disallow-do -out:demo + wasmtime ./demo.wasm + if: matrix.os == 'macos-14' + - name: Check benchmarks run: ./odin check tests/benchmark -vet -strict-style -no-entry-point - name: Odin check examples/all for Linux i386 + if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_i386 - name: Odin check examples/all for Linux arm64 + if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all -vet -strict-style -disallow-do -target:linux_arm64 - name: Odin check examples/all for FreeBSD amd64 + if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all -vet -strict-style -disallow-do -target:freebsd_amd64 - name: Odin check examples/all for OpenBSD amd64 + if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all -vet -strict-style -disallow-do -target:openbsd_amd64 - name: Odin check vendor/sdl3 for Linux i386 + if: matrix.os == 'ubuntu-latest' run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:linux_i386 - name: Odin check vendor/sdl3 for Linux arm64 + if: matrix.os == 'ubuntu-latest' run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:linux_arm64 - name: Odin check vendor/sdl3 for FreeBSD amd64 + if: matrix.os == 'ubuntu-latest' run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:freebsd_amd64 - name: Odin check vendor/sdl3 for OpenBSD amd64 + if: matrix.os == 'ubuntu-latest' run: ./odin check vendor/sdl3 -vet -strict-style -disallow-do -no-entry-point -target:openbsd_amd64 build_windows: From 8374854dd557accf3ad8a0136ae1ff5867bc9a29 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Fri, 9 May 2025 17:21:08 +0200 Subject: [PATCH 054/120] use brew clang instead of system clang --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 590c52feb..8ae39667b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -88,12 +88,14 @@ jobs: run: | brew update brew install llvm@20 lua@5.4 lld + echo "$(brew --prefix llvm@20)/bin" >> $GITHUB_PATH - name: Download LLVM (MacOS ARM) if: matrix.os == 'macos-14' run: | brew update brew install llvm@20 wasmtime lua@5.4 lld + echo "$(brew --prefix llvm@20)/bin" >> $GITHUB_PATH - name: Download LLVM (Ubuntu) if: matrix.os == 'ubuntu-latest' From ebc63a73550b52f25c92f89f76760efc265e937f Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sat, 10 May 2025 15:11:52 +0200 Subject: [PATCH 055/120] add hexfloat (0h) parsing to strconv --- core/strconv/strconv.odin | 33 ++++++++++++++++++++ tests/core/strconv/test_core_strconv.odin | 37 +++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/core/strconv/strconv.odin b/core/strconv/strconv.odin index 26a737bd1..4cecd1911 100644 --- a/core/strconv/strconv.odin +++ b/core/strconv/strconv.odin @@ -1095,6 +1095,39 @@ parse_f64_prefix :: proc(str: string) -> (value: f64, nr: int, ok: bool) { return transmute(f64)bits, ok } + if len(str) > 2 && str[0] == '0' && str[1] == 'h' { + nr = 2 + + as_int: u64 + digits: int + for r in str[2:] { + if r == '_' { + nr += 1 + continue + } + v := u64(_digit_value(r)) + if v >= 16 { + break + } + as_int *= 16 + as_int += v + digits += 1 + } + nr += digits + ok = len(str) == nr + + switch digits { + case 4: + value = cast(f64)transmute(f16)cast(u16)as_int + case 8: + value = cast(f64)transmute(f32)cast(u32)as_int + case 16: + value = transmute(f64)as_int + case: + ok = false + } + return + } if value, nr, ok = check_special(str); ok { return diff --git a/tests/core/strconv/test_core_strconv.odin b/tests/core/strconv/test_core_strconv.odin index 6b70654cc..8266ece23 100644 --- a/tests/core/strconv/test_core_strconv.odin +++ b/tests/core/strconv/test_core_strconv.odin @@ -30,6 +30,43 @@ test_float :: proc(t: ^testing.T) { testing.expect_value(t, n, 0) testing.expect_value(t, ok, false) + f, ok = strconv.parse_f64("0", &n) + testing.expect_value(t, f, 0) + testing.expect_value(t, n, 1) + testing.expect_value(t, ok, true) + + f, ok = strconv.parse_f64("0h", &n) + testing.expect_value(t, f, 0) + testing.expect_value(t, n, 1) + testing.expect_value(t, ok, false) + + f, ok = strconv.parse_f64("0h1", &n) + testing.expect_value(t, f, 0) + testing.expect_value(t, n, 3) + testing.expect_value(t, ok, false) + + f, ok = strconv.parse_f64("0h0000_0001", &n) + testing.expect_value(t, f, 0h0000_0001) + testing.expect_value(t, n, 11) + testing.expect_value(t, ok, true) + + f, ok = strconv.parse_f64("0h4c60", &n) + testing.expect_value(t, f, 0h4c60) + testing.expect_value(t, f, 17.5) + testing.expect_value(t, n, 6) + testing.expect_value(t, ok, true) + + f, ok = strconv.parse_f64("0h418c0000", &n) + testing.expect_value(t, f, 0h418c0000) + testing.expect_value(t, f, 17.5) + testing.expect_value(t, n, 10) + testing.expect_value(t, ok, true) + + f, ok = strconv.parse_f64("0h4031_8000_0000_0000", &n) + testing.expect_value(t, f, 0h4031800000000000) + testing.expect_value(t, f, f64(17.5)) + testing.expect_value(t, n, 21) + testing.expect_value(t, ok, true) } @(test) From ac1c97eb333e6b2047020aae7bd5795bfbfb431b Mon Sep 17 00:00:00 2001 From: 0xrsp <95966883+0xrsp@users.noreply.github.com> Date: Sun, 11 May 2025 00:23:29 +0930 Subject: [PATCH 056/120] add: vendor SDL3_ttf --- vendor/sdl3/ttf/LICENSE.freetype.txt | 169 ++ vendor/sdl3/ttf/LICENSE.harfbuzz.txt | 42 + vendor/sdl3/ttf/LICENSE.plutosvg.txt | 21 + vendor/sdl3/ttf/LICENSE.plutovg.txt | 21 + vendor/sdl3/ttf/LICENSE.txt | 17 + vendor/sdl3/ttf/SDL3_ttf.dll | Bin 0 -> 2021888 bytes vendor/sdl3/ttf/SDL3_ttf.lib | Bin 0 -> 28030 bytes vendor/sdl3/ttf/include/SDL_textengine.h | 181 ++ vendor/sdl3/ttf/include/SDL_ttf.h | 2833 ++++++++++++++++++++++ vendor/sdl3/ttf/sdl3_textengine.odin | 63 + vendor/sdl3/ttf/sdl3_ttf.odin | 291 +++ 11 files changed, 3638 insertions(+) create mode 100644 vendor/sdl3/ttf/LICENSE.freetype.txt create mode 100644 vendor/sdl3/ttf/LICENSE.harfbuzz.txt create mode 100644 vendor/sdl3/ttf/LICENSE.plutosvg.txt create mode 100644 vendor/sdl3/ttf/LICENSE.plutovg.txt create mode 100644 vendor/sdl3/ttf/LICENSE.txt create mode 100644 vendor/sdl3/ttf/SDL3_ttf.dll create mode 100644 vendor/sdl3/ttf/SDL3_ttf.lib create mode 100644 vendor/sdl3/ttf/include/SDL_textengine.h create mode 100644 vendor/sdl3/ttf/include/SDL_ttf.h create mode 100644 vendor/sdl3/ttf/sdl3_textengine.odin create mode 100644 vendor/sdl3/ttf/sdl3_ttf.odin diff --git a/vendor/sdl3/ttf/LICENSE.freetype.txt b/vendor/sdl3/ttf/LICENSE.freetype.txt new file mode 100644 index 000000000..c406d150f --- /dev/null +++ b/vendor/sdl3/ttf/LICENSE.freetype.txt @@ -0,0 +1,169 @@ + The FreeType Project LICENSE + ---------------------------- + + 2006-Jan-27 + + Copyright 1996-2002, 2006 by + David Turner, Robert Wilhelm, and Werner Lemberg + + + +Introduction +============ + + The FreeType Project is distributed in several archive packages; + some of them may contain, in addition to the FreeType font engine, + various tools and contributions which rely on, or relate to, the + FreeType Project. + + This license applies to all files found in such packages, and + which do not fall under their own explicit license. The license + affects thus the FreeType font engine, the test programs, + documentation and makefiles, at the very least. + + This license was inspired by the BSD, Artistic, and IJG + (Independent JPEG Group) licenses, which all encourage inclusion + and use of free software in commercial and freeware products + alike. As a consequence, its main points are that: + + o We don't promise that this software works. However, we will be + interested in any kind of bug reports. (`as is' distribution) + + o You can use this software for whatever you want, in parts or + full form, without having to pay us. (`royalty-free' usage) + + o You may not pretend that you wrote this software. If you use + it, or only parts of it, in a program, you must acknowledge + somewhere in your documentation that you have used the + FreeType code. (`credits') + + We specifically permit and encourage the inclusion of this + software, with or without modifications, in commercial products. + We disclaim all warranties covering The FreeType Project and + assume no liability related to The FreeType Project. + + + Finally, many people asked us for a preferred form for a + credit/disclaimer to use in compliance with this license. We thus + encourage you to use the following text: + + """ + Portions of this software are copyright © The FreeType + Project (www.freetype.org). All rights reserved. + """ + + Please replace with the value from the FreeType version you + actually use. + + +Legal Terms +=========== + +0. Definitions +-------------- + + Throughout this license, the terms `package', `FreeType Project', + and `FreeType archive' refer to the set of files originally + distributed by the authors (David Turner, Robert Wilhelm, and + Werner Lemberg) as the `FreeType Project', be they named as alpha, + beta or final release. + + `You' refers to the licensee, or person using the project, where + `using' is a generic term including compiling the project's source + code as well as linking it to form a `program' or `executable'. + This program is referred to as `a program using the FreeType + engine'. + + This license applies to all files distributed in the original + FreeType Project, including all source code, binaries and + documentation, unless otherwise stated in the file in its + original, unmodified form as distributed in the original archive. + If you are unsure whether or not a particular file is covered by + this license, you must contact us to verify this. + + The FreeType Project is copyright (C) 1996-2000 by David Turner, + Robert Wilhelm, and Werner Lemberg. All rights reserved except as + specified below. + +1. No Warranty +-------------- + + THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO + USE, OF THE FREETYPE PROJECT. + +2. Redistribution +----------------- + + This license grants a worldwide, royalty-free, perpetual and + irrevocable right and license to use, execute, perform, compile, + display, copy, create derivative works of, distribute and + sublicense the FreeType Project (in both source and object code + forms) and derivative works thereof for any purpose; and to + authorize others to exercise some or all of the rights granted + herein, subject to the following conditions: + + o Redistribution of source code must retain this license file + (`FTL.TXT') unaltered; any additions, deletions or changes to + the original files must be clearly indicated in accompanying + documentation. The copyright notices of the unaltered, + original files must be preserved in all copies of source + files. + + o Redistribution in binary form must provide a disclaimer that + states that the software is based in part of the work of the + FreeType Team, in the distribution documentation. We also + encourage you to put an URL to the FreeType web page in your + documentation, though this isn't mandatory. + + These conditions apply to any software derived from or based on + the FreeType Project, not just the unmodified files. If you use + our work, you must acknowledge us. However, no fee need be paid + to us. + +3. Advertising +-------------- + + Neither the FreeType authors and contributors nor you shall use + the name of the other for commercial, advertising, or promotional + purposes without specific prior written permission. + + We suggest, but do not require, that you use one or more of the + following phrases to refer to this software in your documentation + or advertising materials: `FreeType Project', `FreeType Engine', + `FreeType library', or `FreeType Distribution'. + + As you have not signed this license, you are not required to + accept it. However, as the FreeType Project is copyrighted + material, only this license, or another one contracted with the + authors, grants you the right to use, distribute, and modify it. + Therefore, by using, distributing, or modifying the FreeType + Project, you indicate that you understand and accept all the terms + of this license. + +4. Contacts +----------- + + There are two mailing lists related to FreeType: + + o freetype@nongnu.org + + Discusses general use and applications of FreeType, as well as + future and wanted additions to the library and distribution. + If you are looking for support, start in this list if you + haven't found anything to help you in the documentation. + + o freetype-devel@nongnu.org + + Discusses bugs, as well as engine internals, design issues, + specific licenses, porting, etc. + + Our home page can be found at + + https://www.freetype.org + + +--- end of FTL.TXT --- diff --git a/vendor/sdl3/ttf/LICENSE.harfbuzz.txt b/vendor/sdl3/ttf/LICENSE.harfbuzz.txt new file mode 100644 index 000000000..1dd917e9f --- /dev/null +++ b/vendor/sdl3/ttf/LICENSE.harfbuzz.txt @@ -0,0 +1,42 @@ +HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. +For parts of HarfBuzz that are licensed under different licenses see individual +files names COPYING in subdirectories where applicable. + +Copyright © 2010-2022 Google, Inc. +Copyright © 2015-2020 Ebrahim Byagowi +Copyright © 2019,2020 Facebook, Inc. +Copyright © 2012,2015 Mozilla Foundation +Copyright © 2011 Codethink Limited +Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) +Copyright © 2009 Keith Stribley +Copyright © 2011 Martin Hosken and SIL International +Copyright © 2007 Chris Wilson +Copyright © 2005,2006,2020,2021,2022,2023 Behdad Esfahbod +Copyright © 2004,2007,2008,2009,2010,2013,2021,2022,2023 Red Hat, Inc. +Copyright © 1998-2005 David Turner and Werner Lemberg +Copyright © 2016 Igalia S.L. +Copyright © 2022 Matthias Clasen +Copyright © 2018,2021 Khaled Hosny +Copyright © 2018,2019,2020 Adobe, Inc +Copyright © 2013-2015 Alexei Podtelezhnikov + +For full copyright notices consult the individual files in the package. + + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. diff --git a/vendor/sdl3/ttf/LICENSE.plutosvg.txt b/vendor/sdl3/ttf/LICENSE.plutosvg.txt new file mode 100644 index 000000000..62a964e73 --- /dev/null +++ b/vendor/sdl3/ttf/LICENSE.plutosvg.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2025 Samuel Ugochukwu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/sdl3/ttf/LICENSE.plutovg.txt b/vendor/sdl3/ttf/LICENSE.plutovg.txt new file mode 100644 index 000000000..62a964e73 --- /dev/null +++ b/vendor/sdl3/ttf/LICENSE.plutovg.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2025 Samuel Ugochukwu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/sdl3/ttf/LICENSE.txt b/vendor/sdl3/ttf/LICENSE.txt new file mode 100644 index 000000000..52d0ed38b --- /dev/null +++ b/vendor/sdl3/ttf/LICENSE.txt @@ -0,0 +1,17 @@ +Copyright (C) 1997-2025 Sam Lantinga + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/vendor/sdl3/ttf/SDL3_ttf.dll b/vendor/sdl3/ttf/SDL3_ttf.dll new file mode 100644 index 0000000000000000000000000000000000000000..b1616f966ddb8f9e11edd73ddd89f200208e2601 GIT binary patch literal 2021888 zcmeZ`n!v!!z`(%5z`*eTKLf)K1_*F~PAu}Y4EGj;x?FWut;lav6OvVX<60OVyXGP(IOs9H&|qY>2`~frWVVs-&-vz!RlKr z3c%*ITJ8jkH(G%7ZT;S0;Q;2hK>5{R^QxPK!SvSeZD8@B%;XG^TcFOvpaNVO7*g8U z8J^#Jl@62qz@VhS&BQ0mU?tALuz?*ctYIa}z#sr-HZX!H5SxjCfeplFK+p^Z@{qu1 zU|?WkNMM9%g6d_!RzG|4g~@G&ram>|p012$8h;Rh%ZAILK7;Ro9Y7G)5SXGjrd zVDR`N%@6_+K_$OQGiWd{Ff8~Y&0v9~jUhmsVFxR!Qe>W9Noqw20|SGDg*e1PAism` zM^dD~z>uI#z_7^D~& z7^cXgt2>}q08t3`;{#a+1_4F}hIJU~9O8pq977x#7*s%h`XC1iTn2`Ha_Htc=oJ+g zB{MKU!j3^65-|s`sY}htPi6pzB`8c8L>L$tj$x>CLa|^7a6CF=R5(03OH>5HJ(}Mr z@Naj@@aVqf(Y>pKfq}uJ`(vl0#jfPcyi$+u(=QZWFfg8VQzUu@aWtP(Hf&-;L&_UA^z|gWB|4gVwC`stMLJ_Wk2}^9Xa>~yaf0KJtbcJ z)Ma3B+yRO=utn!Rx?x7Wyr;{+fNa{CGaj823j`S$e7aA%bO))pbWY3=WMJravgvf> z=yr1GbmZx7Vqjum=yVk5Zejs5M2t_mbUP_H_B#A){=rzzy%S`UWAhKD5;n)?A1tNJ z%_o^0dma9-{QLj^{}SfrlPr$Sr&ziVHlN^dg%}S~%

8v9mEpkb%MY0J0BXYV)8t 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

VLHBV`sSLj>0%RgclOm`vk@@Dx!2v49 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%0A|huonHvLZ~{~{lnQ|w6xgduP%;K3f>O{?jup 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


_WPU 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

co;NI^BR1}SSSMn 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 qfV25-@ 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
dMvf9){_XBO9=+fygnwHP=(17< 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஭E&W5KIY=?t_OFL1+4bg9p^0X#ul9$5gd~S&+&M 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�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®pF0aSZ^Y!6_1gCNe$V{v!a>j9_|0A0x5b`G zX=9@IYi8BB9Mw6qJ~1AcGxJqf@clFP)x0}D^j?y*dzi4`($r^Oi8s~in=iJh|8?D1 zoY+;fRKo50mXzKL)jUD}8}3%8Z}T~jJwavf1jiE>RE7B>dBQrCW8ExnR5ZNkw>!rw z+g~r|y7Litu+G|RK~Jr|$4^cxs$FljRI@={@71AOlO`{Qin+|6A36IS2B#tC8NgUy>)dh1>~F~jQ1!r$i?1wRa*1gr0~ z-fWO8E_zi4s}CJ?tv9NSuT1G2K=B|Fd^7oorR_R?vCQc3nbL(Uv<# zcK>(I_|%CZd#?ovocPO|H_wxw#0I@M8Vq2u>K*eT{p+xWN$(8-kY%b4gZL(OTyxA>@oh~dn5AG z%mmncMMcUU)?-&~HD@0#U^^w7Q{rt{WO<><&j}XqQ#&(SCcitaKJhR6?diKOD5V9P zTk7Rs`n-iFzO%4K=gYB|@!CD}1>BZ)i0p8DdbNpj)u-xh-PIO_uJ4
l}^SkGNet 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

ucEoAlRL2fN>z&U`oYZ0V!Rnv#>{-vh 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
KC&*t*ZoKorRI>}L<~=C<7#J9e4MniD z>p(MK%#5I0K0$Mur%Vd4jCt+>n}feR1l?x^xho2!PDNZ3OMiJE*c@2d@_S<&mVVQI zuo}>v0w8~_FKocF4j*({5i=v`HgHhgUH4uAOCCH3HV1TX1;{;V+b?06CprXH1G?iI z6c@Q66S1sUKMYm_S_cbK6Z%mHOFR4sSPf{MFepunWL04)>yCoefchyQe<@DAhGi|* zF|Zm~oPJxl3QL)A9IOVk?j4k-KbN>-Dd$gs)qu{x0lCLv%0Db?n?dVUnHiTtXA-9S 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%0AjkSn8y;V0pt`_nQ0xkV>jJrOYwFK(gs%5cU0^jR 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
{{b?LJpzp2~-zY4T@c9U|q;|Wy9@a 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%0AkFp$n`AMb|N~ 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 MkERS_9VW>D0A(MsjQ{`u diff --git a/vendor/miniaudio/node_graph.odin b/vendor/miniaudio/node_graph.odin index 610ada7a8..496d566f4 100644 --- a/vendor/miniaudio/node_graph.odin +++ b/vendor/miniaudio/node_graph.odin @@ -19,6 +19,13 @@ MAX_NODE_LOCAL_BUS_COUNT :: 2 /* Use this when the bus count is determined by the node instance rather than the vtable. */ NODE_BUS_COUNT_UNKNOWN :: 255 +/* For some internal memory management of ma_node_graph. */ +stack :: struct { + offset: uint, + sizeInBytes: uint, + _data: [1]byte, +} + node :: struct {} /* Node flags. */ @@ -53,7 +60,7 @@ node_vtable :: struct { onProcess: proc "c" (pNode: ^node, ppFramesIn: ^[^]f32, pFrameCountIn: ^u32, ppFramesOut: ^[^]f32, pFrameCountOut: ^u32), /* - A callback for retrieving the number of a input frames that are required to output the + A callback for retrieving the number of input frames that are required to output the specified number of output frames. You would only want to implement this when the node performs resampling. This is optional, even for nodes that perform resampling, but it does offer a small reduction in latency as it allows miniaudio to calculate the exact number of input frames @@ -134,8 +141,12 @@ node_input_bus :: struct { node_base :: struct { /* These variables are set once at startup. */ - pNodeGraph: ^node_graph, /* The graph this node belongs to. */ + pNodeGraph: ^node_graph, /* The graph this node belongs to. */ vtable: ^node_vtable, + inputBusCount: u32, + outputBusCount: u32, + pInputBuses: [^]node_input_bus `fmt:"v,inputBusCount"`, + pOutputBuses: [^]node_output_bus `fmt:"v,outputBusCount"`, pCachedData: [^]f32, /* Allocated on the heap. Fixed size. Needs to be stored on the heap because reading from output buses is done in separate function calls. */ cachedDataCapInFramesPerBus: u16, /* The capacity of the input data cache in frames, per bus. */ @@ -148,10 +159,6 @@ node_base :: struct { state: node_state, /*atomic*/ /* When set to stopped, nothing will be read, regardless of the times in stateTimes. */ stateTimes: [2]u64, /*atomic*/ /* Indexed by ma_node_state. Specifies the time based on the global clock that a node should be considered to be in the relevant state. */ localTime: u64, /*atomic*/ /* The node's local clock. This is just a running sum of the number of output frames that have been processed. Can be modified by any thread with `ma_node_set_time()`. */ - inputBusCount: u32, - outputBusCount: u32, - pInputBuses: [^]node_input_bus, - pOutputBuses: [^]node_output_bus, /* Memory management. */ _inputBuses: [MAX_NODE_LOCAL_BUS_COUNT]node_input_bus, @@ -189,18 +196,25 @@ foreign lib { } node_graph_config :: struct { - channels: u32, - nodeCacheCapInFrames: u16, + channels: u32, + processingSizeInFrames: u32, /* This is the preferred processing size for node processing callbacks unless overridden by a node itself. Can be 0 in which case it will be based on the frame count passed into ma_node_graph_read_pcm_frames(), but will not be well defined. */ + preMixStackSizeInBytes: uint, /* Defaults to 512KB per channel. Reducing this will save memory, but the depth of your node graph will be more restricted. */ } node_graph :: struct { /* Immutable. */ base: node_base, /* The node graph itself is a node so it can be connected as an input to different node graph. This has zero inputs and calls ma_node_graph_read_pcm_frames() to generate it's output. */ endpoint: node_base, /* Special node that all nodes eventually connect to. Data is read from this node in ma_node_graph_read_pcm_frames(). */ - nodeCacheCapInFrames: u16, + + pProcessingCache: [^]f32, /* This will be allocated when processingSizeInFrames is non-zero. This is needed because ma_node_graph_read_pcm_frames() can be called with a variable number of frames, and we may need to do some buffering in situations where the caller requests a frame count that's not a multiple of processingSizeInFrames. */ + processingCacheFramesRemaining: u32, + processingSizeInFrames: u32, /* Read and written by multiple threads. */ isReading: b32, /*atomic*/ + + /* Modified only by the audio thread. */ + pPreMixStack: ^stack, } @(default_calling_convention="c", link_prefix="ma_") diff --git a/vendor/miniaudio/resource_manager.odin b/vendor/miniaudio/resource_manager.odin index 495a02c5d..4ef5778a9 100644 --- a/vendor/miniaudio/resource_manager.odin +++ b/vendor/miniaudio/resource_manager.odin @@ -16,6 +16,7 @@ resource_manager_data_source_flag :: enum c.int { ASYNC = 2, /* When set, the resource manager will load the data source asynchronously. */ WAIT_INIT = 3, /* When set, waits for initialization of the underlying data source before returning from ma_resource_manager_data_source_init(). */ UNKNOWN_LENGTH = 4, /* Gives the resource manager a hint that the length of the data source is unknown and calling `ma_data_source_get_length_in_pcm_frames()` should be avoided. */ + LOOPING = 5, /* When set, configures the data source to loop by default. */ } resource_manager_data_source_flags :: bit_set[resource_manager_data_source_flag; u32] @@ -79,8 +80,8 @@ resource_manager_data_source_config :: struct { rangeEndInPCMFrames: u64, loopPointBegInPCMFrames: u64, loopPointEndInPCMFrames: u64, - isLooping: b32, flags: u32, + isLooping: b32, /* Deprecated. Use the MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING flag in `flags` instead. */ } resource_manager_data_supply_type :: enum c.int { diff --git a/vendor/miniaudio/src/miniaudio.h b/vendor/miniaudio/src/miniaudio.h index 47332e11a..c74bebeb3 100644 --- a/vendor/miniaudio/src/miniaudio.h +++ b/vendor/miniaudio/src/miniaudio.h @@ -1,6 +1,6 @@ /* Audio playback and capture library. Choice of public domain or MIT-0. See license statements at the end of this file. -miniaudio - v0.11.21 - 2023-11-15 +miniaudio - v0.11.22 - 2025-02-24 David Reid - mackron@gmail.com @@ -12,15 +12,18 @@ GitHub: https://github.com/mackron/miniaudio /* 1. Introduction =============== -miniaudio is a single file library for audio playback and capture. To use it, do the following in -one .c file: +To use miniaudio, include "miniaudio.h": ```c - #define MINIAUDIO_IMPLEMENTATION #include "miniaudio.h" ``` -You can do `#include "miniaudio.h"` in other parts of the program just like any other header. +The implementation is contained in "miniaudio.c". Just compile this like any other source file. You +can include miniaudio.c if you want to compile your project as a single translation unit: + + ```c + #include "miniaudio.c" + ``` miniaudio includes both low level and high level APIs. The low level API is good for those who want to do all of their mixing themselves and only require a light weight interface to the underlying @@ -293,7 +296,7 @@ avoids the same sound being loaded multiple times. The node graph is used for mixing and effect processing. The idea is that you connect a number of nodes into the graph by connecting each node's outputs to another node's inputs. Each node can -implement it's own effect. By chaining nodes together, advanced mixing and effect processing can +implement its own effect. By chaining nodes together, advanced mixing and effect processing can be achieved. The engine encapsulates both the resource manager and the node graph to create a simple, easy to @@ -398,7 +401,7 @@ the be started and/or stopped at a specific time. This can be done with the foll ``` The start/stop time needs to be specified based on the absolute timer which is controlled by the -engine. The current global time time in PCM frames can be retrieved with +engine. The current global time in PCM frames can be retrieved with `ma_engine_get_time_in_pcm_frames()`. The engine's global time can be changed with `ma_engine_set_time_in_pcm_frames()` for synchronization purposes if required. Note that scheduling a start time still requires an explicit call to `ma_sound_start()` before anything will play: @@ -430,11 +433,11 @@ Sounds and sound groups are nodes in the engine's node graph and can be plugged API. This makes it possible to connect sounds and sound groups to effect nodes to produce complex effect chains. -A sound can have it's volume changed with `ma_sound_set_volume()`. If you prefer decibel volume +A sound can have its volume changed with `ma_sound_set_volume()`. If you prefer decibel volume control you can use `ma_volume_db_to_linear()` to convert from decibel representation to linear. Panning and pitching is supported with `ma_sound_set_pan()` and `ma_sound_set_pitch()`. If you know -a sound will never have it's pitch changed with `ma_sound_set_pitch()` or via the doppler effect, +a sound will never have its pitch changed with `ma_sound_set_pitch()` or via the doppler effect, you can specify the `MA_SOUND_FLAG_NO_PITCH` flag when initializing the sound for an optimization. By default, sounds and sound groups have spatialization enabled. If you don't ever want to @@ -483,21 +486,12 @@ link the relevant frameworks but should compile cleanly out of the box with Xcod through the command line requires linking to `-lpthread` and `-lm`. Due to the way miniaudio links to frameworks at runtime, your application may not pass Apple's -notarization process. To fix this there are two options. The first is to use the -`MA_NO_RUNTIME_LINKING` option, like so: - - ```c - #ifdef __APPLE__ - #define MA_NO_RUNTIME_LINKING - #endif - #define MINIAUDIO_IMPLEMENTATION - #include "miniaudio.h" - ``` - -This will require linking with `-framework CoreFoundation -framework CoreAudio -framework AudioToolbox`. -If you get errors about AudioToolbox, try with `-framework AudioUnit` instead. You may get this when -using older versions of iOS. Alternatively, if you would rather keep using runtime linking you can -add the following to your entitlements.xcent file: +notarization process. To fix this there are two options. The first is to compile with +`-DMA_NO_RUNTIME_LINKING` which in turn will require linking with +`-framework CoreFoundation -framework CoreAudio -framework AudioToolbox`. If you get errors about +AudioToolbox, try with `-framework AudioUnit` instead. You may get this when using older versions +of iOS. Alternatively, if you would rather keep using runtime linking you can add the following to +your entitlements.xcent file: ``` com.apple.security.cs.allow-dyld-environment-variables @@ -555,7 +549,7 @@ To run locally, you'll need to use emrun: 2.7. Build Options ------------------ -`#define` these options before including miniaudio.h. +`#define` these options before including miniaudio.c, or pass them as compiler flags: +----------------------------------+--------------------------------------------------------------------+ | Option | Description | @@ -586,6 +580,8 @@ To run locally, you'll need to use emrun: +----------------------------------+--------------------------------------------------------------------+ | MA_NO_WEBAUDIO | Disables the Web Audio backend. | +----------------------------------+--------------------------------------------------------------------+ + | MA_NO_CUSTOM | Disables support for custom backends. | + +----------------------------------+--------------------------------------------------------------------+ | MA_NO_NULL | Disables the null backend. | +----------------------------------+--------------------------------------------------------------------+ | MA_ENABLE_ONLY_SPECIFIC_BACKENDS | Disables all backends by default and requires `MA_ENABLE_*` to | @@ -630,6 +626,9 @@ To run locally, you'll need to use emrun: | MA_ENABLE_WEBAUDIO | Used in conjunction with MA_ENABLE_ONLY_SPECIFIC_BACKENDS to | | | enable the Web Audio backend. | +----------------------------------+--------------------------------------------------------------------+ + | MA_ENABLE_CUSTOM | Used in conjunction with MA_ENABLE_ONLY_SPECIFIC_BACKENDS to | + | | enable custom backends. | + +----------------------------------+--------------------------------------------------------------------+ | MA_ENABLE_NULL | Used in conjunction with MA_ENABLE_ONLY_SPECIFIC_BACKENDS to | | | enable the null backend. | +----------------------------------+--------------------------------------------------------------------+ @@ -693,11 +692,30 @@ To run locally, you'll need to use emrun: | | You may need to enable this if your target platform does not allow | | | runtime linking via `dlopen()`. | +----------------------------------+--------------------------------------------------------------------+ + | MA_USE_STDINT | (Pass this in as a compiler flag. Do not `#define` this before | + | | miniaudio.c) Forces the use of stdint.h for sized types. | + +----------------------------------+--------------------------------------------------------------------+ | MA_DEBUG_OUTPUT | Enable `printf()` output of debug logs (`MA_LOG_LEVEL_DEBUG`). | +----------------------------------+--------------------------------------------------------------------+ | MA_COINIT_VALUE | Windows only. The value to pass to internal calls to | | | `CoInitializeEx()`. Defaults to `COINIT_MULTITHREADED`. | +----------------------------------+--------------------------------------------------------------------+ + | MA_FORCE_UWP | Windows only. Affects only the WASAPI backend. Will force the | + | | WASAPI backend to use the UWP code path instead of the regular | + | | desktop path. This is normally auto-detected and should rarely be | + | | needed to be used explicitly, but can be useful for debugging. | + +----------------------------------+--------------------------------------------------------------------+ + | MA_ON_THREAD_ENTRY | Defines some code that will be executed as soon as an internal | + | | miniaudio-managed thread is created. This will be the first thing | + | | to be executed by the thread entry point. | + +----------------------------------+--------------------------------------------------------------------+ + | MA_ON_THREAD_EXIT | Defines some code that will be executed from the entry point of an | + | | internal miniaudio-managed thread upon exit. This will be the last | + | | thing to be executed before the thread's entry point exits. | + +----------------------------------+--------------------------------------------------------------------+ + | MA_THREAD_DEFAULT_STACK_SIZE | If set, specifies the default stack size used by miniaudio-managed | + | | threads. | + +----------------------------------+--------------------------------------------------------------------+ | MA_API | Controls how public APIs should be decorated. Default is `extern`. | +----------------------------------+--------------------------------------------------------------------+ @@ -1309,7 +1327,7 @@ only works for sounds that were initialized with `ma_sound_init_from_file()` and When you initialize a sound, if you specify a sound group the sound will be attached to that group automatically. If you set it to NULL, it will be automatically attached to the engine's endpoint. -If you would instead rather leave the sound unattached by default, you can can specify the +If you would instead rather leave the sound unattached by default, you can specify the `MA_SOUND_FLAG_NO_DEFAULT_ATTACHMENT` flag. This is useful if you want to set up a complex node graph. @@ -1686,6 +1704,7 @@ combination of the following flags: MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_DECODE MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT + MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING ``` When no flags are specified (set to 0), the sound will be fully loaded into memory, but not @@ -1706,6 +1725,14 @@ can instead stream audio data which you can do by specifying the second pages. When a new page needs to be decoded, a job will be posted to the job queue and then subsequently processed in a job thread. +The `MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING` flag can be used so that the sound will loop +when it reaches the end by default. It's recommended you use this flag when you want to have a +looping streaming sound. If you try loading a very short sound as a stream, you will get a glitch. +This is because the resource manager needs to pre-fill the initial buffer at initialization time, +and if you don't specify the `MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING` flag, the resource +manager will assume the sound is not looping and will stop filling the buffer when it reaches the +end, therefore resulting in a discontinuous buffer. + For in-memory sounds, reference counting is used to ensure the data is loaded only once. This means multiple calls to `ma_resource_manager_data_source_init()` with the same file path will result in the file data only being loaded once. Each call to `ma_resource_manager_data_source_init()` must be @@ -1720,7 +1747,7 @@ actual file paths. When `ma_resource_manager_data_source_init()` is called (with `MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_STREAM` flag), the resource manager will look for these explicitly registered data buffers and, if found, will use it as the backing data for the data source. Note that the resource manager does *not* make a copy of this data so it is up to the -caller to ensure the pointer stays valid for it's lifetime. Use +caller to ensure the pointer stays valid for its lifetime. Use `ma_resource_manager_unregister_data()` to unregister the self-managed data. You can also use `ma_resource_manager_register_file()` and `ma_resource_manager_unregister_file()` to register and unregister a file. It does not make sense to use the `MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_STREAM` @@ -2031,7 +2058,7 @@ In the above graph, it starts with two data sources whose outputs are attached t splitter node. It's at this point that the two data sources are mixed. After mixing, the splitter performs it's processing routine and produces two outputs which is simply a duplication of the input stream. One output is attached to a low pass filter, whereas the other output is attached to -a echo/delay. The outputs of the the low pass filter and the echo are attached to the endpoint, and +a echo/delay. The outputs of the low pass filter and the echo are attached to the endpoint, and since they're both connected to the same input bus, they'll be mixed. Each input bus must be configured to accept the same number of channels, but the number of channels @@ -2072,7 +2099,7 @@ data from the graph: ``` When you read audio data, miniaudio starts at the node graph's endpoint node which then pulls in -data from it's input attachments, which in turn recursively pull in data from their inputs, and so +data from its input attachments, which in turn recursively pull in data from their inputs, and so on. At the start of the graph there will be some kind of data source node which will have zero inputs and will instead read directly from a data source. The base nodes don't literally need to read from a `ma_data_source` object, but they will always have some kind of underlying object that @@ -2318,7 +2345,7 @@ You can start and stop a node with the following: By default the node is in a started state, but since it won't be connected to anything won't actually be invoked by the node graph until it's connected. When you stop a node, data will not be -read from any of it's input connections. You can use this property to stop a group of sounds +read from any of its input connections. You can use this property to stop a group of sounds atomically. You can configure the initial state of a node in it's config: @@ -2411,29 +2438,29 @@ audio thread is finished so that control is not handed back to the caller thereb chance to free the node's memory. When the audio thread is processing a node, it does so by reading from each of the output buses of -the node. In order for a node to process data for one of it's output buses, it needs to read from -each of it's input buses, and so on an so forth. It follows that once all output buses of a node +the node. In order for a node to process data for one of its output buses, it needs to read from +each of its input buses, and so on an so forth. It follows that once all output buses of a node are detached, the node as a whole will be disconnected and no further processing will occur unless it's output buses are reattached, which won't be happening when the node is being uninitialized. By having `ma_node_detach_output_bus()` wait until the audio thread is finished with it, we can simplify a few things, at the expense of making `ma_node_detach_output_bus()` a bit slower. By doing this, the implementation of `ma_node_uninit()` becomes trivial - just detach all output -nodes, followed by each of the attachments to each of it's input nodes, and then do any final clean +nodes, followed by each of the attachments to each of its input nodes, and then do any final clean up. With the above design, the worst-case scenario is `ma_node_detach_output_bus()` taking as long as it takes to process the output bus being detached. This will happen if it's called at just the wrong moment where the audio thread has just iterated it and has just started processing. The caller of `ma_node_detach_output_bus()` will stall until the audio thread is finished, which -includes the cost of recursively processing it's inputs. This is the biggest compromise made with -the approach taken by miniaudio for it's lock-free processing system. The cost of detaching nodes +includes the cost of recursively processing its inputs. This is the biggest compromise made with +the approach taken by miniaudio for its lock-free processing system. The cost of detaching nodes earlier in the pipeline (data sources, for example) will be cheaper than the cost of detaching higher level nodes, such as some kind of final post-processing endpoint. If you need to do mass detachments, detach starting from the lowest level nodes and work your way towards the final endpoint node (but don't try detaching the node graph's endpoint). If the audio thread is not running, detachment will be fast and detachment in any order will be the same. The reason nodes need to wait for their input attachments to complete is due to the potential for desyncs between -data sources. If the node was to terminate processing mid way through processing it's inputs, +data sources. If the node was to terminate processing mid way through processing its inputs, there's a chance that some of the underlying data sources will have been read, but then others not. That will then result in a potential desynchronization when detaching and reattaching higher-level nodes. A possible solution to this is to have an option when detaching to terminate processing @@ -2804,7 +2831,7 @@ weights. Custom weights can be passed in as the last parameter of `ma_channel_converter_config_init()`. Predefined channel maps can be retrieved with `ma_channel_map_init_standard()`. This takes a -`ma_standard_channel_map` enum as it's first parameter, which can be one of the following: +`ma_standard_channel_map` enum as its first parameter, which can be one of the following: +-----------------------------------+-----------------------------------------------------------+ | Name | Description | @@ -2890,7 +2917,7 @@ like the following: ma_resample_algorithm_linear); ma_resampler resampler; - ma_result result = ma_resampler_init(&config, &resampler); + ma_result result = ma_resampler_init(&config, NULL, &resampler); if (result != MA_SUCCESS) { // An error occurred... } @@ -3132,7 +3159,7 @@ Biquad filtering is achieved with the `ma_biquad` API. Example: ```c ma_biquad_config config = ma_biquad_config_init(ma_format_f32, channels, b0, b1, b2, a0, a1, a2); - ma_result result = ma_biquad_init(&config, &biquad); + ma_result result = ma_biquad_init(&config, NULL, &biquad); if (result != MA_SUCCESS) { // Error. } @@ -3723,7 +3750,7 @@ extern "C" { #define MA_VERSION_MAJOR 0 #define MA_VERSION_MINOR 11 -#define MA_VERSION_REVISION 21 +#define MA_VERSION_REVISION 22 #define MA_VERSION_STRING MA_XSTRINGIFY(MA_VERSION_MAJOR) "." MA_XSTRINGIFY(MA_VERSION_MINOR) "." MA_XSTRINGIFY(MA_VERSION_REVISION) #if defined(_MSC_VER) && !defined(__clang__) @@ -3740,8 +3767,7 @@ extern "C" { #endif - -#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || defined(_M_IA64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__powerpc64__) +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || defined(_M_IA64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__powerpc64__) || defined(__ppc64__) #define MA_SIZEOF_PTR 8 #else #define MA_SIZEOF_PTR 4 @@ -3805,7 +3831,7 @@ typedef void* ma_handle; typedef void* ma_ptr; /* -ma_proc is annoying because when compiling with GCC we get pendantic warnings about converting +ma_proc is annoying because when compiling with GCC we get pedantic warnings about converting between `void*` and `void (*)()`. We can't use `void (*)()` with MSVC however, because we'll get warning C4191 about "type cast between incompatible function types". To work around this I'm going to use a different data type depending on the compiler. @@ -3999,7 +4025,7 @@ Special wchar_t type to ensure any structures in the public sections that refere consistent size across all platforms. On Windows, wchar_t is 2 bytes, whereas everywhere else it's 4 bytes. Since Windows likes to use -wchar_t for it's IDs, we need a special explicitly sized wchar type that is always 2 bytes on all +wchar_t for its IDs, we need a special explicitly sized wchar type that is always 2 bytes on all platforms. */ #if !defined(MA_POSIX) && defined(MA_WIN32) @@ -4025,7 +4051,7 @@ MA_LOG_LEVEL_INFO callback. MA_LOG_LEVEL_WARNING - Warnings. You should enable this in you development builds and action them when encounted. These + Warnings. You should enable this in you development builds and action them when encountered. These logs usually indicate a potential problem or misconfiguration, but still allow you to keep running. This will never be called from within the data callback. @@ -5457,7 +5483,7 @@ input frames. MA_API ma_result ma_resampler_get_expected_output_frame_count(const ma_resampler* pResampler, ma_uint64 inputFrameCount, ma_uint64* pOutputFrameCount); /* -Resets the resampler's timer and clears it's internal cache. +Resets the resampler's timer and clears its internal cache. */ MA_API ma_result ma_resampler_reset(ma_resampler* pResampler); @@ -5678,7 +5704,7 @@ MA_API void ma_channel_map_init_standard(ma_standard_channel_map standardChannel /* Copies a channel map. -Both input and output channel map buffers must have a capacity of at at least `channels`. +Both input and output channel map buffers must have a capacity of at least `channels`. */ MA_API void ma_channel_map_copy(ma_channel* pOut, const ma_channel* pIn, ma_uint32 channels); @@ -5817,6 +5843,8 @@ MA_API void ma_data_source_uninit(ma_data_source* pDataSource); MA_API ma_result ma_data_source_read_pcm_frames(ma_data_source* pDataSource, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead); /* Must support pFramesOut = NULL in which case a forward seek should be performed. */ MA_API ma_result ma_data_source_seek_pcm_frames(ma_data_source* pDataSource, ma_uint64 frameCount, ma_uint64* pFramesSeeked); /* Can only seek forward. Equivalent to ma_data_source_read_pcm_frames(pDataSource, NULL, frameCount, &framesRead); */ MA_API ma_result ma_data_source_seek_to_pcm_frame(ma_data_source* pDataSource, ma_uint64 frameIndex); +MA_API ma_result ma_data_source_seek_seconds(ma_data_source* pDataSource, float secondCount, float* pSecondsSeeked); /* Can only seek forward. Abstraction to ma_data_source_seek_pcm_frames() */ +MA_API ma_result ma_data_source_seek_to_second(ma_data_source* pDataSource, float seekPointInSeconds); /* Abstraction to ma_data_source_seek_to_pcm_frame() */ MA_API ma_result ma_data_source_get_data_format(ma_data_source* pDataSource, ma_format* pFormat, ma_uint32* pChannels, ma_uint32* pSampleRate, ma_channel* pChannelMap, size_t channelMapCap); MA_API ma_result ma_data_source_get_cursor_in_pcm_frames(ma_data_source* pDataSource, ma_uint64* pCursor); MA_API ma_result ma_data_source_get_length_in_pcm_frames(ma_data_source* pDataSource, ma_uint64* pLength); /* Returns MA_NOT_IMPLEMENTED if the length is unknown or cannot be determined. Decoders can return this. */ @@ -6182,6 +6210,12 @@ MA_API ma_result ma_event_wait(ma_event* pEvent); Signals the specified auto-reset event. */ MA_API ma_result ma_event_signal(ma_event* pEvent); + + +MA_API ma_result ma_semaphore_init(int initialValue, ma_semaphore* pSemaphore); +MA_API void ma_semaphore_uninit(ma_semaphore* pSemaphore); +MA_API ma_result ma_semaphore_wait(ma_semaphore* pSemaphore); +MA_API ma_result ma_semaphore_release(ma_semaphore* pSemaphore); #endif /* MA_NO_THREADING */ @@ -6273,7 +6307,7 @@ Job Queue /* Slot Allocator -------------- -The idea of the slot allocator is for it to be used in conjunction with a fixed sized buffer. You use the slot allocator to allocator an index that can be used +The idea of the slot allocator is for it to be used in conjunction with a fixed sized buffer. You use the slot allocator to allocate an index that can be used as the insertion point for an object. Slots are reference counted to help mitigate the ABA problem in the lock-free queue we use for tracking jobs. @@ -7006,6 +7040,8 @@ typedef union int nullbackend; /* The null backend uses an integer for device IDs. */ } ma_device_id; +MA_API ma_bool32 ma_device_id_equal(const ma_device_id* pA, const ma_device_id* pB); + typedef struct ma_context_config ma_context_config; typedef struct ma_device_config ma_device_config; @@ -7093,6 +7129,7 @@ struct ma_device_config { const char* pStreamNamePlayback; const char* pStreamNameCapture; + int channelMap; } pulse; struct { @@ -7112,6 +7149,7 @@ struct ma_device_config ma_aaudio_allowed_capture_policy allowedCapturePolicy; ma_bool32 noAutoStartAfterReroute; ma_bool32 enableCompatibilityWorkarounds; + ma_bool32 allowSetBufferCapacity; } aaudio; }; @@ -7184,7 +7222,7 @@ and on output returns detailed information about the device in `ma_device_info`. case when the device ID is NULL, in which case information about the default device needs to be retrieved. Once the context has been created and the device ID retrieved (if using anything other than the default device), the device can be created. -This is a little bit more complicated than initialization of the context due to it's more complicated configuration. When initializing a +This is a little bit more complicated than initialization of the context due to its more complicated configuration. When initializing a device, a duplex device may be requested. This means a separate data format needs to be specified for both playback and capture. On input, the data format is set to what the application wants. On output it's set to the native format which should match as closely as possible to the requested format. The conversion between the format requested by the application and the device's native format will be handled @@ -7205,10 +7243,10 @@ asynchronous reading and writing, `onDeviceStart()` and `onDeviceStop()` should The handling of data delivery between the application and the device is the most complicated part of the process. To make this a bit easier, some helper callbacks are available. If the backend uses a blocking read/write style of API, the `onDeviceRead()` and `onDeviceWrite()` callbacks can optionally be implemented. These are blocking and work just like reading and writing from a file. If the -backend uses a callback for data delivery, that callback must call `ma_device_handle_backend_data_callback()` from within it's callback. +backend uses a callback for data delivery, that callback must call `ma_device_handle_backend_data_callback()` from within its callback. This allows miniaudio to then process any necessary data conversion and then pass it to the miniaudio data callback. -If the backend requires absolute flexibility with it's data delivery, it can optionally implement the `onDeviceDataLoop()` callback +If the backend requires absolute flexibility with its data delivery, it can optionally implement the `onDeviceDataLoop()` callback which will allow it to implement the logic that will run on the audio thread. This is much more advanced and is completely optional. The audio thread should run data delivery logic in a loop while `ma_device_get_state() == ma_device_state_started` and no errors have been @@ -7248,6 +7286,10 @@ struct ma_context_config void* pUserData; ma_allocation_callbacks allocationCallbacks; struct + { + ma_handle hWnd; /* HWND. Optional window handle to pass into SetCooperativeLevel(). Will default to the foreground window, and if that fails, the desktop window. */ + } dsound; + struct { ma_bool32 useVerboseDeviceEnumeration; } alsa; @@ -7336,6 +7378,7 @@ struct ma_context #ifdef MA_SUPPORT_DSOUND struct { + ma_handle hWnd; /* Can be null. */ ma_handle hDSoundDLL; ma_proc DirectSoundCreate; ma_proc DirectSoundEnumerateA; @@ -7942,6 +7985,7 @@ struct ma_device { /*AAudioStream**/ ma_ptr pStreamPlayback; /*AAudioStream**/ ma_ptr pStreamCapture; + ma_mutex rerouteLock; ma_aaudio_usage usage; ma_aaudio_content_type contentType; ma_aaudio_input_preset inputPreset; @@ -8365,6 +8409,10 @@ Retrieves basic information about every active playback and/or capture device. This function will allocate memory internally for the device lists and return a pointer to them through the `ppPlaybackDeviceInfos` and `ppCaptureDeviceInfos` parameters. If you do not want to incur the overhead of these allocations consider using `ma_context_enumerate_devices()` which will instead use a callback. +Note that this only retrieves the ID and name/description of the device. The reason for only retrieving basic information is that it would otherwise require +opening the backend device in order to probe it for more detailed information which can be inefficient. Consider using `ma_context_get_device_info()` for this, +but don't call it from within the enumeration callback. + Parameters ---------- @@ -8406,7 +8454,7 @@ The returned pointers will become invalid upon the next call this this function, See Also -------- -ma_context_get_devices() +ma_context_enumerate_devices() */ MA_API ma_result ma_context_get_devices(ma_context* pContext, ma_device_info** ppPlaybackDeviceInfos, ma_uint32* pPlaybackDeviceCount, ma_device_info** ppCaptureDeviceInfos, ma_uint32* pCaptureDeviceCount); @@ -8545,7 +8593,7 @@ from a microphone. Whether or not you should send or receive data from the devic playback, capture, full-duplex or loopback. (Note that loopback mode is only supported on select backends.) Sending and receiving audio data to and from the device is done via a callback which is fired by miniaudio at periodic time intervals. -The frequency at which data is delivered to and from a device depends on the size of it's period. The size of the period can be defined in terms of PCM frames +The frequency at which data is delivered to and from a device depends on the size of its period. The size of the period can be defined in terms of PCM frames or milliseconds, whichever is more convenient. Generally speaking, the smaller the period, the lower the latency at the expense of higher CPU usage and increased risk of glitching due to the more frequent and granular data deliver intervals. The size of a period will depend on your requirements, but miniaudio's defaults should work fine for most scenarios. If you're building a game you should leave this fairly small, whereas if you're building a simple @@ -8619,7 +8667,7 @@ then be set directly on the structure. Below are the members of the `ma_device_c performanceProfile A hint to miniaudio as to the performance requirements of your program. Can be either `ma_performance_profile_low_latency` (default) or - `ma_performance_profile_conservative`. This mainly affects the size of default buffers and can usually be left at it's default value. + `ma_performance_profile_conservative`. This mainly affects the size of default buffers and can usually be left at its default value. noPreSilencedOutputBuffer When set to true, the contents of the output buffer passed into the data callback will be left undefined. When set to false (default), the contents of @@ -8659,7 +8707,7 @@ then be set directly on the structure. Below are the members of the `ma_device_c A pointer that will passed to callbacks in pBackendVTable. resampling.linear.lpfOrder - The linear resampler applies a low-pass filter as part of it's processing for anti-aliasing. This setting controls the order of the filter. The higher + The linear resampler applies a low-pass filter as part of its processing for anti-aliasing. This setting controls the order of the filter. The higher the value, the better the quality, in general. Setting this to 0 will disable low-pass filtering altogether. The maximum value is `MA_MAX_FILTER_ORDER`. The default value is `min(4, MA_MAX_FILTER_ORDER)`. @@ -8736,6 +8784,9 @@ then be set directly on the structure. Below are the members of the `ma_device_c pulse.pStreamNameCapture PulseAudio only. Sets the stream name for capture. + pulse.channelMap + PulseAudio only. Sets the channel map that is requested from PulseAudio. See MA_PA_CHANNEL_MAP_* constants. Defaults to MA_PA_CHANNEL_MAP_AIFF. + coreaudio.allowNominalSampleRateChange Core Audio only. Desktop only. When enabled, allows the sample rate of the device to be changed at the operating system level. This is disabled by default in order to prevent intrusive changes to the user's system. This is useful if you want to use a sample rate @@ -8909,7 +8960,7 @@ Unsafe. It is not safe to call this inside any callback. Remarks ------- -You only need to use this function if you want to configure the context differently to it's defaults. You should never use this function if you want to manage +You only need to use this function if you want to configure the context differently to its defaults. You should never use this function if you want to manage your own context. See the documentation for `ma_context_init()` for information on the different context configuration options. @@ -9674,7 +9725,7 @@ Utilities ************************************************************************************************************************************************************/ /* -Calculates a buffer size in milliseconds from the specified number of frames and sample rate. +Calculates a buffer size in milliseconds (rounded up) from the specified number of frames and sample rate. */ MA_API ma_uint32 ma_calculate_buffer_size_in_milliseconds_from_frames(ma_uint32 bufferSizeInFrames, ma_uint32 sampleRate); @@ -9931,7 +9982,7 @@ struct ma_decoder void* pInputCache; /* In input format. Can be null if it's not needed. */ ma_uint64 inputCacheCap; /* The capacity of the input cache. */ ma_uint64 inputCacheConsumed; /* The number of frames that have been consumed in the cache. Used for determining the next valid frame. */ - ma_uint64 inputCacheRemaining; /* The number of valid frames remaining in the cahce. */ + ma_uint64 inputCacheRemaining; /* The number of valid frames remaining in the cache. */ ma_allocation_callbacks allocationCallbacks; union { @@ -9972,7 +10023,7 @@ This is not thread safe without your own synchronization. MA_API ma_result ma_decoder_read_pcm_frames(ma_decoder* pDecoder, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead); /* -Seeks to a PCM frame based on it's absolute index. +Seeks to a PCM frame based on its absolute index. This is not thread safe without your own synchronization. */ @@ -10235,7 +10286,8 @@ typedef enum MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_DECODE = 0x00000002, /* Decode data before storing in memory. When set, decoding is done at the resource manager level rather than the mixing thread. Results in faster mixing, but higher memory usage. */ MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC = 0x00000004, /* When set, the resource manager will load the data source asynchronously. */ MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT = 0x00000008, /* When set, waits for initialization of the underlying data source before returning from ma_resource_manager_data_source_init(). */ - MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_UNKNOWN_LENGTH = 0x00000010 /* Gives the resource manager a hint that the length of the data source is unknown and calling `ma_data_source_get_length_in_pcm_frames()` should be avoided. */ + MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_UNKNOWN_LENGTH = 0x00000010, /* Gives the resource manager a hint that the length of the data source is unknown and calling `ma_data_source_get_length_in_pcm_frames()` should be avoided. */ + MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING = 0x00000020 /* When set, configures the data source to loop by default. */ } ma_resource_manager_data_source_flags; @@ -10303,8 +10355,8 @@ typedef struct ma_uint64 rangeEndInPCMFrames; ma_uint64 loopPointBegInPCMFrames; ma_uint64 loopPointEndInPCMFrames; - ma_bool32 isLooping; ma_uint32 flags; + ma_bool32 isLooping; /* Deprecated. Use the MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING flag in `flags` instead. */ } ma_resource_manager_data_source_config; MA_API ma_resource_manager_data_source_config ma_resource_manager_data_source_config_init(void); @@ -10547,6 +10599,16 @@ Node Graph /* Use this when the bus count is determined by the node instance rather than the vtable. */ #define MA_NODE_BUS_COUNT_UNKNOWN 255 + +/* For some internal memory management of ma_node_graph. */ +typedef struct +{ + size_t offset; + size_t sizeInBytes; + unsigned char _data[1]; +} ma_stack; + + typedef struct ma_node_graph ma_node_graph; typedef void ma_node; @@ -10586,7 +10648,7 @@ typedef struct void (* onProcess)(ma_node* pNode, const float** ppFramesIn, ma_uint32* pFrameCountIn, float** ppFramesOut, ma_uint32* pFrameCountOut); /* - A callback for retrieving the number of a input frames that are required to output the + A callback for retrieving the number of input frames that are required to output the specified number of output frames. You would only want to implement this when the node performs resampling. This is optional, even for nodes that perform resampling, but it does offer a small reduction in latency as it allows miniaudio to calculate the exact number of input frames @@ -10671,10 +10733,14 @@ typedef struct ma_node_base ma_node_base; struct ma_node_base { /* These variables are set once at startup. */ - ma_node_graph* pNodeGraph; /* The graph this node belongs to. */ + ma_node_graph* pNodeGraph; /* The graph this node belongs to. */ const ma_node_vtable* vtable; - float* pCachedData; /* Allocated on the heap. Fixed size. Needs to be stored on the heap because reading from output buses is done in separate function calls. */ - ma_uint16 cachedDataCapInFramesPerBus; /* The capacity of the input data cache in frames, per bus. */ + ma_uint32 inputBusCount; + ma_uint32 outputBusCount; + ma_node_input_bus* pInputBuses; + ma_node_output_bus* pOutputBuses; + float* pCachedData; /* Allocated on the heap. Fixed size. Needs to be stored on the heap because reading from output buses is done in separate function calls. */ + ma_uint16 cachedDataCapInFramesPerBus; /* The capacity of the input data cache in frames, per bus. */ /* These variables are read and written only from the audio thread. */ ma_uint16 cachedFrameCountOut; @@ -10682,13 +10748,9 @@ struct ma_node_base ma_uint16 consumedFrameCountIn; /* These variables are read and written between different threads. */ - MA_ATOMIC(4, ma_node_state) state; /* When set to stopped, nothing will be read, regardless of the times in stateTimes. */ - MA_ATOMIC(8, ma_uint64) stateTimes[2]; /* Indexed by ma_node_state. Specifies the time based on the global clock that a node should be considered to be in the relevant state. */ - MA_ATOMIC(8, ma_uint64) localTime; /* The node's local clock. This is just a running sum of the number of output frames that have been processed. Can be modified by any thread with `ma_node_set_time()`. */ - ma_uint32 inputBusCount; - ma_uint32 outputBusCount; - ma_node_input_bus* pInputBuses; - ma_node_output_bus* pOutputBuses; + MA_ATOMIC(4, ma_node_state) state; /* When set to stopped, nothing will be read, regardless of the times in stateTimes. */ + MA_ATOMIC(8, ma_uint64) stateTimes[2]; /* Indexed by ma_node_state. Specifies the time based on the global clock that a node should be considered to be in the relevant state. */ + MA_ATOMIC(8, ma_uint64) localTime; /* The node's local clock. This is just a running sum of the number of output frames that have been processed. Can be modified by any thread with `ma_node_set_time()`. */ /* Memory management. */ ma_node_input_bus _inputBuses[MA_MAX_NODE_LOCAL_BUS_COUNT]; @@ -10724,7 +10786,8 @@ MA_API ma_result ma_node_set_time(ma_node* pNode, ma_uint64 localTime); typedef struct { ma_uint32 channels; - ma_uint16 nodeCacheCapInFrames; + ma_uint32 processingSizeInFrames; /* This is the preferred processing size for node processing callbacks unless overridden by a node itself. Can be 0 in which case it will be based on the frame count passed into ma_node_graph_read_pcm_frames(), but will not be well defined. */ + size_t preMixStackSizeInBytes; /* Defaults to 512KB per channel. Reducing this will save memory, but the depth of your node graph will be more restricted. */ } ma_node_graph_config; MA_API ma_node_graph_config ma_node_graph_config_init(ma_uint32 channels); @@ -10735,10 +10798,15 @@ struct ma_node_graph /* Immutable. */ ma_node_base base; /* The node graph itself is a node so it can be connected as an input to different node graph. This has zero inputs and calls ma_node_graph_read_pcm_frames() to generate it's output. */ ma_node_base endpoint; /* Special node that all nodes eventually connect to. Data is read from this node in ma_node_graph_read_pcm_frames(). */ - ma_uint16 nodeCacheCapInFrames; + float* pProcessingCache; /* This will be allocated when processingSizeInFrames is non-zero. This is needed because ma_node_graph_read_pcm_frames() can be called with a variable number of frames, and we may need to do some buffering in situations where the caller requests a frame count that's not a multiple of processingSizeInFrames. */ + ma_uint32 processingCacheFramesRemaining; + ma_uint32 processingSizeInFrames; /* Read and written by multiple threads. */ MA_ATOMIC(4, ma_bool32) isReading; + + /* Modified only by the audio thread. */ + ma_stack* pPreMixStack; }; MA_API ma_result ma_node_graph_init(const ma_node_graph_config* pConfig, const ma_allocation_callbacks* pAllocationCallbacks, ma_node_graph* pNodeGraph); @@ -11023,6 +11091,7 @@ typedef enum MA_SOUND_FLAG_ASYNC = 0x00000004, /* MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC */ MA_SOUND_FLAG_WAIT_INIT = 0x00000008, /* MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT */ MA_SOUND_FLAG_UNKNOWN_LENGTH = 0x00000010, /* MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_UNKNOWN_LENGTH */ + MA_SOUND_FLAG_LOOPING = 0x00000020, /* MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING */ /* ma_sound specific flags. */ MA_SOUND_FLAG_NO_DEFAULT_ATTACHMENT = 0x00001000, /* Do not attach to the endpoint by default. Useful for when setting up nodes in a complex graph system. */ @@ -11062,7 +11131,7 @@ MA_API ma_engine_node_config ma_engine_node_config_init(ma_engine* pEngine, ma_e /* Base node object for both ma_sound and ma_sound_group. */ typedef struct { - ma_node_base baseNode; /* Must be the first member for compatiblity with the ma_node API. */ + ma_node_base baseNode; /* Must be the first member for compatibility with the ma_node API. */ ma_engine* pEngine; /* A pointer to the engine. Set based on the value from the config. */ ma_uint32 sampleRate; /* The sample rate of the input data. For sounds backed by a data source, this will be the data source's sample rate. Otherwise it'll be the engine's sample rate. */ ma_uint32 volumeSmoothTimeInPCMFrames; @@ -11122,13 +11191,13 @@ typedef struct ma_uint64 rangeEndInPCMFrames; ma_uint64 loopPointBegInPCMFrames; ma_uint64 loopPointEndInPCMFrames; - ma_bool32 isLooping; ma_sound_end_proc endCallback; /* Fired when the sound reaches the end. Will be fired from the audio thread. Do not restart, uninitialize or otherwise change the state of the sound from here. Instead fire an event or set a variable to indicate to a different thread to change the start of the sound. Will not be fired in response to a scheduled stop with ma_sound_set_stop_time_*(). */ void* pEndCallbackUserData; #ifndef MA_NO_RESOURCE_MANAGER ma_resource_manager_pipeline_notifications initNotifications; #endif ma_fence* pDoneFence; /* Deprecated. Use initNotifications instead. Released when the resource manager has finished decoding the entire sound. Not used with streams. */ + ma_bool32 isLooping; /* Deprecated. Use the MA_SOUND_FLAG_LOOPING flag in `flags` instead. */ } ma_sound_config; MA_API ma_sound_config ma_sound_config_init(void); /* Deprecated. Will be removed in version 0.12. Use ma_sound_config_2() instead. */ @@ -11192,6 +11261,7 @@ typedef struct ma_uint32 gainSmoothTimeInFrames; /* The number of frames to interpolate the gain of spatialized sounds across. If set to 0, will use gainSmoothTimeInMilliseconds. */ ma_uint32 gainSmoothTimeInMilliseconds; /* When set to 0, gainSmoothTimeInFrames will be used. If both are set to 0, a default value will be used. */ ma_uint32 defaultVolumeSmoothTimeInPCMFrames; /* Defaults to 0. Controls the default amount of smoothing to apply to volume changes to sounds. High values means more smoothing at the expense of high latency (will take longer to reach the new volume). */ + ma_uint32 preMixStackSizeInBytes; /* A stack is used for internal processing in the node graph. This allows you to configure the size of this stack. Smaller values will reduce the maximum depth of your node graph. You should rarely need to modify this. */ ma_allocation_callbacks allocationCallbacks; ma_bool32 noAutoStart; /* When set to true, requires an explicit call to ma_engine_start(). This is false by default, meaning the engine will be started automatically in ma_engine_init(). */ ma_bool32 noDevice; /* When set to true, don't create a default device. ma_engine_read_pcm_frames() can be called manually to read data. */ @@ -11206,12 +11276,12 @@ MA_API ma_engine_config ma_engine_config_init(void); struct ma_engine { - ma_node_graph nodeGraph; /* An engine is a node graph. It should be able to be plugged into any ma_node_graph API (with a cast) which means this must be the first member of this struct. */ + ma_node_graph nodeGraph; /* An engine is a node graph. It should be able to be plugged into any ma_node_graph API (with a cast) which means this must be the first member of this struct. */ #if !defined(MA_NO_RESOURCE_MANAGER) ma_resource_manager* pResourceManager; #endif #if !defined(MA_NO_DEVICE_IO) - ma_device* pDevice; /* Optionally set via the config, otherwise allocated by the engine in ma_engine_init(). */ + ma_device* pDevice; /* Optionally set via the config, otherwise allocated by the engine in ma_engine_init(). */ #endif ma_log* pLog; ma_uint32 sampleRate; @@ -11220,10 +11290,10 @@ struct ma_engine ma_allocation_callbacks allocationCallbacks; ma_bool8 ownsResourceManager; ma_bool8 ownsDevice; - ma_spinlock inlinedSoundLock; /* For synchronizing access so the inlined sound list. */ - ma_sound_inlined* pInlinedSoundHead; /* The first inlined sound. Inlined sounds are tracked in a linked list. */ - MA_ATOMIC(4, ma_uint32) inlinedSoundCount; /* The total number of allocated inlined sound objects. Used for debugging. */ - ma_uint32 gainSmoothTimeInFrames; /* The number of frames to interpolate the gain of spatialized sounds across. */ + ma_spinlock inlinedSoundLock; /* For synchronizing access to the inlined sound list. */ + ma_sound_inlined* pInlinedSoundHead; /* The first inlined sound. Inlined sounds are tracked in a linked list. */ + MA_ATOMIC(4, ma_uint32) inlinedSoundCount; /* The total number of allocated inlined sound objects. Used for debugging. */ + ma_uint32 gainSmoothTimeInFrames; /* The number of frames to interpolate the gain of spatialized sounds across. */ ma_uint32 defaultVolumeSmoothTimeInPCMFrames; ma_mono_expansion_mode monoExpansionMode; ma_engine_process_proc onProcess; @@ -11348,6 +11418,7 @@ MA_API void ma_sound_set_looping(ma_sound* pSound, ma_bool32 isLooping); MA_API ma_bool32 ma_sound_is_looping(const ma_sound* pSound); MA_API ma_bool32 ma_sound_at_end(const ma_sound* pSound); MA_API ma_result ma_sound_seek_to_pcm_frame(ma_sound* pSound, ma_uint64 frameIndex); /* Just a wrapper around ma_data_source_seek_to_pcm_frame(). */ +MA_API ma_result ma_sound_seek_to_second(ma_sound* pSound, float seekPointInSeconds); /* Abstraction to ma_sound_seek_to_pcm_frame() */ MA_API ma_result ma_sound_get_data_format(ma_sound* pSound, ma_format* pFormat, ma_uint32* pChannels, ma_uint32* pSampleRate, ma_channel* pChannelMap, size_t channelMapCap); MA_API ma_result ma_sound_get_cursor_in_pcm_frames(ma_sound* pSound, ma_uint64* pCursor); MA_API ma_result ma_sound_get_length_in_pcm_frames(ma_sound* pSound, ma_uint64* pLength); @@ -13861,7 +13932,7 @@ static ma_uint32 ma_ffs_32(ma_uint32 x) /* Just a naive implementation just to get things working for now. Will optimize this later. */ for (i = 0; i < 32; i += 1) { - if ((x & (1 << i)) != 0) { + if ((x & (1U << i)) != 0) { return i; } } @@ -14024,7 +14095,7 @@ static MA_INLINE ma_int32 ma_dither_s32(ma_dither_mode ditherMode, ma_int32 dith Atomics **************************************************************************************************************************************************************/ -/* ma_atomic.h begin */ +/* c89atomic.h begin */ #ifndef ma_atomic_h #if defined(__cplusplus) extern "C" { @@ -14750,12 +14821,12 @@ typedef int ma_atomic_memory_order; typedef ma_uint8 ma_atomic_flag; #define ma_atomic_flag_test_and_set_explicit(ptr, order) (ma_bool32)ma_atomic_test_and_set_explicit_8(ptr, order) #define ma_atomic_flag_clear_explicit(ptr, order) ma_atomic_clear_explicit_8(ptr, order) - #define c89atoimc_flag_load_explicit(ptr, order) ma_atomic_load_explicit_8(ptr, order) + #define ma_atomic_flag_load_explicit(ptr, order) ma_atomic_load_explicit_8(ptr, order) #else typedef ma_uint32 ma_atomic_flag; #define ma_atomic_flag_test_and_set_explicit(ptr, order) (ma_bool32)ma_atomic_test_and_set_explicit_32(ptr, order) #define ma_atomic_flag_clear_explicit(ptr, order) ma_atomic_clear_explicit_32(ptr, order) - #define c89atoimc_flag_load_explicit(ptr, order) ma_atomic_load_explicit_32(ptr, order) + #define ma_atomic_flag_load_explicit(ptr, order) ma_atomic_load_explicit_32(ptr, order) #endif #elif defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))) #define MA_ATOMIC_HAS_NATIVE_COMPARE_EXCHANGE @@ -14836,15 +14907,24 @@ typedef int ma_atomic_memory_order; __atomic_compare_exchange_n(dst, &expected, desired, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); return expected; } + #if defined(__clang__) + #pragma clang diagnostic push + #if __clang_major__ >= 8 + #pragma clang diagnostic ignored "-Watomic-alignment" + #endif + #endif static MA_INLINE ma_uint64 ma_atomic_compare_and_swap_64(volatile ma_uint64* dst, ma_uint64 expected, ma_uint64 desired) { __atomic_compare_exchange_n(dst, &expected, desired, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); return expected; } + #if defined(__clang__) + #pragma clang diagnostic pop + #endif typedef ma_uint8 ma_atomic_flag; #define ma_atomic_flag_test_and_set_explicit(dst, order) (ma_bool32)__atomic_test_and_set(dst, order) #define ma_atomic_flag_clear_explicit(dst, order) __atomic_clear(dst, order) - #define c89atoimc_flag_load_explicit(ptr, order) ma_atomic_load_explicit_8(ptr, order) + #define ma_atomic_flag_load_explicit(ptr, order) ma_atomic_load_explicit_8(ptr, order) #else #define ma_atomic_memory_order_relaxed 1 #define ma_atomic_memory_order_consume 2 @@ -15358,7 +15438,7 @@ typedef int ma_atomic_memory_order; typedef ma_uint8 ma_atomic_flag; #define ma_atomic_flag_test_and_set_explicit(ptr, order) (ma_bool32)ma_atomic_test_and_set_explicit_8(ptr, order) #define ma_atomic_flag_clear_explicit(ptr, order) ma_atomic_clear_explicit_8(ptr, order) - #define c89atoimc_flag_load_explicit(ptr, order) ma_atomic_load_explicit_8(ptr, order) + #define ma_atomic_flag_load_explicit(ptr, order) ma_atomic_load_explicit_8(ptr, order) #endif #if !defined(MA_ATOMIC_HAS_NATIVE_COMPARE_EXCHANGE) #if defined(MA_ATOMIC_HAS_8) @@ -15883,7 +15963,7 @@ static MA_INLINE void ma_atomic_spinlock_lock(volatile ma_atomic_spinlock* pSpin if (ma_atomic_flag_test_and_set_explicit(pSpinlock, ma_atomic_memory_order_acquire) == 0) { break; } - while (c89atoimc_flag_load_explicit(pSpinlock, ma_atomic_memory_order_relaxed) == 1) { + while (ma_atomic_flag_load_explicit(pSpinlock, ma_atomic_memory_order_relaxed) == 1) { } } } @@ -15898,7 +15978,7 @@ static MA_INLINE void ma_atomic_spinlock_unlock(volatile ma_atomic_spinlock* pSp } #endif #endif -/* ma_atomic.h end */ +/* c89atomic.h end */ #define MA_ATOMIC_SAFE_TYPE_IMPL(c89TypeExtension, type) \ static MA_INLINE ma_##type ma_atomic_##type##_get(ma_atomic_##type* x) \ @@ -16096,7 +16176,7 @@ static ma_result ma_thread_create__posix(ma_thread* pThread, ma_thread_priority int result; pthread_attr_t* pAttr = NULL; -#if !defined(__EMSCRIPTEN__) +#if !defined(__EMSCRIPTEN__) && !defined(__3DS__) /* Try setting the thread priority. It's not critical if anything fails here. */ pthread_attr_t attr; if (pthread_attr_init(&attr) == 0) { @@ -16142,19 +16222,34 @@ static ma_result ma_thread_create__posix(ma_thread* pThread, ma_thread_priority if (priority == ma_thread_priority_idle) { sched.sched_priority = priorityMin; } else if (priority == ma_thread_priority_realtime) { - sched.sched_priority = priorityMax; - } else { - sched.sched_priority += ((int)priority + 5) * priorityStep; /* +5 because the lowest priority is -5. */ - if (sched.sched_priority < priorityMin) { - sched.sched_priority = priorityMin; + #if defined(MA_PTHREAD_REALTIME_THREAD_PRIORITY) + { + sched.sched_priority = MA_PTHREAD_REALTIME_THREAD_PRIORITY; } - if (sched.sched_priority > priorityMax) { + #else + { sched.sched_priority = priorityMax; } + #endif + } else { + sched.sched_priority += ((int)priority + 5) * priorityStep; /* +5 because the lowest priority is -5. */ } - /* I'm not treating a failure of setting the priority as a critical error so not checking the return value here. */ - pthread_attr_setschedparam(&attr, &sched); + if (sched.sched_priority < priorityMin) { + sched.sched_priority = priorityMin; + } + if (sched.sched_priority > priorityMax) { + sched.sched_priority = priorityMax; + } + + /* I'm not treating a failure of setting the priority as a critical error so not aborting on failure here. */ + if (pthread_attr_setschedparam(&attr, &sched) == 0) { + #if !defined(MA_ANDROID) || (defined(__ANDROID_API__) && __ANDROID_API__ >= 28) + { + pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); + } + #endif + } } } } @@ -16187,7 +16282,7 @@ static void ma_thread_wait__posix(ma_thread* pThread) static ma_result ma_mutex_init__posix(ma_mutex* pMutex) { int result; - + if (pMutex == NULL) { return MA_INVALID_ARGS; } @@ -17406,7 +17501,7 @@ static ma_job_proc g_jobVTable[MA_JOB_TYPE_COUNT] = /* Device. */ #if !defined(MA_NO_DEVICE_IO) - ma_job_process__device__aaudio_reroute /*MA_JOB_TYPE_DEVICE_AAUDIO_REROUTE*/ + ma_job_process__device__aaudio_reroute /* MA_JOB_TYPE_DEVICE_AAUDIO_REROUTE */ #endif }; @@ -17751,7 +17846,7 @@ MA_API ma_result ma_job_queue_next(ma_job_queue* pQueue, ma_job* pJob) is stored. One thread can fall through to the freeing of this item while another is still using "head" for the retrieval of the "next" variable. - The slot allocator might need to make use of some reference counting to ensure it's only truely freed when + The slot allocator might need to make use of some reference counting to ensure it's only truly freed when there are no more references to the item. This must be fixed before removing these locks. */ @@ -17859,7 +17954,16 @@ MA_API void ma_dlclose(ma_log* pLog, ma_handle handle) #ifdef MA_WIN32 FreeLibrary((HMODULE)handle); #else - dlclose((void*)handle); + /* Hack for Android bug (see https://github.com/android/ndk/issues/360). Calling dlclose() pre-API 28 may segfault. */ + #if !defined(MA_ANDROID) || (defined(__ANDROID_API__) && __ANDROID_API__ >= 28) + { + dlclose((void*)handle); + } + #else + { + (void)handle; + } + #endif #endif (void)pLog; @@ -17880,12 +17984,12 @@ MA_API ma_proc ma_dlsym(ma_log* pLog, ma_handle handle, const char* symbol) #ifdef _WIN32 proc = (ma_proc)GetProcAddress((HMODULE)handle, symbol); #else -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) +#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))) || defined(__clang__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif proc = (ma_proc)dlsym((void*)handle, symbol); -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) +#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))) || defined(__clang__) #pragma GCC diagnostic pop #endif #endif @@ -17923,9 +18027,13 @@ DEVICE I/O #endif #endif +#ifdef MA_APPLE + #include +#endif + #ifndef MA_NO_DEVICE_IO -#if defined(MA_APPLE) && (__MAC_OS_X_VERSION_MIN_REQUIRED < 101200) +#if defined(MA_APPLE) && (MAC_OS_X_VERSION_MIN_REQUIRED < 101200) #include /* For mach_absolute_time() */ #endif @@ -17939,6 +18047,10 @@ DEVICE I/O #endif #endif +/* This must be set to at least 26. */ +#ifndef MA_AAUDIO_MIN_ANDROID_SDK_VERSION +#define MA_AAUDIO_MIN_ANDROID_SDK_VERSION 27 +#endif MA_API void ma_device_info_add_native_data_format(ma_device_info* pDeviceInfo, ma_format format, ma_uint32 channels, ma_uint32 sampleRate, ma_uint32 flags) @@ -18085,7 +18197,7 @@ MA_API ma_bool32 ma_is_backend_enabled(ma_backend backend) #if defined(MA_HAS_AAUDIO) #if defined(MA_ANDROID) { - return ma_android_sdk_version() >= 26; + return ma_android_sdk_version() >= MA_AAUDIO_MIN_ANDROID_SDK_VERSION; } #else return MA_FALSE; @@ -18402,7 +18514,6 @@ typedef LONG (WINAPI * MA_PFN_RegCloseKey)(HKEY hKey); typedef LONG (WINAPI * MA_PFN_RegQueryValueExA)(HKEY hKey, const char* lpValueName, DWORD* lpReserved, DWORD* lpType, BYTE* lpData, DWORD* lpcbData); #endif /* MA_WIN32_DESKTOP */ - MA_API size_t ma_strlen_WCHAR(const WCHAR* str) { size_t len = 0; @@ -18487,7 +18598,7 @@ Timing return (double)(counter.QuadPart - pTimer->counter) / g_ma_TimerFrequency.QuadPart; } -#elif defined(MA_APPLE) && (__MAC_OS_X_VERSION_MIN_REQUIRED < 101200) +#elif defined(MA_APPLE) && (MAC_OS_X_VERSION_MIN_REQUIRED < 101200) static ma_uint64 g_ma_TimerFrequency = 0; static void ma_timer_init(ma_timer* pTimer) { @@ -18670,11 +18781,16 @@ static void ma_device__on_notification_rerouted(ma_device* pDevice) #endif #if defined(MA_EMSCRIPTEN) -EMSCRIPTEN_KEEPALIVE -void ma_device__on_notification_unlocked(ma_device* pDevice) +#ifdef __cplusplus +extern "C" { +#endif +void EMSCRIPTEN_KEEPALIVE ma_device__on_notification_unlocked(ma_device* pDevice) { ma_device__on_notification(ma_device_notification_init(pDevice, ma_device_notification_type_unlocked)); } +#ifdef __cplusplus +} +#endif #endif @@ -18802,7 +18918,7 @@ static void ma_device__handle_data_callback(ma_device* pDevice, void* pFramesOut unsigned int prevDenormalState = ma_device_disable_denormals(pDevice); { /* Volume control of input makes things a bit awkward because the input buffer is read-only. We'll need to use a temp buffer and loop in this case. */ - if (pFramesIn != NULL && masterVolumeFactor < 1) { + if (pFramesIn != NULL && masterVolumeFactor != 1) { ma_uint8 tempFramesIn[MA_DATA_CONVERTER_STACK_BUFFER_SIZE]; ma_uint32 bpfCapture = ma_get_bytes_per_frame(pDevice->capture.format, pDevice->capture.channels); ma_uint32 bpfPlayback = ma_get_bytes_per_frame(pDevice->playback.format, pDevice->playback.channels); @@ -18825,7 +18941,7 @@ static void ma_device__handle_data_callback(ma_device* pDevice, void* pFramesOut /* Volume control and clipping for playback devices. */ if (pFramesOut != NULL) { - if (masterVolumeFactor < 1) { + if (masterVolumeFactor != 1) { if (pFramesIn == NULL) { /* <-- In full-duplex situations, the volume will have been applied to the input samples before the data callback. Applying it again post-callback will incorrectly compound it. */ ma_apply_volume_factor_pcm_frames(pFramesOut, frameCount, pDevice->playback.format, pDevice->playback.channels, masterVolumeFactor); } @@ -18837,6 +18953,11 @@ static void ma_device__handle_data_callback(ma_device* pDevice, void* pFramesOut } } ma_device_restore_denormals(pDevice, prevDenormalState); + } else { + /* No data callback. Just silence the output. */ + if (pFramesOut != NULL) { + ma_silence_pcm_frames(pFramesOut, frameCount, pDevice->playback.format, pDevice->playback.channels); + } } } @@ -18922,9 +19043,7 @@ static void ma_device__read_frames_from_client(ma_device* pDevice, ma_uint32 fra framesToReadThisIterationIn = requiredInputFrameCount; } - if (framesToReadThisIterationIn > 0) { - ma_device__handle_data_callback(pDevice, pIntermediaryBuffer, NULL, (ma_uint32)framesToReadThisIterationIn); - } + ma_device__handle_data_callback(pDevice, pIntermediaryBuffer, NULL, (ma_uint32)framesToReadThisIterationIn); /* At this point we have our decoded data in input format and now we need to convert to output format. Note that even if we didn't read any @@ -18965,7 +19084,7 @@ static void ma_device__send_frames_to_client(ma_device* pDevice, ma_uint32 frame ma_uint64 totalClientFramesProcessed = 0; const void* pRunningFramesInDeviceFormat = pFramesInDeviceFormat; - /* We just keep going until we've exhaused all of our input frames and cannot generate any more output frames. */ + /* We just keep going until we've exhausted all of our input frames and cannot generate any more output frames. */ for (;;) { ma_uint64 deviceFramesProcessedThisIteration; ma_uint64 clientFramesProcessedThisIteration; @@ -19248,7 +19367,7 @@ static ma_result ma_device_audio_thread__default_read_write(ma_device* pDevice) } /* - If we weren't able to generate any output frames it must mean we've exhaused all of our input. The only time this would not be the case is if capturedClientData was too small + If we weren't able to generate any output frames it must mean we've exhausted all of our input. The only time this would not be the case is if capturedClientData was too small which should never be the case when it's of the size MA_DATA_CONVERTER_STACK_BUFFER_SIZE. */ if (capturedClientFramesToProcessThisIteration == 0) { @@ -19451,7 +19570,7 @@ static ma_result ma_device_do_operation__null(ma_device* pDevice, ma_uint32 oper /* The first thing to do is wait for an operation slot to become available. We only have a single slot for this, but we could extend this later - to support queing of operations. + to support queuing of operations. */ result = ma_semaphore_wait(&pDevice->null_device.operationSemaphore); if (result != MA_SUCCESS) { @@ -21268,7 +21387,7 @@ static ma_result ma_context_get_device_info_from_IAudioClient__wasapi(ma_context } /* - Exlcusive Mode. We repeatedly call IsFormatSupported() here. This is not currently supported on + Exclusive Mode. We repeatedly call IsFormatSupported() here. This is not currently supported on UWP. Failure to retrieve the exclusive mode format is not considered an error, so from here on out, MA_SUCCESS is guaranteed to be returned. */ @@ -21473,8 +21592,23 @@ static ma_result ma_context_get_MMDevice__wasapi(ma_context* pContext, ma_device MA_ASSERT(pContext != NULL); MA_ASSERT(ppMMDevice != NULL); - hr = ma_CoCreateInstance(pContext, &MA_CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &MA_IID_IMMDeviceEnumerator, (void**)&pDeviceEnumerator); - if (FAILED(hr)) { + /* + This weird COM init/uninit here is a hack to work around a crash when changing devices. What is happening is + WASAPI fires a callback from another thread when the device is changed. It's from that thread where this + function is getting called. What I'm suspecting is that the other thread is not initializing COM which in turn + results in CoCreateInstance() failing. + + The community has reported that this seems to fix the crash. There are future plans to move all WASAPI operation + over to a single thread to make everything safer, but in the meantime while we wait for that to come online I'm + happy enough to use this hack instead. + */ + ma_CoInitializeEx(pContext, NULL, MA_COINIT_VALUE); + { + hr = ma_CoCreateInstance(pContext, &MA_CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &MA_IID_IMMDeviceEnumerator, (void**)&pDeviceEnumerator); + } + ma_CoUninitialize(pContext); + + if (FAILED(hr)) { /* <-- This is checking the call above to ma_CoCreateInstance(). */ ma_log_postf(ma_context_get_log(pContext), MA_LOG_LEVEL_ERROR, "[WASAPI] Failed to create IMMDeviceEnumerator.\n"); return ma_result_from_HRESULT(hr); } @@ -21506,7 +21640,7 @@ static ma_result ma_context_get_device_id_from_MMDevice__wasapi(ma_context* pCon size_t idlen = ma_strlen_WCHAR(pDeviceIDString); if (idlen+1 > ma_countof(pDeviceID->wasapi)) { ma_CoTaskMemFree(pContext, pDeviceIDString); - MA_ASSERT(MA_FALSE); /* NOTE: If this is triggered, please report it. It means the format of the ID must haved change and is too long to fit in our fixed sized buffer. */ + MA_ASSERT(MA_FALSE); /* NOTE: If this is triggered, please report it. It means the format of the ID must have changed and is too long to fit in our fixed sized buffer. */ return MA_ERROR; } @@ -21950,12 +22084,16 @@ static ma_result ma_device_uninit__wasapi(ma_device* pDevice) { MA_ASSERT(pDevice != NULL); -#if defined(MA_WIN32_DESKTOP) || defined(MA_WIN32_GDK) - if (pDevice->wasapi.pDeviceEnumerator) { - ((ma_IMMDeviceEnumerator*)pDevice->wasapi.pDeviceEnumerator)->lpVtbl->UnregisterEndpointNotificationCallback((ma_IMMDeviceEnumerator*)pDevice->wasapi.pDeviceEnumerator, &pDevice->wasapi.notificationClient); - ma_IMMDeviceEnumerator_Release((ma_IMMDeviceEnumerator*)pDevice->wasapi.pDeviceEnumerator); + #if defined(MA_WIN32_DESKTOP) || defined(MA_WIN32_GDK) + { + if (pDevice->wasapi.pDeviceEnumerator) { + ((ma_IMMDeviceEnumerator*)pDevice->wasapi.pDeviceEnumerator)->lpVtbl->UnregisterEndpointNotificationCallback((ma_IMMDeviceEnumerator*)pDevice->wasapi.pDeviceEnumerator, &pDevice->wasapi.notificationClient); + ma_IMMDeviceEnumerator_Release((ma_IMMDeviceEnumerator*)pDevice->wasapi.pDeviceEnumerator); + } + + ma_mutex_uninit(&pDevice->wasapi.rerouteLock); } -#endif + #endif if (pDevice->wasapi.pRenderClient) { if (pDevice->wasapi.pMappedBufferPlayback != NULL) { @@ -22256,7 +22394,7 @@ static ma_result ma_device_init_internal__wasapi(ma_context* pContext, ma_device MA_REFERENCE_TIME bufferDuration = periodDurationInMicroseconds * pData->periodsOut * 10; /* - If the periodicy is too small, Initialize() will fail with AUDCLNT_E_INVALID_DEVICE_PERIOD. In this case we should just keep increasing + If the periodicity is too small, Initialize() will fail with AUDCLNT_E_INVALID_DEVICE_PERIOD. In this case we should just keep increasing it and trying it again. */ hr = E_FAIL; @@ -22266,7 +22404,7 @@ static ma_result ma_device_init_internal__wasapi(ma_context* pContext, ma_device if (bufferDuration > 500*10000) { break; } else { - if (bufferDuration == 0) { /* <-- Just a sanity check to prevent an infinit loop. Should never happen, but it makes me feel better. */ + if (bufferDuration == 0) { /* <-- Just a sanity check to prevent an infinite loop. Should never happen, but it makes me feel better. */ break; } @@ -23005,6 +23143,14 @@ static ma_result ma_device_stop__wasapi_nolock(ma_device* pDevice) } if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex || pDevice->type == ma_device_type_loopback) { + /* If we have a mapped buffer we need to release it. */ + if (pDevice->wasapi.pMappedBufferCapture != NULL) { + ma_IAudioCaptureClient_ReleaseBuffer((ma_IAudioCaptureClient*)pDevice->wasapi.pCaptureClient, pDevice->wasapi.mappedBufferCaptureCap); + pDevice->wasapi.pMappedBufferCapture = NULL; + pDevice->wasapi.mappedBufferCaptureCap = 0; + pDevice->wasapi.mappedBufferCaptureLen = 0; + } + hr = ma_IAudioClient_Stop((ma_IAudioClient*)pDevice->wasapi.pAudioClientCapture); if (FAILED(hr)) { ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_ERROR, "[WASAPI] Failed to stop internal capture device."); @@ -23018,31 +23164,34 @@ static ma_result ma_device_stop__wasapi_nolock(ma_device* pDevice) return ma_result_from_HRESULT(hr); } - /* If we have a mapped buffer we need to release it. */ - if (pDevice->wasapi.pMappedBufferCapture != NULL) { - ma_IAudioCaptureClient_ReleaseBuffer((ma_IAudioCaptureClient*)pDevice->wasapi.pCaptureClient, pDevice->wasapi.mappedBufferCaptureCap); - pDevice->wasapi.pMappedBufferCapture = NULL; - pDevice->wasapi.mappedBufferCaptureCap = 0; - pDevice->wasapi.mappedBufferCaptureLen = 0; - } - ma_atomic_bool32_set(&pDevice->wasapi.isStartedCapture, MA_FALSE); } if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { + if (pDevice->wasapi.pMappedBufferPlayback != NULL) { + ma_silence_pcm_frames( + ma_offset_pcm_frames_ptr(pDevice->wasapi.pMappedBufferPlayback, pDevice->wasapi.mappedBufferPlaybackLen, pDevice->playback.internalFormat, pDevice->playback.internalChannels), + pDevice->wasapi.mappedBufferPlaybackCap - pDevice->wasapi.mappedBufferPlaybackLen, + pDevice->playback.internalFormat, pDevice->playback.internalChannels + ); + ma_IAudioRenderClient_ReleaseBuffer((ma_IAudioRenderClient*)pDevice->wasapi.pRenderClient, pDevice->wasapi.mappedBufferPlaybackCap, 0); + pDevice->wasapi.pMappedBufferPlayback = NULL; + pDevice->wasapi.mappedBufferPlaybackCap = 0; + pDevice->wasapi.mappedBufferPlaybackLen = 0; + } + /* The buffer needs to be drained before stopping the device. Not doing this will result in the last few frames not getting output to the speakers. This is a problem for very short sounds because it'll result in a significant portion of it not getting played. */ if (ma_atomic_bool32_get(&pDevice->wasapi.isStartedPlayback)) { /* We need to make sure we put a timeout here or else we'll risk getting stuck in a deadlock in some cases. */ - DWORD waitTime = pDevice->wasapi.actualBufferSizeInFramesPlayback / pDevice->playback.internalSampleRate; + DWORD waitTime = (pDevice->wasapi.actualBufferSizeInFramesPlayback * 1000) / pDevice->playback.internalSampleRate; if (pDevice->playback.shareMode == ma_share_mode_exclusive) { WaitForSingleObject((HANDLE)pDevice->wasapi.hEventPlayback, waitTime); - } - else { - ma_uint32 prevFramesAvaialablePlayback = (ma_uint32)-1; + } else { + ma_uint32 prevFramesAvailablePlayback = (ma_uint32)-1; ma_uint32 framesAvailablePlayback; for (;;) { result = ma_device__get_available_frames__wasapi(pDevice, (ma_IAudioClient*)pDevice->wasapi.pAudioClientPlayback, &framesAvailablePlayback); @@ -23058,13 +23207,13 @@ static ma_result ma_device_stop__wasapi_nolock(ma_device* pDevice) Just a safety check to avoid an infinite loop. If this iteration results in a situation where the number of available frames has not changed, get out of the loop. I don't think this should ever happen, but I think it's nice to have just in case. */ - if (framesAvailablePlayback == prevFramesAvaialablePlayback) { + if (framesAvailablePlayback == prevFramesAvailablePlayback) { break; } - prevFramesAvaialablePlayback = framesAvailablePlayback; + prevFramesAvailablePlayback = framesAvailablePlayback; - WaitForSingleObject((HANDLE)pDevice->wasapi.hEventPlayback, waitTime * 1000); ResetEvent((HANDLE)pDevice->wasapi.hEventPlayback); /* Manual reset. */ + WaitForSingleObject((HANDLE)pDevice->wasapi.hEventPlayback, waitTime); } } } @@ -23076,19 +23225,20 @@ static ma_result ma_device_stop__wasapi_nolock(ma_device* pDevice) } /* The audio client needs to be reset otherwise restarting will fail. */ - hr = ma_IAudioClient_Reset((ma_IAudioClient*)pDevice->wasapi.pAudioClientPlayback); + { + ma_int32 retries = 5; + + while ((hr = ma_IAudioClient_Reset((ma_IAudioClient*)pDevice->wasapi.pAudioClientPlayback)) == MA_AUDCLNT_E_BUFFER_OPERATION_PENDING && retries > 0) { + ma_sleep(10); + retries -= 1; + } + } + if (FAILED(hr)) { ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_ERROR, "[WASAPI] Failed to reset internal playback device."); return ma_result_from_HRESULT(hr); } - if (pDevice->wasapi.pMappedBufferPlayback != NULL) { - ma_IAudioRenderClient_ReleaseBuffer((ma_IAudioRenderClient*)pDevice->wasapi.pRenderClient, pDevice->wasapi.mappedBufferPlaybackCap, 0); - pDevice->wasapi.pMappedBufferPlayback = NULL; - pDevice->wasapi.mappedBufferPlaybackCap = 0; - pDevice->wasapi.mappedBufferPlaybackLen = 0; - } - ma_atomic_bool32_set(&pDevice->wasapi.isStartedPlayback, MA_FALSE); } @@ -23655,6 +23805,13 @@ DirectSound Backend #define MA_DSBPLAY_TERMINATEBY_DISTANCE 0x00000010 #define MA_DSBPLAY_TERMINATEBY_PRIORITY 0x00000020 +#define MA_DSBSTATUS_PLAYING 0x00000001 +#define MA_DSBSTATUS_BUFFERLOST 0x00000002 +#define MA_DSBSTATUS_LOOPING 0x00000004 +#define MA_DSBSTATUS_LOCHARDWARE 0x00000008 +#define MA_DSBSTATUS_LOCSOFTWARE 0x00000010 +#define MA_DSBSTATUS_TERMINATED 0x00000020 + #define MA_DSCBSTART_LOOPING 0x00000001 typedef struct @@ -24024,9 +24181,12 @@ static ma_result ma_context_create_IDirectSound__dsound(ma_context* pContext, ma } /* The cooperative level must be set before doing anything else. */ - hWnd = ((MA_PFN_GetForegroundWindow)pContext->win32.GetForegroundWindow)(); + hWnd = (HWND)pContext->dsound.hWnd; if (hWnd == 0) { - hWnd = ((MA_PFN_GetDesktopWindow)pContext->win32.GetDesktopWindow)(); + hWnd = ((MA_PFN_GetForegroundWindow)pContext->win32.GetForegroundWindow)(); + if (hWnd == 0) { + hWnd = ((MA_PFN_GetDesktopWindow)pContext->win32.GetDesktopWindow)(); + } } hr = ma_IDirectSound_SetCooperativeLevel(pDirectSound, hWnd, (shareMode == ma_share_mode_exclusive) ? MA_DSSCL_EXCLUSIVE : MA_DSSCL_PRIORITY); @@ -24530,8 +24690,8 @@ static ma_result ma_device_init__dsound(ma_device* pDevice, const ma_device_conf } /* - Unfortunately DirectSound uses different APIs and data structures for playback and catpure devices. We need to initialize - the capture device first because we'll want to match it's buffer size and period count on the playback side if we're using + Unfortunately DirectSound uses different APIs and data structures for playback and capture devices. We need to initialize + the capture device first because we'll want to match its buffer size and period count on the playback side if we're using full-duplex mode. */ if (pConfig->deviceType == ma_device_type_capture || pConfig->deviceType == ma_device_type_duplex) { @@ -24814,6 +24974,7 @@ static ma_result ma_device_data_loop__dsound(ma_device* pDevice) ma_bool32 isPlaybackDeviceStarted = MA_FALSE; ma_uint32 framesWrittenToPlaybackDevice = 0; /* For knowing whether or not the playback device needs to be started. */ ma_uint32 waitTimeInMilliseconds = 1; + DWORD playbackBufferStatus = 0; MA_ASSERT(pDevice != NULL); @@ -25142,6 +25303,20 @@ static ma_result ma_device_data_loop__dsound(ma_device* pDevice) break; } + hr = ma_IDirectSoundBuffer_GetStatus((ma_IDirectSoundBuffer*)pDevice->dsound.pPlaybackBuffer, &playbackBufferStatus); + if (SUCCEEDED(hr) && (playbackBufferStatus & MA_DSBSTATUS_PLAYING) == 0 && isPlaybackDeviceStarted) { + ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_INFO, "[DirectSound] Attempting to resume audio due to state: %d.", (int)playbackBufferStatus); + hr = ma_IDirectSoundBuffer_Play((ma_IDirectSoundBuffer*)pDevice->dsound.pPlaybackBuffer, 0, 0, MA_DSBPLAY_LOOPING); + if (FAILED(hr)) { + ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_ERROR, "[DirectSound] IDirectSoundBuffer_Play() failed after attempting to resume from state %d.", (int)playbackBufferStatus); + return ma_result_from_HRESULT(hr); + } + + isPlaybackDeviceStarted = MA_TRUE; + ma_sleep(waitTimeInMilliseconds); + continue; + } + if (physicalPlayCursorInBytes < prevPlayCursorInBytesPlayback) { physicalPlayCursorLoopFlagPlayback = !physicalPlayCursorLoopFlagPlayback; } @@ -25343,6 +25518,8 @@ static ma_result ma_context_init__dsound(ma_context* pContext, const ma_context_ return MA_API_NOT_FOUND; } + pContext->dsound.hWnd = pConfig->dsound.hWnd; + pCallbacks->onContextInit = ma_context_init__dsound; pCallbacks->onContextUninit = ma_context_uninit__dsound; pCallbacks->onContextEnumerateDevices = ma_context_enumerate_devices__dsound; @@ -25665,7 +25842,7 @@ static ma_result ma_context_get_device_info_from_WAVECAPS(ma_context* pContext, - If the name GUID is not present in the registry we'll also need to stick to the original 31 characters. - I like consistency, so I want the returned device names to be consistent with those returned by WASAPI and DirectSound. The problem, however is that WASAPI and DirectSound use " ()" format (such as "Speakers (High Definition Audio)"), - but WinMM does not specificy the component name. From my admittedly limited testing, I've notice the component name seems to + but WinMM does not specify the component name. From my admittedly limited testing, I've notice the component name seems to usually fit within the 31 characters of the fixed sized buffer, so what I'm going to do is parse that string for the component name, and then concatenate the name from the registry. */ @@ -25933,7 +26110,7 @@ static ma_result ma_device_init__winmm(ma_device* pDevice, const ma_device_confi return MA_DEVICE_TYPE_NOT_SUPPORTED; } - /* No exlusive mode with WinMM. */ + /* No exclusive mode with WinMM. */ if (((pConfig->deviceType == ma_device_type_playback || pConfig->deviceType == ma_device_type_duplex) && pDescriptorPlayback->shareMode == ma_share_mode_exclusive) || ((pConfig->deviceType == ma_device_type_capture || pConfig->deviceType == ma_device_type_duplex) && pDescriptorCapture->shareMode == ma_share_mode_exclusive)) { return MA_SHARE_MODE_NOT_SUPPORTED; @@ -25955,7 +26132,7 @@ static ma_result ma_device_init__winmm(ma_device* pDevice, const ma_device_confi /* We use an event to know when a new fragment needs to be enqueued. */ pDevice->winmm.hEventCapture = (ma_handle)CreateEventA(NULL, TRUE, TRUE, NULL); if (pDevice->winmm.hEventCapture == NULL) { - errorMsg = "[WinMM] Failed to create event for fragment enqueing for the capture device.", errorCode = ma_result_from_GetLastError(GetLastError()); + errorMsg = "[WinMM] Failed to create event for fragment enqueuing for the capture device.", errorCode = ma_result_from_GetLastError(GetLastError()); goto on_error; } @@ -25993,7 +26170,7 @@ static ma_result ma_device_init__winmm(ma_device* pDevice, const ma_device_confi /* We use an event to know when a new fragment needs to be enqueued. */ pDevice->winmm.hEventPlayback = (ma_handle)CreateEventA(NULL, TRUE, TRUE, NULL); if (pDevice->winmm.hEventPlayback == NULL) { - errorMsg = "[WinMM] Failed to create event for fragment enqueing for the playback device.", errorCode = ma_result_from_GetLastError(GetLastError()); + errorMsg = "[WinMM] Failed to create event for fragment enqueuing for the playback device.", errorCode = ma_result_from_GetLastError(GetLastError()); goto on_error; } @@ -27115,7 +27292,7 @@ static ma_result ma_context_open_pcm__alsa(ma_context* pContext, ma_share_mode s /* We're trying to open a specific device. There's a few things to consider here: - miniaudio recongnizes a special format of device id that excludes the "hw", "dmix", etc. prefix. It looks like this: ":0,0", ":0,1", etc. When + miniaudio recognizes a special format of device id that excludes the "hw", "dmix", etc. prefix. It looks like this: ":0,0", ":0,1", etc. When an ID of this format is specified, it indicates to miniaudio that it can try different combinations of plugins ("hw", "dmix", etc.) until it finds an appropriate one that works. This comes in very handy when trying to open a device in shared mode ("dmix"), vs exclusive mode ("hw"). */ @@ -27214,7 +27391,7 @@ static ma_result ma_context_enumerate_devices__alsa(ma_context* pContext, ma_enu /* At this point, hwid looks like "hw:0,0". In simplified enumeration mode, we actually want to strip off the plugin name so it looks like ":0,0". The reason for this is that this special format is detected at device - initialization time and is used as an indicator to try and use the most appropriate plugin depending on the + initialization time and is used as an indicator to try to use the most appropriate plugin depending on the device type and sharing mode. */ char* dst = hwid; @@ -27393,7 +27570,7 @@ static void ma_context_iterate_rates_and_add_native_data_format__alsa(ma_context ((ma_snd_pcm_hw_params_get_rate_min_proc)pContext->alsa.snd_pcm_hw_params_get_rate_min)(pHWParams, &minSampleRate, &sampleRateDir); ((ma_snd_pcm_hw_params_get_rate_max_proc)pContext->alsa.snd_pcm_hw_params_get_rate_max)(pHWParams, &maxSampleRate, &sampleRateDir); - /* Make sure our sample rates are clamped to sane values. Stupid devices like "pulse" will reports rates like "1" which is ridiculus. */ + /* Make sure our sample rates are clamped to sane values. Stupid devices like "pulse" will reports rates like "1" which is ridiculous. */ minSampleRate = ma_clamp(minSampleRate, (unsigned int)ma_standard_sample_rate_min, (unsigned int)ma_standard_sample_rate_max); maxSampleRate = ma_clamp(maxSampleRate, (unsigned int)ma_standard_sample_rate_min, (unsigned int)ma_standard_sample_rate_max); @@ -27469,10 +27646,10 @@ static ma_result ma_context_get_device_info__alsa(ma_context* pContext, ma_devic /* Some ALSA devices can support many permutations of formats, channels and rates. We only support a fixed number of permutations which means we need to employ some strategies to ensure the best - combinations are returned. An example is the "pulse" device which can do it's own data conversion + combinations are returned. An example is the "pulse" device which can do its own data conversion in software and as a result can support any combination of format, channels and rate. - We want to ensure the the first data formats are the best. We have a list of favored sample + We want to ensure that the first data formats are the best. We have a list of favored sample formats and sample rates, so these will be the basis of our iteration. */ @@ -28050,7 +28227,21 @@ static ma_result ma_device_start__alsa(ma_device* pDevice) } if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { - /* Don't need to do anything for playback because it'll be started automatically when enough data has been written. */ + /* + When data is written to the device we wait for the device to get ready to receive data with poll(). In my testing + I have observed that poll() can sometimes block forever unless the device is started explicitly with snd_pcm_start() + or some data is written with snd_pcm_writei(). + + To resolve this I've decided to do an explicit start with snd_pcm_start(). The problem with this is that the device + is started without any data in the internal buffer which will result in an immediate underrun. If instead we were + to call into snd_pcm_writei() in an attempt to prevent the underrun, we would run the risk of a weird deadlock + issue as documented inside ma_device_write__alsa(). + */ + resultALSA = ((ma_snd_pcm_start_proc)pDevice->pContext->alsa.snd_pcm_start)((ma_snd_pcm_t*)pDevice->alsa.pPCMPlayback); + if (resultALSA < 0) { + ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_ERROR, "[ALSA] Failed to start playback device."); + return ma_result_from_errno(-resultALSA); + } } return MA_SUCCESS; @@ -28063,6 +28254,7 @@ static ma_result ma_device_stop__alsa(ma_device* pDevice) a small chance that our wakeupfd has not been cleared. We'll clear that out now if applicable. */ int resultPoll; + int resultRead; if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) { ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, "[ALSA] Dropping capture device...\n"); @@ -28077,12 +28269,15 @@ static ma_result ma_device_stop__alsa(ma_device* pDevice) ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, "[ALSA] Preparing capture device successful.\n"); } - /* Clear the wakeupfd. */ - resultPoll = poll((struct pollfd*)pDevice->alsa.pPollDescriptorsCapture, 1, 0); - if (resultPoll > 0) { - ma_uint64 t; - read(((struct pollfd*)pDevice->alsa.pPollDescriptorsCapture)[0].fd, &t, sizeof(t)); - } + /* Clear the wakeupfd. */ + resultPoll = poll((struct pollfd*)pDevice->alsa.pPollDescriptorsCapture, 1, 0); + if (resultPoll > 0) { + ma_uint64 t; + resultRead = read(((struct pollfd*)pDevice->alsa.pPollDescriptorsCapture)[0].fd, &t, sizeof(t)); + if (resultRead != sizeof(t)) { + ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, "[ALSA] Failed to read from capture wakeupfd. read() = %d\n", resultRead); + } + } } if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { @@ -28099,12 +28294,14 @@ static ma_result ma_device_stop__alsa(ma_device* pDevice) } /* Clear the wakeupfd. */ - resultPoll = poll((struct pollfd*)pDevice->alsa.pPollDescriptorsPlayback, 1, 0); - if (resultPoll > 0) { - ma_uint64 t; - read(((struct pollfd*)pDevice->alsa.pPollDescriptorsPlayback)[0].fd, &t, sizeof(t)); - } - + resultPoll = poll((struct pollfd*)pDevice->alsa.pPollDescriptorsPlayback, 1, 0); + if (resultPoll > 0) { + ma_uint64 t; + resultRead = read(((struct pollfd*)pDevice->alsa.pPollDescriptorsPlayback)[0].fd, &t, sizeof(t)); + if (resultRead != sizeof(t)) { + ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, "[ALSA] Failed to read from playback wakeupfd. read() = %d\n", resultRead); + } + } } return MA_SUCCESS; @@ -28117,13 +28314,20 @@ static ma_result ma_device_wait__alsa(ma_device* pDevice, ma_snd_pcm_t* pPCM, st int resultALSA; int resultPoll = poll(pPollDescriptors, pollDescriptorCount, -1); if (resultPoll < 0) { - ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_ERROR, "[ALSA] poll() failed.\n"); - return ma_result_from_errno(errno); + ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_WARNING, "[ALSA] poll() failed.\n"); + + /* + There have been reports that poll() is returning an error randomly and that instead of + returning an error, simply trying again will work. I'm experimenting with adopting this + advice. + */ + continue; + /*return ma_result_from_errno(errno);*/ } /* Before checking the ALSA poll descriptor flag we need to check if the wakeup descriptor - has had it's POLLIN flag set. If so, we need to actually read the data and then exit + has had it's POLLIN flag set. If so, we need to actually read the data and then exit the function. The wakeup descriptor will be the first item in the descriptors buffer. */ if ((pPollDescriptors[0].revents & POLLIN) != 0) { @@ -28152,7 +28356,7 @@ static ma_result ma_device_wait__alsa(ma_device* pDevice, ma_snd_pcm_t* pPCM, st ma_snd_pcm_state_t state = ((ma_snd_pcm_state_proc)pDevice->pContext->alsa.snd_pcm_state)(pPCM); if (state == MA_SND_PCM_STATE_XRUN) { /* The PCM is in a xrun state. This will be recovered from at a higher level. We can disregard this. */ - } else { + } else { ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_WARNING, "[ALSA] POLLERR detected. status = %d\n", ((ma_snd_pcm_state_proc)pDevice->pContext->alsa.snd_pcm_state)(pPCM)); } } @@ -28585,7 +28789,7 @@ static ma_result ma_context_init__alsa(ma_context* pContext, const ma_context_co return MA_SUCCESS; } -#endif /* ALSA */ +#endif /* MA_HAS_ALSA */ @@ -28596,7 +28800,7 @@ PulseAudio Backend ******************************************************************************/ #ifdef MA_HAS_PULSEAUDIO /* -The PulseAudio API, along with Apple's Core Audio, is the worst of the maintream audio APIs. This is a brief description of what's going on +The PulseAudio API, along with Apple's Core Audio, is the worst of the mainstream audio APIs. This is a brief description of what's going on in the PulseAudio backend. I apologize if this gets a bit ranty for your liking - you might want to skip this discussion. PulseAudio has something they call the "Simple API", which unfortunately isn't suitable for miniaudio. I've not seen anywhere where it @@ -28611,7 +28815,7 @@ get fun, and I don't mean that in a good way... The problems start with the very name of the API - "asynchronous". Yes, this is an asynchronous oriented API which means your commands don't immediately take effect. You instead need to issue your commands, and then wait for them to complete. The waiting mechanism is -enabled through the use of a "main loop". In the asychronous API you cannot get away from the main loop, and the main loop is where almost +enabled through the use of a "main loop". In the asynchronous API you cannot get away from the main loop, and the main loop is where almost all of PulseAudio's problems stem from. When you first initialize PulseAudio you need an object referred to as "main loop". You can implement this yourself by defining your own @@ -28661,7 +28865,7 @@ because PulseAudio takes it literally, specifically the "can be". You would thin writing and reading data to and from the stream, and that would be right, except when it's not. When you initialize the stream, you can set a flag that tells PulseAudio to not start the stream automatically. This is required because miniaudio does not auto-start devices straight after initialization - you need to call `ma_device_start()` manually. The problem is that even when this flag is specified, -PulseAudio will immediately fire it's write or read callback. This is *technically* correct (based on the wording in the documentation) +PulseAudio will immediately fire its write or read callback. This is *technically* correct (based on the wording in the documentation) because indeed, data *can* be written at this point. The problem is that it's not *practical*. It makes sense that the write/read callback would be where a program will want to write or read data to or from the stream, but when it's called before the application has even requested that the stream be started, it's just not practical because the program probably isn't ready for any kind of data delivery at @@ -30039,16 +30243,18 @@ static ma_pa_buffer_attr ma_device__pa_buffer_attr_new(ma_uint32 periodSizeInFra static ma_pa_stream* ma_device__pa_stream_new__pulse(ma_device* pDevice, const char* pStreamName, const ma_pa_sample_spec* ss, const ma_pa_channel_map* cmap) { - static int g_StreamCounter = 0; + static ma_atomic_uint32 g_StreamCounter = { 0 }; char actualStreamName[256]; if (pStreamName != NULL) { ma_strncpy_s(actualStreamName, sizeof(actualStreamName), pStreamName, (size_t)-1); } else { - ma_strcpy_s(actualStreamName, sizeof(actualStreamName), "miniaudio:"); - ma_itoa_s(g_StreamCounter, actualStreamName + 8, sizeof(actualStreamName)-8, 10); /* 8 = strlen("miniaudio:") */ + const char* pBaseName = "miniaudio:"; + size_t baseNameLen = strlen(pBaseName); + ma_strcpy_s(actualStreamName, sizeof(actualStreamName), pBaseName); + ma_itoa_s((int)ma_atomic_uint32_get(&g_StreamCounter), actualStreamName + baseNameLen, sizeof(actualStreamName)-baseNameLen, 10); } - g_StreamCounter += 1; + ma_atomic_uint32_fetch_add(&g_StreamCounter, 1); return ((ma_pa_stream_new_proc)pDevice->pContext->pulse.pa_stream_new)((ma_pa_context*)pDevice->pulse.pPulseContext, actualStreamName, ss, cmap); } @@ -30302,6 +30508,7 @@ static ma_result ma_device_init__pulse(ma_device* pDevice, const ma_device_confi ma_pa_buffer_attr attr; const ma_pa_sample_spec* pActualSS = NULL; const ma_pa_buffer_attr* pActualAttr = NULL; + const ma_pa_channel_map* pActualChannelMap = NULL; ma_uint32 iChannel; ma_pa_stream_flags_t streamFlags; @@ -30362,7 +30569,7 @@ static ma_result ma_device_init__pulse(ma_device* pDevice, const ma_device_confi } /* Use a default channel map. */ - ((ma_pa_channel_map_init_extend_proc)pDevice->pContext->pulse.pa_channel_map_init_extend)(&cmap, ss.channels, MA_PA_CHANNEL_MAP_DEFAULT); + ((ma_pa_channel_map_init_extend_proc)pDevice->pContext->pulse.pa_channel_map_init_extend)(&cmap, ss.channels, pConfig->pulse.channelMap); /* Use the requested sample rate if one was specified. */ if (pDescriptorCapture->sampleRate != 0) { @@ -30451,7 +30658,12 @@ static ma_result ma_device_init__pulse(ma_device* pDevice, const ma_device_confi goto on_error4; } + /* Internal channel map. */ + pActualChannelMap = ((ma_pa_stream_get_channel_map_proc)pDevice->pContext->pulse.pa_stream_get_channel_map)((ma_pa_stream*)pDevice->pulse.pStreamCapture); + if (pActualChannelMap == NULL) { + pActualChannelMap = &cmap; /* Fallback just in case. */ + } /* Bug in PipeWire. There have been reports that PipeWire is returning AUX channels when reporting @@ -30461,8 +30673,8 @@ static ma_result ma_device_init__pulse(ma_device* pDevice, const ma_device_confi fixed sooner than later. I might remove this hack later. */ if (pDescriptorCapture->channels > 2) { - for (iChannel = 0; iChannel < pDescriptorCapture->channels; ++iChannel) { - pDescriptorCapture->channelMap[iChannel] = ma_channel_position_from_pulse(cmap.map[iChannel]); + for (iChannel = 0; iChannel < pDescriptorCapture->channels; iChannel += 1) { + pDescriptorCapture->channelMap[iChannel] = ma_channel_position_from_pulse(pActualChannelMap->map[iChannel]); } } else { /* Hack for mono and stereo. */ @@ -30509,7 +30721,7 @@ static ma_result ma_device_init__pulse(ma_device* pDevice, const ma_device_confi } /* Use a default channel map. */ - ((ma_pa_channel_map_init_extend_proc)pDevice->pContext->pulse.pa_channel_map_init_extend)(&cmap, ss.channels, MA_PA_CHANNEL_MAP_DEFAULT); + ((ma_pa_channel_map_init_extend_proc)pDevice->pContext->pulse.pa_channel_map_init_extend)(&cmap, ss.channels, pConfig->pulse.channelMap); /* Use the requested sample rate if one was specified. */ @@ -30603,7 +30815,12 @@ static ma_result ma_device_init__pulse(ma_device* pDevice, const ma_device_confi goto on_error4; } + /* Internal channel map. */ + pActualChannelMap = ((ma_pa_stream_get_channel_map_proc)pDevice->pContext->pulse.pa_stream_get_channel_map)((ma_pa_stream*)pDevice->pulse.pStreamPlayback); + if (pActualChannelMap == NULL) { + pActualChannelMap = &cmap; /* Fallback just in case. */ + } /* Bug in PipeWire. There have been reports that PipeWire is returning AUX channels when reporting @@ -30613,8 +30830,8 @@ static ma_result ma_device_init__pulse(ma_device* pDevice, const ma_device_confi fixed sooner than later. I might remove this hack later. */ if (pDescriptorPlayback->channels > 2) { - for (iChannel = 0; iChannel < pDescriptorPlayback->channels; ++iChannel) { - pDescriptorPlayback->channelMap[iChannel] = ma_channel_position_from_pulse(cmap.map[iChannel]); + for (iChannel = 0; iChannel < pDescriptorPlayback->channels; iChannel += 1) { + pDescriptorPlayback->channelMap[iChannel] = ma_channel_position_from_pulse(pActualChannelMap->map[iChannel]); } } else { /* Hack for mono and stereo. */ @@ -31767,7 +31984,7 @@ static ma_result ma_context_init__jack(ma_context* pContext, const ma_context_co return MA_SUCCESS; } -#endif /* JACK */ +#endif /* MA_HAS_JACK */ @@ -31858,7 +32075,7 @@ that supports this level of detail. There was some public domain sample code I s and AudioUnit APIs, but I couldn't see anything that gave low-level control over device selection and capabilities (the distinction between playback and capture in particular). Therefore, miniaudio is using the AudioObject API. -Most (all?) functions in the AudioObject API take a AudioObjectID as it's input. This is the device identifier. When +Most (all?) functions in the AudioObject API take a AudioObjectID as its input. This is the device identifier. When retrieving global information, such as the device list, you use kAudioObjectSystemObject. When retrieving device-specific data, you pass in the ID for that device. In order to retrieve device-specific IDs you need to enumerate over each of the devices. This is done using the AudioObjectGetPropertyDataSize() and AudioObjectGetPropertyData() APIs which seem to be @@ -32193,6 +32410,12 @@ static ma_result ma_get_channel_map_from_AudioChannelLayout(AudioChannelLayout* #define AUDIO_OBJECT_PROPERTY_ELEMENT kAudioObjectPropertyElementMaster #endif +/* kAudioDevicePropertyScope* were renamed to kAudioObjectPropertyScope* in 10.8. */ +#if !defined(MAC_OS_X_VERSION_10_8) || (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_8) +#define kAudioObjectPropertyScopeInput kAudioDevicePropertyScopeInput +#define kAudioObjectPropertyScopeOutput kAudioDevicePropertyScopeOutput +#endif + static ma_result ma_get_device_object_ids__coreaudio(ma_context* pContext, UInt32* pDeviceCount, AudioObjectID** ppDeviceObjectIDs) /* NOTE: Free the returned buffer with ma_free(). */ { AudioObjectPropertyAddress propAddressDevices; @@ -32782,7 +33005,7 @@ static ma_result ma_find_best_format__coreaudio(ma_context* pContext, AudioObjec desiredSampleRate = sampleRate; if (desiredSampleRate == 0) { - desiredSampleRate = pOrigFormat->mSampleRate; + desiredSampleRate = (ma_uint32)pOrigFormat->mSampleRate; } desiredChannelCount = channels; @@ -33425,7 +33648,7 @@ static OSStatus ma_on_output__coreaudio(void* pUserData, AudioUnitRenderActionFl } } else { /* This is the deinterleaved case. We need to update each buffer in groups of internalChannels. This assumes each buffer is the same size. */ - MA_ASSERT(pDevice->playback.internalChannels <= MA_MAX_CHANNELS); /* This should heve been validated at initialization time. */ + MA_ASSERT(pDevice->playback.internalChannels <= MA_MAX_CHANNELS); /* This should have been validated at initialization time. */ /* For safety we'll check that the internal channels is a multiple of the buffer count. If it's not it means something @@ -33516,11 +33739,12 @@ static OSStatus ma_on_input__coreaudio(void* pUserData, AudioUnitRenderActionFla */ for (iBuffer = 0; iBuffer < pRenderedBufferList->mNumberBuffers; ++iBuffer) { pRenderedBufferList->mBuffers[iBuffer].mDataByteSize = pDevice->coreaudio.audioBufferCapInFrames * ma_get_bytes_per_sample(pDevice->capture.internalFormat) * pRenderedBufferList->mBuffers[iBuffer].mNumberChannels; + /*printf("DEBUG: nDataByteSize = %d\n", (int)pRenderedBufferList->mBuffers[iBuffer].mDataByteSize);*/ } status = ((ma_AudioUnitRender_proc)pDevice->pContext->coreaudio.AudioUnitRender)((AudioUnit)pDevice->coreaudio.audioUnitCapture, pActionFlags, pTimeStamp, busNumber, frameCount, pRenderedBufferList); if (status != noErr) { - ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, " ERROR: AudioUnitRender() failed with %d.\n", (int)status); + ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_DEBUG, "ERROR: AudioUnitRender() failed with %d.\n", (int)status); return status; } @@ -33756,7 +33980,7 @@ static ma_result ma_context__init_device_tracking__coreaudio(ma_context* pContex ma_spinlock_lock(&g_DeviceTrackingInitLock_CoreAudio); { - /* Don't do anything if we've already initializd device tracking. */ + /* Don't do anything if we've already initialized device tracking. */ if (g_DeviceTrackingInitCounter_CoreAudio == 0) { AudioObjectPropertyAddress propAddress; propAddress.mScope = kAudioObjectPropertyScopeGlobal; @@ -34068,11 +34292,11 @@ typedef struct static ma_result ma_device_init_internal__coreaudio(ma_context* pContext, ma_device_type deviceType, const ma_device_id* pDeviceID, ma_device_init_internal_data__coreaudio* pData, void* pDevice_DoNotReference) /* <-- pDevice is typed as void* intentionally so as to avoid accidentally referencing it. */ { - ma_result result; + ma_result result = MA_SUCCESS; OSStatus status; UInt32 enableIOFlag; AudioStreamBasicDescription bestFormat; - UInt32 actualPeriodSizeInFrames; + ma_uint32 actualPeriodSizeInFrames; AURenderCallbackStruct callbackInfo; #if defined(MA_APPLE_DESKTOP) AudioObjectID deviceObjectID; @@ -34224,7 +34448,7 @@ static ma_result ma_device_init_internal__coreaudio(ma_context* pContext, ma_dev returning a result code of -10863. I have also tried changing the format directly on the input scope on the input bus, but this just results in `ca_require: IsStreamFormatWritable(inScope, inElement) NotWritable` when trying to set the format. - Something that does seem to work, however, has been setting the nominal sample rate on the deivce object. The problem with + Something that does seem to work, however, has been setting the nominal sample rate on the device object. The problem with this, however, is that it actually changes the sample rate at the operating system level and not just the application. This could be intrusive to the user, however, so I don't think it's wise to make this the default. Instead I'm making this a configuration option. When the `coreaudio.allowNominalSampleRateChange` config option is set to true, changing the sample @@ -34275,15 +34499,28 @@ static ma_result ma_device_init_internal__coreaudio(ma_context* pContext, ma_dev /* I've had a report that the channel count returned by AudioUnitGetProperty above is inconsistent with AVAudioSession outputNumberOfChannels. I'm going to try using the AVAudioSession values instead. + + UPDATE 20/02/2025: + When testing on the simulator with an iPhone 15 and iOS 17 I get an error when initializing the audio + unit if set the input channels to pAudioSession.inputNumberOfChannels. What is happening is the channel + count returned from AudioUnitGetProperty() above is set to 2, but pAudioSession is reporting a channel + count of 1. When this happens, the call to AudioUnitSetProprty() below just down below will succeed, but + AudioUnitInitialize() further down will fail. The only solution I have come up with is to not set the + channel count to pAudioSession.inputNumberOfChannels. */ if (deviceType == ma_device_type_playback) { bestFormat.mChannelsPerFrame = (UInt32)pAudioSession.outputNumberOfChannels; } + + #if 0 if (deviceType == ma_device_type_capture) { + /*printf("DEBUG: bestFormat.mChannelsPerFrame = %d; pAudioSession.inputNumberOfChannels = %d\n", (int)bestFormat.mChannelsPerFrame, (int)pAudioSession.inputNumberOfChannels);*/ bestFormat.mChannelsPerFrame = (UInt32)pAudioSession.inputNumberOfChannels; } + #endif } + status = ((ma_AudioUnitSetProperty_proc)pContext->coreaudio.AudioUnitSetProperty)(pData->audioUnit, kAudioUnitProperty_StreamFormat, formatScope, formatElement, &bestFormat, sizeof(bestFormat)); if (status != noErr) { ((ma_AudioComponentInstanceDispose_proc)pContext->coreaudio.AudioComponentInstanceDispose)(pData->audioUnit); @@ -34303,7 +34540,7 @@ static ma_result ma_device_init_internal__coreaudio(ma_context* pContext, ma_dev } pData->channelsOut = bestFormat.mChannelsPerFrame; - pData->sampleRateOut = bestFormat.mSampleRate; + pData->sampleRateOut = (ma_uint32)bestFormat.mSampleRate; } /* Clamp the channel count for safety. */ @@ -34610,7 +34847,7 @@ static ma_result ma_device_init__coreaudio(ma_device* pDevice, const ma_device_c ma_get_AudioObject_uid(pDevice->pContext, pDevice->coreaudio.deviceObjectIDCapture, sizeof(pDevice->capture.id.coreaudio), pDevice->capture.id.coreaudio); /* - If we are using the default device we'll need to listen for changes to the system's default device so we can seemlessly + If we are using the default device we'll need to listen for changes to the system's default device so we can seamlessly switch the device in the background. */ if (pConfig->capture.pDeviceID == NULL) { @@ -34674,7 +34911,7 @@ static ma_result ma_device_init__coreaudio(ma_device* pDevice, const ma_device_c ma_get_AudioObject_uid(pDevice->pContext, pDevice->coreaudio.deviceObjectIDPlayback, sizeof(pDevice->playback.id.coreaudio), pDevice->playback.id.coreaudio); /* - If we are using the default device we'll need to listen for changes to the system's default device so we can seemlessly + If we are using the default device we'll need to listen for changes to the system's default device so we can seamlessly switch the device in the background. */ if (pDescriptorPlayback->pDeviceID == NULL && (pConfig->deviceType != ma_device_type_duplex || pDescriptorCapture->pDeviceID != NULL)) { @@ -34992,7 +35229,7 @@ static ma_result ma_context_init__coreaudio(ma_context* pContext, const ma_conte return MA_SUCCESS; } -#endif /* Core Audio */ +#endif /* MA_HAS_COREAUDIO */ @@ -35484,7 +35721,7 @@ static ma_result ma_device_uninit__sndio(ma_device* pDevice) ((ma_sio_close_proc)pDevice->pContext->sndio.sio_close)((struct ma_sio_hdl*)pDevice->sndio.handleCapture); } - if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) { + if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { ((ma_sio_close_proc)pDevice->pContext->sndio.sio_close)((struct ma_sio_hdl*)pDevice->sndio.handlePlayback); } @@ -35839,7 +36076,7 @@ static ma_result ma_context_init__sndio(ma_context* pContext, const ma_context_c (void)pConfig; return MA_SUCCESS; } -#endif /* sndio */ +#endif /* MA_HAS_SNDIO */ @@ -35857,6 +36094,10 @@ audio(4) Backend #include #include +#ifdef __NetBSD__ +#include +#endif + #if defined(__OpenBSD__) #include #if defined(OpenBSD) && OpenBSD >= 201709 @@ -36076,9 +36317,15 @@ static ma_result ma_context_get_device_info_from_fd__audio4(ma_context* pContext ma_uint32 channels; ma_uint32 sampleRate; +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 900000000) + if (ioctl(fd, AUDIO_GETFORMAT, &fdInfo) < 0) { + return MA_ERROR; + } +#else if (ioctl(fd, AUDIO_GETINFO, &fdInfo) < 0) { return MA_ERROR; } +#endif if (deviceType == ma_device_type_playback) { channels = fdInfo.play.channels; @@ -36356,7 +36603,11 @@ static ma_result ma_device_init_fd__audio4(ma_device* pDevice, const ma_device_c /* We're using a default device. Get the info from the /dev/audioctl file instead of /dev/audio. */ int fdctl = open(pDefaultDeviceCtlNames[iDefaultDevice], fdFlags, 0); if (fdctl != -1) { +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 900000000) + fdInfoResult = ioctl(fdctl, AUDIO_GETFORMAT, &fdInfo); +#else fdInfoResult = ioctl(fdctl, AUDIO_GETINFO, &fdInfo); +#endif close(fdctl); } } @@ -36723,7 +36974,7 @@ static ma_result ma_context_init__audio4(ma_context* pContext, const ma_context_ return MA_SUCCESS; } -#endif /* audio4 */ +#endif /* MA_HAS_AUDIO4 */ /****************************************************************************** @@ -37086,7 +37337,7 @@ static ma_result ma_device_init_fd__oss(ma_device* pDevice, const ma_device_conf } /* - The OSS documantation is very clear about the order we should be initializing the device's properties: + The OSS documentation is very clear about the order we should be initializing the device's properties: 1) Format 2) Channels 3) Sample rate. @@ -37354,7 +37605,7 @@ static ma_result ma_context_init__oss(ma_context* pContext, const ma_context_con return MA_SUCCESS; } -#endif /* OSS */ +#endif /* MA_HAS_OSS */ @@ -37367,7 +37618,9 @@ AAudio Backend ******************************************************************************/ #ifdef MA_HAS_AAUDIO -/*#include */ +#ifdef MA_NO_RUNTIME_LINKING + #include +#endif typedef int32_t ma_aaudio_result_t; typedef int32_t ma_aaudio_direction_t; @@ -37580,9 +37833,7 @@ static void ma_stream_error_callback__aaudio(ma_AAudioStream* pStream, void* pUs MA_ASSERT(pDevice != NULL); (void)error; - ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_INFO, "[AAudio] ERROR CALLBACK: error=%d, AAudioStream_getState()=%d\n", error, ((MA_PFN_AAudioStream_getState)pDevice->pContext->aaudio.AAudioStream_getState)(pStream)); - /* When we get an error, we'll assume that the stream is in an erroneous state and needs to be restarted. From the documentation, we cannot do this from the error callback. Therefore we are going to use an event thread for the AAudio backend to do this @@ -37610,7 +37861,9 @@ static ma_aaudio_data_callback_result_t ma_stream_data_callback_capture__aaudio( ma_device* pDevice = (ma_device*)pUserData; MA_ASSERT(pDevice != NULL); - ma_device_handle_backend_data_callback(pDevice, NULL, pAudioData, frameCount); + if (frameCount > 0) { + ma_device_handle_backend_data_callback(pDevice, NULL, pAudioData, (ma_uint32)frameCount); + } (void)pStream; return MA_AAUDIO_CALLBACK_RESULT_CONTINUE; @@ -37621,7 +37874,14 @@ static ma_aaudio_data_callback_result_t ma_stream_data_callback_playback__aaudio ma_device* pDevice = (ma_device*)pUserData; MA_ASSERT(pDevice != NULL); - ma_device_handle_backend_data_callback(pDevice, pAudioData, NULL, frameCount); + /* + I've had a report that AAudio can sometimes post a frame count of 0. We need to check for that here + so we don't get any errors at a deeper level. I'm doing the same with the capture side for safety, + though I've not yet had any reports about that one. + */ + if (frameCount > 0) { + ma_device_handle_backend_data_callback(pDevice, pAudioData, NULL, (ma_uint32)frameCount); + } (void)pStream; return MA_AAUDIO_CALLBACK_RESULT_CONTINUE; @@ -37656,32 +37916,25 @@ static ma_result ma_create_and_configure_AAudioStreamBuilder__aaudio(ma_context* ((MA_PFN_AAudioStreamBuilder_setSampleRate)pContext->aaudio.AAudioStreamBuilder_setSampleRate)(pBuilder, pDescriptor->sampleRate); } - if (deviceType == ma_device_type_capture) { - if (pDescriptor->channels != 0) { - ((MA_PFN_AAudioStreamBuilder_setChannelCount)pContext->aaudio.AAudioStreamBuilder_setChannelCount)(pBuilder, pDescriptor->channels); - } - if (pDescriptor->format != ma_format_unknown) { - ((MA_PFN_AAudioStreamBuilder_setFormat)pContext->aaudio.AAudioStreamBuilder_setFormat)(pBuilder, (pDescriptor->format == ma_format_s16) ? MA_AAUDIO_FORMAT_PCM_I16 : MA_AAUDIO_FORMAT_PCM_FLOAT); - } - } else { - if (pDescriptor->channels != 0) { - ((MA_PFN_AAudioStreamBuilder_setChannelCount)pContext->aaudio.AAudioStreamBuilder_setChannelCount)(pBuilder, pDescriptor->channels); - } - if (pDescriptor->format != ma_format_unknown) { - ((MA_PFN_AAudioStreamBuilder_setFormat)pContext->aaudio.AAudioStreamBuilder_setFormat)(pBuilder, (pDescriptor->format == ma_format_s16) ? MA_AAUDIO_FORMAT_PCM_I16 : MA_AAUDIO_FORMAT_PCM_FLOAT); - } + if (pDescriptor->channels != 0) { + ((MA_PFN_AAudioStreamBuilder_setChannelCount)pContext->aaudio.AAudioStreamBuilder_setChannelCount)(pBuilder, pDescriptor->channels); + } + + if (pDescriptor->format != ma_format_unknown) { + ((MA_PFN_AAudioStreamBuilder_setFormat)pContext->aaudio.AAudioStreamBuilder_setFormat)(pBuilder, (pDescriptor->format == ma_format_s16) ? MA_AAUDIO_FORMAT_PCM_I16 : MA_AAUDIO_FORMAT_PCM_FLOAT); } /* - There have been reports where setting the frames per data callback results in an error - later on from Android. To address this, I'm experimenting with simply not setting it on - anything from Android 11 and earlier. Suggestions welcome on how we might be able to make - this more targetted. + There have been reports where setting the frames per data callback results in an error. + In particular, re-routing may inadvertently switch from low-latency mode, resulting in a less stable + stream from the legacy path (AudioStreamLegacy). To address this, we simply don't set the value. It + can still be set if it's explicitly requested via the aaudio.allowSetBufferCapacity variable in the + device config. */ - if (!pConfig->aaudio.enableCompatibilityWorkarounds || ma_android_sdk_version() > 30) { + if ((!pConfig->aaudio.enableCompatibilityWorkarounds || ma_android_sdk_version() > 30) && pConfig->aaudio.allowSetBufferCapacity) { /* - AAudio is annoying when it comes to it's buffer calculation stuff because it doesn't let you + AAudio is annoying when it comes to its buffer calculation stuff because it doesn't let you retrieve the actual sample rate until after you've opened the stream. But you need to configure the buffer capacity before you open the stream... :/ @@ -37715,7 +37968,11 @@ static ma_result ma_create_and_configure_AAudioStreamBuilder__aaudio(ma_context* ((MA_PFN_AAudioStreamBuilder_setDataCallback)pContext->aaudio.AAudioStreamBuilder_setDataCallback)(pBuilder, ma_stream_data_callback_playback__aaudio, (void*)pDevice); } - /* Not sure how this affects things, but since there's a mapping between miniaudio's performance profiles and AAudio's performance modes, let go ahead and set it. */ + /* + If we set AAUDIO_PERFORMANCE_MODE_LOW_LATENCY, we allow for MMAP (non-legacy path). + Since there's a mapping between miniaudio's performance profiles and AAudio's performance modes, let's use it. + Beware though, with a conservative performance profile, AAudio will indeed take the legacy path. + */ ((MA_PFN_AAudioStreamBuilder_setPerformanceMode)pContext->aaudio.AAudioStreamBuilder_setPerformanceMode)(pBuilder, (pConfig->performanceProfile == ma_performance_profile_low_latency) ? MA_AAUDIO_PERFORMANCE_MODE_LOW_LATENCY : MA_AAUDIO_PERFORMANCE_MODE_NONE); /* We need to set an error callback to detect device changes. */ @@ -37751,6 +38008,9 @@ static ma_result ma_open_stream_basic__aaudio(ma_context* pContext, const ma_dev return result; } + /* Let's give AAudio a hint to avoid the legacy path (AudioStreamLegacy). */ + ((MA_PFN_AAudioStreamBuilder_setPerformanceMode)pContext->aaudio.AAudioStreamBuilder_setPerformanceMode)(pBuilder, MA_AAUDIO_PERFORMANCE_MODE_LOW_LATENCY); + return ma_open_stream_and_close_builder__aaudio(pContext, pBuilder, ppStream); } @@ -37775,6 +38035,10 @@ static ma_result ma_open_stream__aaudio(ma_device* pDevice, const ma_device_conf static ma_result ma_close_stream__aaudio(ma_context* pContext, ma_AAudioStream* pStream) { + if (pStream == NULL) { + return MA_INVALID_ARGS; + } + return ma_result_from_aaudio(((MA_PFN_AAudioStream_close)pContext->aaudio.AAudioStream_close)(pStream)); } @@ -37901,20 +38165,36 @@ static ma_result ma_context_get_device_info__aaudio(ma_context* pContext, ma_dev return MA_SUCCESS; } +static ma_result ma_close_streams__aaudio(ma_device* pDevice) +{ + MA_ASSERT(pDevice != NULL); + + /* When re-routing, streams may have been closed and never re-opened. Hence the extra checks below. */ + if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) { + ma_close_stream__aaudio(pDevice->pContext, (ma_AAudioStream*)pDevice->aaudio.pStreamCapture); + pDevice->aaudio.pStreamCapture = NULL; + } + if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { + ma_close_stream__aaudio(pDevice->pContext, (ma_AAudioStream*)pDevice->aaudio.pStreamPlayback); + pDevice->aaudio.pStreamPlayback = NULL; + } + + return MA_SUCCESS; +} static ma_result ma_device_uninit__aaudio(ma_device* pDevice) { MA_ASSERT(pDevice != NULL); - if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) { - ma_close_stream__aaudio(pDevice->pContext, (ma_AAudioStream*)pDevice->aaudio.pStreamCapture); - pDevice->aaudio.pStreamCapture = NULL; + /* Wait for any rerouting to finish before attempting to close the streams. */ + ma_mutex_lock(&pDevice->aaudio.rerouteLock); + { + ma_close_streams__aaudio(pDevice); } + ma_mutex_unlock(&pDevice->aaudio.rerouteLock); - if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { - ma_close_stream__aaudio(pDevice->pContext, (ma_AAudioStream*)pDevice->aaudio.pStreamPlayback); - pDevice->aaudio.pStreamPlayback = NULL; - } + /* Destroy re-routing lock. */ + ma_mutex_uninit(&pDevice->aaudio.rerouteLock); return MA_SUCCESS; } @@ -37966,7 +38246,7 @@ static ma_result ma_device_init_by_type__aaudio(ma_device* pDevice, const ma_dev return MA_SUCCESS; } -static ma_result ma_device_init__aaudio(ma_device* pDevice, const ma_device_config* pConfig, ma_device_descriptor* pDescriptorPlayback, ma_device_descriptor* pDescriptorCapture) +static ma_result ma_device_init_streams__aaudio(ma_device* pDevice, const ma_device_config* pConfig, ma_device_descriptor* pDescriptorPlayback, ma_device_descriptor* pDescriptorCapture) { ma_result result; @@ -37999,6 +38279,25 @@ static ma_result ma_device_init__aaudio(ma_device* pDevice, const ma_device_conf return MA_SUCCESS; } +static ma_result ma_device_init__aaudio(ma_device* pDevice, const ma_device_config* pConfig, ma_device_descriptor* pDescriptorPlayback, ma_device_descriptor* pDescriptorCapture) +{ + ma_result result; + + MA_ASSERT(pDevice != NULL); + + result = ma_device_init_streams__aaudio(pDevice, pConfig, pDescriptorPlayback, pDescriptorCapture); + if (result != MA_SUCCESS) { + return result; + } + + result = ma_mutex_init(&pDevice->aaudio.rerouteLock); + if (result != MA_SUCCESS) { + return result; + } + + return MA_SUCCESS; +} + static ma_result ma_device_start_stream__aaudio(ma_device* pDevice, ma_AAudioStream* pStream) { ma_aaudio_result_t resultAA; @@ -38006,12 +38305,16 @@ static ma_result ma_device_start_stream__aaudio(ma_device* pDevice, ma_AAudioStr MA_ASSERT(pDevice != NULL); + if (pStream == NULL) { + return MA_INVALID_ARGS; + } + resultAA = ((MA_PFN_AAudioStream_requestStart)pDevice->pContext->aaudio.AAudioStream_requestStart)(pStream); if (resultAA != MA_AAUDIO_OK) { return ma_result_from_aaudio(resultAA); } - /* Do we actually need to wait for the device to transition into it's started state? */ + /* Do we actually need to wait for the device to transition into its started state? */ /* The device should be in either a starting or started state. If it's not set to started we need to wait for it to transition. It should go from starting to started. */ currentState = ((MA_PFN_AAudioStream_getState)pDevice->pContext->aaudio.AAudioStream_getState)(pStream); @@ -38038,6 +38341,10 @@ static ma_result ma_device_stop_stream__aaudio(ma_device* pDevice, ma_AAudioStre MA_ASSERT(pDevice != NULL); + if (pStream == NULL) { + return MA_INVALID_ARGS; + } + /* From the AAudio documentation: @@ -38123,22 +38430,20 @@ static ma_result ma_device_stop__aaudio(ma_device* pDevice) static ma_result ma_device_reinit__aaudio(ma_device* pDevice, ma_device_type deviceType) { ma_result result; + int32_t retries = 0; MA_ASSERT(pDevice != NULL); - /* The first thing to do is close the streams. */ - if (deviceType == ma_device_type_capture || deviceType == ma_device_type_duplex) { - ma_close_stream__aaudio(pDevice->pContext, (ma_AAudioStream*)pDevice->aaudio.pStreamCapture); - pDevice->aaudio.pStreamCapture = NULL; - } - - if (deviceType == ma_device_type_playback || deviceType == ma_device_type_duplex) { - ma_close_stream__aaudio(pDevice->pContext, (ma_AAudioStream*)pDevice->aaudio.pStreamPlayback); - pDevice->aaudio.pStreamPlayback = NULL; - } - - /* Now we need to reinitialize each streams. The hardest part with this is just filling output the config and descriptors. */ + /* + TODO: Stop retrying if main thread is about to uninit device. + */ + ma_mutex_lock(&pDevice->aaudio.rerouteLock); { +error_disconnected: + /* The first thing to do is close the streams. */ + ma_close_streams__aaudio(pDevice); + + /* Now we need to reinitialize each streams. The hardest part with this is just filling output the config and descriptors. */ ma_device_config deviceConfig; ma_device_descriptor descriptorPlayback; ma_device_descriptor descriptorCapture; @@ -38187,15 +38492,17 @@ static ma_result ma_device_reinit__aaudio(ma_device* pDevice, ma_device_type dev descriptorPlayback.periodCount = deviceConfig.periods; } - result = ma_device_init__aaudio(pDevice, &deviceConfig, &descriptorPlayback, &descriptorCapture); + result = ma_device_init_streams__aaudio(pDevice, &deviceConfig, &descriptorPlayback, &descriptorCapture); if (result != MA_SUCCESS) { - return result; + ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_WARNING, "[AAudio] Failed to create stream after route change."); + goto done; } result = ma_device_post_init(pDevice, deviceType, &descriptorPlayback, &descriptorCapture); if (result != MA_SUCCESS) { - ma_device_uninit__aaudio(pDevice); - return result; + ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_WARNING, "[AAudio] Failed to initialize device after route change."); + ma_close_streams__aaudio(pDevice); + goto done; } /* We'll only ever do this in response to a reroute. */ @@ -38204,14 +38511,29 @@ static ma_result ma_device_reinit__aaudio(ma_device* pDevice, ma_device_type dev /* If the device is started, start the streams. Maybe make this configurable? */ if (ma_device_get_state(pDevice) == ma_device_state_started) { if (pDevice->aaudio.noAutoStartAfterReroute == MA_FALSE) { - ma_device_start__aaudio(pDevice); + result = ma_device_start__aaudio(pDevice); + if (result != MA_SUCCESS) { + /* We got disconnected! Retry a few times, until we find a connected device! */ + retries += 1; + if (retries <= 3) { + ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_INFO, "[AAudio] Failed to start stream after route change, retrying(%d)", retries); + goto error_disconnected; + } + ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_INFO, "[AAudio] Failed to start stream after route change."); + goto done; + } } else { ma_device_stop(pDevice); /* Do a full device stop so we set internal state correctly. */ } } - - return MA_SUCCESS; + + result = MA_SUCCESS; } +done: + /* Re-routing done */ + ma_mutex_unlock(&pDevice->aaudio.rerouteLock); + + return result; } static ma_result ma_device_get_info__aaudio(ma_device* pDevice, ma_device_type type, ma_device_info* pDeviceInfo) @@ -38222,12 +38544,12 @@ static ma_result ma_device_get_info__aaudio(ma_device* pDevice, ma_device_type t MA_ASSERT(type != ma_device_type_duplex); MA_ASSERT(pDeviceInfo != NULL); - if (type == ma_device_type_playback) { + if (type == ma_device_type_capture) { pStream = (ma_AAudioStream*)pDevice->aaudio.pStreamCapture; pDeviceInfo->id.aaudio = pDevice->capture.id.aaudio; ma_strncpy_s(pDeviceInfo->name, sizeof(pDeviceInfo->name), MA_DEFAULT_CAPTURE_DEVICE_NAME, (size_t)-1); /* Only supporting default devices. */ } - if (type == ma_device_type_capture) { + if (type == ma_device_type_playback) { pStream = (ma_AAudioStream*)pDevice->aaudio.pStreamPlayback; pDeviceInfo->id.aaudio = pDevice->playback.id.aaudio; ma_strncpy_s(pDeviceInfo->name, sizeof(pDeviceInfo->name), MA_DEFAULT_PLAYBACK_DEVICE_NAME, (size_t)-1); /* Only supporting default devices. */ @@ -38260,6 +38582,7 @@ static ma_result ma_context_uninit__aaudio(ma_context* pContext) static ma_result ma_context_init__aaudio(ma_context* pContext, const ma_context_config* pConfig, ma_backend_callbacks* pCallbacks) { +#if !defined(MA_NO_RUNTIME_LINKING) size_t i; const char* libNames[] = { "libaaudio.so" @@ -38305,7 +38628,39 @@ static ma_result ma_context_init__aaudio(ma_context* pContext, const ma_context_ pContext->aaudio.AAudioStream_getFramesPerBurst = (ma_proc)ma_dlsym(ma_context_get_log(pContext), pContext->aaudio.hAAudio, "AAudioStream_getFramesPerBurst"); pContext->aaudio.AAudioStream_requestStart = (ma_proc)ma_dlsym(ma_context_get_log(pContext), pContext->aaudio.hAAudio, "AAudioStream_requestStart"); pContext->aaudio.AAudioStream_requestStop = (ma_proc)ma_dlsym(ma_context_get_log(pContext), pContext->aaudio.hAAudio, "AAudioStream_requestStop"); - +#else + pContext->aaudio.AAudio_createStreamBuilder = (ma_proc)AAudio_createStreamBuilder; + pContext->aaudio.AAudioStreamBuilder_delete = (ma_proc)AAudioStreamBuilder_delete; + pContext->aaudio.AAudioStreamBuilder_setDeviceId = (ma_proc)AAudioStreamBuilder_setDeviceId; + pContext->aaudio.AAudioStreamBuilder_setDirection = (ma_proc)AAudioStreamBuilder_setDirection; + pContext->aaudio.AAudioStreamBuilder_setSharingMode = (ma_proc)AAudioStreamBuilder_setSharingMode; + pContext->aaudio.AAudioStreamBuilder_setFormat = (ma_proc)AAudioStreamBuilder_setFormat; + pContext->aaudio.AAudioStreamBuilder_setChannelCount = (ma_proc)AAudioStreamBuilder_setChannelCount; + pContext->aaudio.AAudioStreamBuilder_setSampleRate = (ma_proc)AAudioStreamBuilder_setSampleRate; + pContext->aaudio.AAudioStreamBuilder_setBufferCapacityInFrames = (ma_proc)AAudioStreamBuilder_setBufferCapacityInFrames; + pContext->aaudio.AAudioStreamBuilder_setFramesPerDataCallback = (ma_proc)AAudioStreamBuilder_setFramesPerDataCallback; + pContext->aaudio.AAudioStreamBuilder_setDataCallback = (ma_proc)AAudioStreamBuilder_setDataCallback; + pContext->aaudio.AAudioStreamBuilder_setErrorCallback = (ma_proc)AAudioStreamBuilder_setErrorCallback; + pContext->aaudio.AAudioStreamBuilder_setPerformanceMode = (ma_proc)AAudioStreamBuilder_setPerformanceMode; + pContext->aaudio.AAudioStreamBuilder_setUsage = (ma_proc)AAudioStreamBuilder_setUsage; + pContext->aaudio.AAudioStreamBuilder_setContentType = (ma_proc)AAudioStreamBuilder_setContentType; + pContext->aaudio.AAudioStreamBuilder_setInputPreset = (ma_proc)AAudioStreamBuilder_setInputPreset; + #if defined(__ANDROID_API__) && __ANDROID_API__ >= 29 + pContext->aaudio.AAudioStreamBuilder_setAllowedCapturePolicy = (ma_proc)AAudioStreamBuilder_setAllowedCapturePolicy; + #endif + pContext->aaudio.AAudioStreamBuilder_openStream = (ma_proc)AAudioStreamBuilder_openStream; + pContext->aaudio.AAudioStream_close = (ma_proc)AAudioStream_close; + pContext->aaudio.AAudioStream_getState = (ma_proc)AAudioStream_getState; + pContext->aaudio.AAudioStream_waitForStateChange = (ma_proc)AAudioStream_waitForStateChange; + pContext->aaudio.AAudioStream_getFormat = (ma_proc)AAudioStream_getFormat; + pContext->aaudio.AAudioStream_getChannelCount = (ma_proc)AAudioStream_getChannelCount; + pContext->aaudio.AAudioStream_getSampleRate = (ma_proc)AAudioStream_getSampleRate; + pContext->aaudio.AAudioStream_getBufferCapacityInFrames = (ma_proc)AAudioStream_getBufferCapacityInFrames; + pContext->aaudio.AAudioStream_getFramesPerDataCallback = (ma_proc)AAudioStream_getFramesPerDataCallback; + pContext->aaudio.AAudioStream_getFramesPerBurst = (ma_proc)AAudioStream_getFramesPerBurst; + pContext->aaudio.AAudioStream_requestStart = (ma_proc)AAudioStream_requestStart; + pContext->aaudio.AAudioStream_requestStop = (ma_proc)AAudioStream_requestStop; +#endif pCallbacks->onContextInit = ma_context_init__aaudio; pCallbacks->onContextUninit = ma_context_uninit__aaudio; @@ -38343,6 +38698,7 @@ static ma_result ma_context_init__aaudio(ma_context* pContext, const ma_context_ static ma_result ma_job_process__device__aaudio_reroute(ma_job* pJob) { + ma_result result; ma_device* pDevice; MA_ASSERT(pJob != NULL); @@ -38351,7 +38707,18 @@ static ma_result ma_job_process__device__aaudio_reroute(ma_job* pJob) MA_ASSERT(pDevice != NULL); /* Here is where we need to reroute the device. To do this we need to uninitialize the stream and reinitialize it. */ - return ma_device_reinit__aaudio(pDevice, (ma_device_type)pJob->data.device.aaudio.reroute.deviceType); + result = ma_device_reinit__aaudio(pDevice, (ma_device_type)pJob->data.device.aaudio.reroute.deviceType); + if (result != MA_SUCCESS) { + /* + Getting here means we failed to reroute the device. The best thing I can think of here is to + just stop the device. + */ + ma_log_post(ma_device_get_log(pDevice), MA_LOG_LEVEL_ERROR, "[AAudio] Stopping device due to reroute failure."); + ma_device_stop(pDevice); + return result; + } + + return MA_SUCCESS; } #else /* Getting here means there is no AAudio backend so we need a no-op job implementation. */ @@ -39637,6 +40004,10 @@ Web Audio Backend #if (__EMSCRIPTEN_major__ > 3) || (__EMSCRIPTEN_major__ == 3 && (__EMSCRIPTEN_minor__ > 1 || (__EMSCRIPTEN_minor__ == 1 && __EMSCRIPTEN_tiny__ >= 32))) #include #define MA_SUPPORT_AUDIO_WORKLETS + + #if (__EMSCRIPTEN_major__ > 3) || (__EMSCRIPTEN_major__ == 3 && (__EMSCRIPTEN_minor__ > 1 || (__EMSCRIPTEN_minor__ == 1 && __EMSCRIPTEN_tiny__ >= 70))) + #define MA_SUPPORT_AUDIO_WORKLETS_VARIABLE_BUFFER_SIZE + #endif #endif /* @@ -39648,7 +40019,7 @@ TODO: Version 0.12: Swap this logic around so that AudioWorklets are used by def /* The thread stack size must be a multiple of 16. */ #ifndef MA_AUDIO_WORKLETS_THREAD_STACK_SIZE -#define MA_AUDIO_WORKLETS_THREAD_STACK_SIZE 16384 +#define MA_AUDIO_WORKLETS_THREAD_STACK_SIZE 131072 #endif #if defined(MA_USE_AUDIO_WORKLETS) @@ -39774,12 +40145,14 @@ static ma_result ma_device_uninit__webaudio(ma_device* pDevice) #if defined(MA_USE_AUDIO_WORKLETS) { EM_ASM({ - var device = miniaudio.get_device_by_index($0); + var device = window.miniaudio.get_device_by_index($0); if (device.streamNode !== undefined) { device.streamNode.disconnect(); device.streamNode = undefined; } + + device.pDevice = undefined; }, pDevice->webaudio.deviceIndex); emscripten_destroy_web_audio_node(pDevice->webaudio.audioWorklet); @@ -39789,7 +40162,7 @@ static ma_result ma_device_uninit__webaudio(ma_device* pDevice) #else { EM_ASM({ - var device = miniaudio.get_device_by_index($0); + var device = window.miniaudio.get_device_by_index($0); /* Make sure all nodes are disconnected and marked for collection. */ if (device.scriptNode !== undefined) { @@ -39816,7 +40189,7 @@ static ma_result ma_device_uninit__webaudio(ma_device* pDevice) /* Clean up the device on the JS side. */ EM_ASM({ - miniaudio.untrack_device_by_index($0); + window.miniaudio.untrack_device_by_index($0); }, pDevice->webaudio.deviceIndex); ma_free(pDevice->webaudio.pIntermediaryBuffer, &pDevice->pContext->allocationCallbacks); @@ -39882,10 +40255,6 @@ static EM_BOOL ma_audio_worklet_process_callback__webaudio(int inputCount, const (void)paramCount; (void)pParams; - if (ma_device_get_state(pDevice) != ma_device_state_started) { - return EM_TRUE; - } - /* The Emscripten documentation says that it'll always be 128 frames being passed in. Hard coding it like that feels like a very bad idea to me. Even if it's hard coded in the backend, the API and documentation should always refer @@ -39894,7 +40263,20 @@ static EM_BOOL ma_audio_worklet_process_callback__webaudio(int inputCount, const Unfortunately the audio data is not interleaved so we'll need to convert it before we give the data to miniaudio for further processing. */ - frameCount = 128; + if (pDevice->type == ma_device_type_playback) { + frameCount = pDevice->playback.internalPeriodSizeInFrames; + } else { + frameCount = pDevice->capture.internalPeriodSizeInFrames; + } + + if (ma_device_get_state(pDevice) != ma_device_state_started) { + /* Fill the output buffer with zero to avoid a noise sound */ + for (int i = 0; i < outputCount; i += 1) { + MA_ZERO_MEMORY(pOutputs[i].data, pOutputs[i].numberOfChannels * frameCount * sizeof(float)); + } + + return EM_TRUE; + } if (inputCount > 0) { /* Input data needs to be interleaved before we hand it to the client. */ @@ -39949,7 +40331,7 @@ static void ma_audio_worklet_processor_created__webaudio(EMSCRIPTEN_WEBAUDIO_T a count from MediaStreamAudioSourceNode (what we use for capture)? The only way to have control is to configure an output channel count on the capture side. This is slightly confusing for capture mode because intuitively you wouldn't actually connect an output to an input-only node, but this is what we'll have to do in order to have - proper control over the channel count. In the capture case, we'll have to output silence to it's output node. + proper control over the channel count. In the capture case, we'll have to output silence to its output node. */ if (pParameters->pConfig->deviceType == ma_device_type_capture) { channels = (int)((pParameters->pDescriptorCapture->channels > 0) ? pParameters->pDescriptorCapture->channels : MA_DEFAULT_CHANNELS); @@ -39972,7 +40354,15 @@ static void ma_audio_worklet_processor_created__webaudio(EMSCRIPTEN_WEBAUDIO_T a Now that we know the channel count to use we can allocate the intermediary buffer. The intermediary buffer is used for interleaving and deinterleaving. */ - intermediaryBufferSizeInFrames = 128; + #if defined(MA_SUPPORT_AUDIO_WORKLETS_VARIABLE_BUFFER_SIZE) + { + intermediaryBufferSizeInFrames = (size_t)emscripten_audio_context_quantum_size(audioContext); + } + #else + { + intermediaryBufferSizeInFrames = 128; + } + #endif pParameters->pDevice->webaudio.pIntermediaryBuffer = (float*)ma_malloc(intermediaryBufferSizeInFrames * (ma_uint32)channels * sizeof(float), &pParameters->pDevice->pContext->allocationCallbacks); if (pParameters->pDevice->webaudio.pIntermediaryBuffer == NULL) { @@ -39981,7 +40371,6 @@ static void ma_audio_worklet_processor_created__webaudio(EMSCRIPTEN_WEBAUDIO_T a return; } - pParameters->pDevice->webaudio.audioWorklet = emscripten_create_wasm_audio_worklet_node(audioContext, "miniaudio", &audioWorkletOptions, &ma_audio_worklet_process_callback__webaudio, pParameters->pDevice); /* With the audio worklet initialized we can now attach it to the graph. */ @@ -40121,7 +40510,6 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co /* It's not clear if this can return an error. None of the tests in the Emscripten repository check for this, so neither am I for now. */ pDevice->webaudio.audioContext = emscripten_create_audio_context(&audioContextAttributes); - /* With the context created we can now create the worklet. We can only have a single worklet per audio context which means we'll need to craft this appropriately to handle duplex devices correctly. @@ -40170,11 +40558,12 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co /* We need to add an entry to the miniaudio.devices list on the JS side so we can do some JS/C interop. */ pDevice->webaudio.deviceIndex = EM_ASM_INT({ - return miniaudio.track_device({ + return window.miniaudio.track_device({ webaudio: emscriptenGetAudioObject($0), - state: 1 /* 1 = ma_device_state_stopped */ + state: 1, /* 1 = ma_device_state_stopped */ + pDevice: $1 }); - }, pDevice->webaudio.audioContext); + }, pDevice->webaudio.audioContext, pDevice); return MA_SUCCESS; } @@ -40186,7 +40575,7 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co ma_uint32 sampleRate; ma_uint32 periodSizeInFrames; - /* The channel count will depend on the device type. If it's a capture, use it's, otherwise use the playback side. */ + /* The channel count will depend on the device type. If it's a capture, use its, otherwise use the playback side. */ if (pConfig->deviceType == ma_device_type_capture) { channels = (pDescriptorCapture->channels > 0) ? pDescriptorCapture->channels : MA_DEFAULT_CHANNELS; } else { @@ -40255,11 +40644,11 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co /* The node processing callback. */ device.scriptNode.onaudioprocess = function(e) { if (device.intermediaryBufferView == null || device.intermediaryBufferView.length == 0) { - device.intermediaryBufferView = new Float32Array(Module.HEAPF32.buffer, pIntermediaryBuffer, bufferSize * channels); + device.intermediaryBufferView = new Float32Array(HEAPF32.buffer, pIntermediaryBuffer, bufferSize * channels); } /* Do the capture side first. */ - if (deviceType == miniaudio.device_type.capture || deviceType == miniaudio.device_type.duplex) { + if (deviceType == window.miniaudio.device_type.capture || deviceType == window.miniaudio.device_type.duplex) { /* The data must be interleaved before being processed miniaudio. */ for (var iChannel = 0; iChannel < channels; iChannel += 1) { var inputBuffer = e.inputBuffer.getChannelData(iChannel); @@ -40273,7 +40662,7 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co _ma_device_process_pcm_frames_capture__webaudio(pDevice, bufferSize, pIntermediaryBuffer); } - if (deviceType == miniaudio.device_type.playback || deviceType == miniaudio.device_type.duplex) { + if (deviceType == window.miniaudio.device_type.playback || deviceType == window.miniaudio.device_type.duplex) { _ma_device_process_pcm_frames_playback__webaudio(pDevice, bufferSize, pIntermediaryBuffer); for (var iChannel = 0; iChannel < e.outputBuffer.numberOfChannels; ++iChannel) { @@ -40293,7 +40682,7 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co }; /* Now we need to connect our node to the graph. */ - if (deviceType == miniaudio.device_type.capture || deviceType == miniaudio.device_type.duplex) { + if (deviceType == window.miniaudio.device_type.capture || deviceType == window.miniaudio.device_type.duplex) { navigator.mediaDevices.getUserMedia({audio:true, video:false}) .then(function(stream) { device.streamNode = device.webaudio.createMediaStreamSource(stream); @@ -40305,13 +40694,13 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co }); } - if (deviceType == miniaudio.device_type.playback) { + if (deviceType == window.miniaudio.device_type.playback) { device.scriptNode.connect(device.webaudio.destination); } device.pDevice = pDevice; - return miniaudio.track_device(device); + return window.miniaudio.track_device(device); }, pConfig->deviceType, channels, sampleRate, periodSizeInFrames, pDevice->webaudio.pIntermediaryBuffer, pDevice); if (deviceIndex < 0) { @@ -40321,7 +40710,7 @@ static ma_result ma_device_init__webaudio(ma_device* pDevice, const ma_device_co pDevice->webaudio.deviceIndex = deviceIndex; /* Grab the sample rate from the audio context directly. */ - sampleRate = (ma_uint32)EM_ASM_INT({ return miniaudio.get_device_by_index($0).webaudio.sampleRate; }, deviceIndex); + sampleRate = (ma_uint32)EM_ASM_INT({ return window.miniaudio.get_device_by_index($0).webaudio.sampleRate; }, deviceIndex); if (pDescriptorCapture != NULL) { pDescriptorCapture->format = ma_format_f32; @@ -40351,9 +40740,9 @@ static ma_result ma_device_start__webaudio(ma_device* pDevice) MA_ASSERT(pDevice != NULL); EM_ASM({ - var device = miniaudio.get_device_by_index($0); + var device = window.miniaudio.get_device_by_index($0); device.webaudio.resume(); - device.state = miniaudio.device_state.started; + device.state = window.miniaudio.device_state.started; }, pDevice->webaudio.deviceIndex); return MA_SUCCESS; @@ -40373,9 +40762,9 @@ static ma_result ma_device_stop__webaudio(ma_device* pDevice) do any kind of explicit draining. */ EM_ASM({ - var device = miniaudio.get_device_by_index($0); + var device = window.miniaudio.get_device_by_index($0); device.webaudio.suspend(); - device.state = miniaudio.device_state.stopped; + device.state = window.miniaudio.device_state.stopped; }, pDevice->webaudio.deviceIndex); ma_device__on_notification_stopped(pDevice); @@ -40393,6 +40782,10 @@ static ma_result ma_context_uninit__webaudio(ma_context* pContext) /* Remove the global miniaudio object from window if there are no more references to it. */ EM_ASM({ if (typeof(window.miniaudio) !== 'undefined') { + miniaudio.unlock_event_types.map(function(event_type) { + document.removeEventListener(event_type, miniaudio.unlock, true); + }); + window.miniaudio.referenceCount -= 1; if (window.miniaudio.referenceCount === 0) { delete window.miniaudio; @@ -40434,6 +40827,7 @@ static ma_result ma_context_init__webaudio(ma_context* pContext, const ma_contex window.miniaudio.device_state.started = $4; /* Device cache for mapping devices to indexes for JavaScript/C interop. */ + let miniaudio = window.miniaudio; miniaudio.devices = []; miniaudio.track_device = function(device) { @@ -40485,13 +40879,13 @@ static ma_result ma_context_init__webaudio(ma_context* pContext, const ma_contex var device = miniaudio.devices[i]; if (device != null && device.webaudio != null && - device.state === window.miniaudio.device_state.started) { + device.state === miniaudio.device_state.started) { device.webaudio.resume().then(() => { - Module._ma_device__on_notification_unlocked(device.pDevice); - }, - (error) => {console.error("Failed to resume audiocontext", error); - }); + _ma_device__on_notification_unlocked(device.pDevice); + }, + (error) => {console.error("Failed to resume audiocontext", error); + }); } } miniaudio.unlock_event_types.map(function(event_type) { @@ -40527,7 +40921,7 @@ static ma_result ma_context_init__webaudio(ma_context* pContext, const ma_contex return MA_SUCCESS; } -#endif /* Web Audio */ +#endif /* MA_HAS_WEBAUDIO */ @@ -40806,7 +41200,7 @@ MA_API ma_result ma_device_post_init(ma_device* pDevice, ma_device_type deviceTy ma_device_info deviceInfo; if (deviceType == ma_device_type_capture || deviceType == ma_device_type_duplex || deviceType == ma_device_type_loopback) { - result = ma_device_get_info(pDevice, (deviceType == ma_device_type_loopback) ? ma_device_type_playback : ma_device_type_capture, &deviceInfo); + result = ma_device_get_info(pDevice, ma_device_type_capture, &deviceInfo); if (result == MA_SUCCESS) { ma_strncpy_s(pDevice->capture.name, sizeof(pDevice->capture.name), deviceInfo.name, (size_t)-1); } else { @@ -40853,7 +41247,7 @@ static ma_thread_result MA_THREADCALL ma_worker_thread(void* pData) #endif /* - When the device is being initialized it's initial state is set to ma_device_state_uninitialized. Before returning from + When the device is being initialized its initial state is set to ma_device_state_uninitialized. Before returning from ma_device_init(), the state needs to be set to something valid. In miniaudio the device's default state immediately after initialization is stopped, so therefore we need to mark the device as such. miniaudio will wait on the worker thread to signal an event to know when the worker thread is ready for action. @@ -41198,6 +41592,24 @@ MA_API ma_result ma_device_job_thread_next(ma_device_job_thread* pJobThread, ma_ } +MA_API ma_bool32 ma_device_id_equal(const ma_device_id* pA, const ma_device_id* pB) +{ + size_t i; + + if (pA == NULL || pB == NULL) { + return MA_FALSE; + } + + for (i = 0; i < sizeof(ma_device_id); i += 1) { + if (((const char*)pA)[i] != ((const char*)pB)[i]) { + return MA_FALSE; + } + } + + return MA_TRUE; +} + + MA_API ma_context_config ma_context_config_init(void) { @@ -41971,7 +42383,7 @@ MA_API ma_result ma_device_init(ma_context* pContext, const ma_device_config* pC return result; } - /* Wait for the worker thread to put the device into it's stopped state for real. */ + /* Wait for the worker thread to put the device into its stopped state for real. */ ma_event_wait(&pDevice->stopEvent); MA_ASSERT(ma_device_get_state(pDevice) == ma_device_state_stopped); } else { @@ -41997,7 +42409,7 @@ MA_API ma_result ma_device_init(ma_context* pContext, const ma_device_config* pC ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_INFO, "[%s]\n", ma_get_backend_name(pDevice->pContext->backend)); if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex || pDevice->type == ma_device_type_loopback) { char name[MA_MAX_DEVICE_NAME_LENGTH + 1]; - ma_device_get_name(pDevice, (pDevice->type == ma_device_type_loopback) ? ma_device_type_playback : ma_device_type_capture, name, sizeof(name), NULL); + ma_device_get_name(pDevice, ma_device_type_capture, name, sizeof(name), NULL); ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_INFO, " %s (%s)\n", name, "Capture"); ma_log_postf(ma_device_get_log(pDevice), MA_LOG_LEVEL_INFO, " Format: %s -> %s\n", ma_get_format_name(pDevice->capture.internalFormat), ma_get_format_name(pDevice->capture.format)); @@ -42250,6 +42662,17 @@ MA_API ma_result ma_device_get_info(ma_device* pDevice, ma_device_type type, ma_ if (type == ma_device_type_playback) { return ma_context_get_device_info(pDevice->pContext, type, pDevice->playback.pID, pDeviceInfo); } else { + /* + Here we're getting the capture side, which is the branch we'll be entering for a loopback + device, since loopback is capturing. However, if the device is using the default device ID, + it won't get the correct information because it'll think we're asking for the default + capture device, where in fact for loopback we want the default *playback* device. We'll do + a bit of a hack here to make sure we get the correct info. + */ + if (pDevice->type == ma_device_type_loopback && pDevice->capture.pID == NULL) { + type = ma_device_type_playback; + } + return ma_context_get_device_info(pDevice->pContext, type, pDevice->capture.pID, pDeviceInfo); } } @@ -42311,6 +42734,15 @@ MA_API ma_result ma_device_start(ma_device* pDevice) ma_mutex_lock(&pDevice->startStopLock); { + /* + We need to check again if the device is in a started state because it's possible for one thread to have started the device + while another was waiting on the mutex. + */ + if (ma_device_get_state(pDevice) == ma_device_state_started) { + ma_mutex_unlock(&pDevice->startStopLock); + return MA_SUCCESS; /* Already started. */ + } + /* Starting and stopping are wrapped in a mutex which means we can assert that the device is in a stopped or paused state. */ MA_ASSERT(ma_device_get_state(pDevice) == ma_device_state_stopped); @@ -42371,6 +42803,15 @@ MA_API ma_result ma_device_stop(ma_device* pDevice) ma_mutex_lock(&pDevice->startStopLock); { + /* + We need to check again if the device is in a stopped state because it's possible for one thread to have stopped the device + while another was waiting on the mutex. + */ + if (ma_device_get_state(pDevice) == ma_device_state_stopped) { + ma_mutex_unlock(&pDevice->startStopLock); + return MA_SUCCESS; /* Already stopped. */ + } + /* Starting and stopping are wrapped in a mutex which means we can assert that the device is in a started or paused state. */ MA_ASSERT(ma_device_get_state(pDevice) == ma_device_state_started); @@ -42389,7 +42830,7 @@ MA_API ma_result ma_device_stop(ma_device* pDevice) } else { /* Synchronous backends. The stop callback is always called from the worker thread. Do not call the stop callback here. If - the backend is implementing it's own audio thread loop we'll need to wake it up if required. Note that we need to make + the backend is implementing its own audio thread loop we'll need to wake it up if required. Note that we need to make sure the state of the device is *not* playing right now, which it shouldn't be since we set it above. This is super important though, so I'm asserting it here as well for extra safety in case we accidentally change something later. */ @@ -42506,6 +42947,15 @@ MA_API ma_result ma_device_handle_backend_data_callback(ma_device* pDevice, void return MA_INVALID_ARGS; } + /* + There is an assert deeper in the code that checks that frameCount > 0. Since this is a public facing + API we'll need to check for that here. I've had reports that AAudio can sometimes post a frame count + of 0. + */ + if (frameCount == 0) { + return MA_INVALID_ARGS; + } + if (pDevice->type == ma_device_type_duplex) { if (pInput != NULL) { ma_device__handle_duplex_callback_capture(pDevice, frameCount, pInput, &pDevice->duplexRB.rb); @@ -42580,7 +43030,7 @@ MA_API ma_uint32 ma_calculate_buffer_size_in_milliseconds_from_frames(ma_uint32 return 0; } - return bufferSizeInFrames*1000 / sampleRate; + return (bufferSizeInFrames*1000 + (sampleRate - 1)) / sampleRate; } MA_API ma_uint32 ma_calculate_buffer_size_in_frames_from_milliseconds(ma_uint32 bufferSizeInMilliseconds, ma_uint32 sampleRate) @@ -47408,7 +47858,7 @@ static ma_result ma_bpf_get_heap_layout(const ma_bpf_config* pConfig, ma_bpf_hea return MA_INVALID_ARGS; } - bpf2Count = pConfig->channels / 2; + bpf2Count = pConfig->order / 2; pHeapLayout->sizeInBytes = 0; @@ -49466,7 +49916,7 @@ MA_API float ma_fader_get_current_volume(const ma_fader* pFader) } else if ((ma_uint64)pFader->cursorInFrames >= pFader->lengthInFrames) { /* Safe case because the < 0 case was checked above. */ return pFader->volumeEnd; } else { - /* The cursor is somewhere inside the fading period. We can figure this out with a simple linear interpoluation between volumeBeg and volumeEnd based on our cursor position. */ + /* The cursor is somewhere inside the fading period. We can figure this out with a simple linear interpolation between volumeBeg and volumeEnd based on our cursor position. */ return ma_mix_f32_fast(pFader->volumeBeg, pFader->volumeEnd, (ma_uint32)pFader->cursorInFrames / (float)((ma_uint32)pFader->lengthInFrames)); /* Safe cast to uint32 because we clamp it in ma_fader_process_pcm_frames(). */ } } @@ -49689,9 +50139,9 @@ static float ma_attenuation_exponential(float distance, float minDistance, float /* -Dopper Effect calculation taken from the OpenAL spec, with two main differences: +Doppler Effect calculation taken from the OpenAL spec, with two main differences: - 1) The source to listener vector will have already been calcualted at an earlier step so we can + 1) The source to listener vector will have already been calculated at an earlier step so we can just use that directly. We need only the position of the source relative to the origin. 2) We don't scale by a frequency because we actually just want the ratio which we'll plug straight @@ -49730,7 +50180,7 @@ static void ma_get_default_channel_map_for_spatializer(ma_channel* pChannelMap, Special case for stereo. Want to default the left and right speakers to side left and side right so that they're facing directly down the X axis rather than slightly forward. Not doing this will result in sounds being quieter when behind the listener. This might - actually be good for some scenerios, but I don't think it's an appropriate default because + actually be good for some scenarios, but I don't think it's an appropriate default because it can be a bit unexpected. */ if (channelCount == 2) { @@ -50064,7 +50514,7 @@ MA_API ma_spatializer_config ma_spatializer_config_init(ma_uint32 channelsIn, ma config.maxDistance = MA_FLT_MAX; config.rolloff = 1; config.coneInnerAngleInRadians = 6.283185f; /* 360 degrees. */ - config.coneOuterAngleInRadians = 6.283185f; /* 360 degress. */ + config.coneOuterAngleInRadians = 6.283185f; /* 360 degrees. */ config.coneOuterGain = 0.0f; config.dopplerFactor = 1; config.directionalAttenuationFactor = 1; @@ -50298,7 +50748,7 @@ static float ma_calculate_angular_gain(ma_vec3f dirA, ma_vec3f dirB, float coneI To do cone attenuation, I'm just using the same math that we'd use to implement a basic spotlight in OpenGL. We just need to get the direction from the source to the listener and then do a dot product against that and the direction of the spotlight. Then we just compare that dot product against the cosine of the inner and outer - angles. If the dot product is greater than the the outer angle, we just use coneOuterGain. If it's less than + angles. If the dot product is greater than the outer angle, we just use coneOuterGain. If it's less than the inner angle, we just use a gain of 1. Otherwise we linearly interpolate between 1 and coneOuterGain. */ if (coneInnerAngleInRadians < 6.283185f) { @@ -50368,7 +50818,7 @@ MA_API ma_result ma_spatializer_process_pcm_frames(ma_spatializer* pSpatializer, ma_vec3f relativePosNormalized; ma_vec3f relativePos; /* The position relative to the listener. */ ma_vec3f relativeDir; /* The direction of the sound, relative to the listener. */ - ma_vec3f listenerVel; /* The volocity of the listener. For doppler pitch calculation. */ + ma_vec3f listenerVel; /* The velocity of the listener. For doppler pitch calculation. */ float speedOfSound; float distance = 0; float gain = 1; @@ -50449,11 +50899,11 @@ MA_API ma_result ma_spatializer_process_pcm_frames(ma_spatializer* pSpatializer, To do cone attenuation, I'm just using the same math that we'd use to implement a basic spotlight in OpenGL. We just need to get the direction from the source to the listener and then do a dot product against that and the direction of the spotlight. Then we just compare that dot product against the cosine of the inner and outer - angles. If the dot product is greater than the the outer angle, we just use coneOuterGain. If it's less than + angles. If the dot product is greater than the outer angle, we just use coneOuterGain. If it's less than the inner angle, we just use a gain of 1. Otherwise we linearly interpolate between 1 and coneOuterGain. */ if (distance > 0) { - /* Source anglular gain. */ + /* Source angular gain. */ float spatializerConeInnerAngle; float spatializerConeOuterAngle; float spatializerConeOuterGain; @@ -50965,7 +51415,7 @@ MA_API void ma_spatializer_get_relative_position_and_direction(const ma_spatiali listenerDirection = ma_spatializer_listener_get_direction(pListener); /* - We need to calcualte the right vector from our forward and up vectors. This is done with + We need to calculate the right vector from our forward and up vectors. This is done with a cross product. */ axisZ = ma_vec3f_normalize(listenerDirection); /* Normalization required here because we can't trust the caller. */ @@ -51111,7 +51561,7 @@ static ma_result ma_linear_resampler_set_rate_internal(ma_linear_resampler* pRes lpfConfig = ma_lpf_config_init(pResampler->config.format, pResampler->config.channels, lpfSampleRate, lpfCutoffFrequency, pResampler->config.lpfOrder); /* - If the resampler is alreay initialized we don't want to do a fresh initialization of the low-pass filter because it will result in the cached frames + If the resampler is already initialized we don't want to do a fresh initialization of the low-pass filter because it will result in the cached frames getting cleared. Instead we re-initialize the filter which will maintain any cached frames. */ if (isResamplerAlreadyInitialized) { @@ -51806,7 +52256,7 @@ MA_API ma_result ma_linear_resampler_get_expected_output_frame_count(const ma_li preliminaryInputFrameCount = (pResampler->inTimeInt + outputFrameCount*pResampler->inAdvanceInt ) + preliminaryInputFrameCountFromFrac; /* - If the total number of *whole* input frames that would be required to generate our preliminary output frame count is greather than + If the total number of *whole* input frames that would be required to generate our preliminary output frame count is greater than the amount of whole input frames we have available as input we need to *not* add an extra output frame as there won't be enough data to actually process. Otherwise we need to add the extra output frame. */ @@ -51844,7 +52294,7 @@ MA_API ma_result ma_linear_resampler_reset(ma_linear_resampler* pResampler) } } - /* The low pass filter needs to have it's cache reset. */ + /* The low pass filter needs to have its cache reset. */ ma_lpf_clear_cache(&pResampler->lpf); return MA_SUCCESS; @@ -52361,19 +52811,19 @@ static float ma_calculate_channel_position_rectangular_weight(ma_channel channel of contribution to apply to the side/left and back/left speakers, however, is a bit more complicated. Imagine the front/left speaker as emitting audio from two planes - the front plane and the left plane. You can think of the front/left - speaker emitting half of it's total volume from the front, and the other half from the left. Since part of it's volume is being emitted + speaker emitting half of its total volume from the front, and the other half from the left. Since part of its volume is being emitted from the left side, and the side/left and back/left channels also emit audio from the left plane, one would expect that they would receive some amount of contribution from front/left speaker. The amount of contribution depends on how many planes are shared between the two speakers. Note that in the examples below I've added a top/front/left speaker as an example just to show how the math works across 3 spatial dimensions. The first thing to do is figure out how each speaker's volume is spread over each of plane: - - front/left: 2 planes (front and left) = 1/2 = half it's total volume on each plane + - front/left: 2 planes (front and left) = 1/2 = half its total volume on each plane - side/left: 1 plane (left only) = 1/1 = entire volume from left plane - - back/left: 2 planes (back and left) = 1/2 = half it's total volume on each plane - - top/front/left: 3 planes (top, front and left) = 1/3 = one third it's total volume on each plane + - back/left: 2 planes (back and left) = 1/2 = half its total volume on each plane + - top/front/left: 3 planes (top, front and left) = 1/3 = one third its total volume on each plane - The amount of volume each channel contributes to each of it's planes is what controls how much it is willing to given and take to other + The amount of volume each channel contributes to each of its planes is what controls how much it is willing to given and take to other channels on the same plane. The volume that is willing to the given by one channel is multiplied by the volume that is willing to be taken by the other to produce the final contribution. */ @@ -52484,12 +52934,7 @@ static ma_channel_conversion_path ma_channel_map_get_conversion_path(const ma_ch ma_uint32 iChannelIn; ma_bool32 areAllChannelPositionsPresent = MA_TRUE; for (iChannelIn = 0; iChannelIn < channelsIn; ++iChannelIn) { - ma_bool32 isInputChannelPositionInOutput = MA_FALSE; - if (ma_channel_map_contains_channel_position(channelsOut, pChannelMapOut, ma_channel_map_get_channel(pChannelMapIn, channelsIn, iChannelIn))) { - isInputChannelPositionInOutput = MA_TRUE; - break; - } - + ma_bool32 isInputChannelPositionInOutput = ma_channel_map_contains_channel_position(channelsOut, pChannelMapOut, ma_channel_map_get_channel(pChannelMapIn, channelsIn, iChannelIn)); if (!isInputChannelPositionInOutput) { areAllChannelPositionsPresent = MA_FALSE; break; @@ -52516,8 +52961,8 @@ static ma_result ma_channel_map_build_shuffle_table(const ma_channel* pChannelMa } /* - When building the shuffle table we just do a 1:1 mapping based on the first occurance of a channel. If the - input channel has more than one occurance of a channel position, the second one will be ignored. + When building the shuffle table we just do a 1:1 mapping based on the first occurrence of a channel. If the + input channel has more than one occurrence of a channel position, the second one will be ignored. */ for (iChannelOut = 0; iChannelOut < channelCountOut; iChannelOut += 1) { ma_channel channelOut; @@ -54812,7 +55257,7 @@ static ma_result ma_data_converter_process_pcm_frames__channels_first(ma_data_co Before doing any processing we need to determine how many frames we should try processing this iteration, for both input and output. The resampler requires us to perform format and channel conversion before passing any data into it. If we get our input count wrong, we'll - end up peforming redundant pre-processing. This isn't the end of the world, but it does + end up performing redundant pre-processing. This isn't the end of the world, but it does result in some inefficiencies proportionate to how far our estimates are off. If the resampler has a means to calculate exactly how much we'll need, we'll use that. @@ -55982,7 +56427,7 @@ MA_API const char* ma_channel_position_to_string(ma_channel channel) case MA_CHANNEL_LFE : return "CHANNEL_LFE"; case MA_CHANNEL_BACK_LEFT : return "CHANNEL_BACK_LEFT"; case MA_CHANNEL_BACK_RIGHT : return "CHANNEL_BACK_RIGHT"; - case MA_CHANNEL_FRONT_LEFT_CENTER : return "CHANNEL_FRONT_LEFT_CENTER "; + case MA_CHANNEL_FRONT_LEFT_CENTER : return "CHANNEL_FRONT_LEFT_CENTER"; case MA_CHANNEL_FRONT_RIGHT_CENTER: return "CHANNEL_FRONT_RIGHT_CENTER"; case MA_CHANNEL_BACK_CENTER : return "CHANNEL_BACK_CENTER"; case MA_CHANNEL_SIDE_LEFT : return "CHANNEL_SIDE_LEFT"; @@ -56287,13 +56732,9 @@ MA_API ma_result ma_rb_commit_read(ma_rb* pRB, size_t sizeInBytes) newReadOffsetLoopFlag ^= 0x80000000; } - ma_atomic_exchange_32(&pRB->encodedReadOffset, ma_rb__construct_offset(newReadOffsetLoopFlag, newReadOffsetInBytes)); + ma_atomic_exchange_32(&pRB->encodedReadOffset, ma_rb__construct_offset(newReadOffsetInBytes, newReadOffsetLoopFlag)); - if (ma_rb_pointer_distance(pRB) == 0) { - return MA_AT_END; - } else { - return MA_SUCCESS; - } + return MA_SUCCESS; } MA_API ma_result ma_rb_acquire_write(ma_rb* pRB, size_t* pSizeInBytes, void** ppBufferOut) @@ -56373,13 +56814,9 @@ MA_API ma_result ma_rb_commit_write(ma_rb* pRB, size_t sizeInBytes) newWriteOffsetLoopFlag ^= 0x80000000; } - ma_atomic_exchange_32(&pRB->encodedWriteOffset, ma_rb__construct_offset(newWriteOffsetLoopFlag, newWriteOffsetInBytes)); + ma_atomic_exchange_32(&pRB->encodedWriteOffset, ma_rb__construct_offset(newWriteOffsetInBytes, newWriteOffsetLoopFlag)); - if (ma_rb_pointer_distance(pRB) == 0) { - return MA_AT_END; - } else { - return MA_SUCCESS; - } + return MA_SUCCESS; } MA_API ma_result ma_rb_seek_read(ma_rb* pRB, size_t offsetInBytes) @@ -56602,6 +57039,16 @@ static ma_result ma_pcm_rb_data_source__on_read(ma_data_source* pDataSource, voi totalFramesRead += mappedFrameCount; } + /* + There is no notion of an "end" in a ring buffer. If we didn't have enough data to fill the requested frame + count we'll need to pad with silence. If we don't do this, totalFramesRead might equal 0 which will result + in the data source layer at a higher level translating this to MA_AT_END which is incorrect for a ring buffer. + */ + if (totalFramesRead < frameCount) { + ma_silence_pcm_frames(ma_offset_pcm_frames_ptr(pFramesOut, totalFramesRead, pRB->format, pRB->channels), (frameCount - totalFramesRead), pRB->format, pRB->channels); + totalFramesRead = frameCount; + } + *pFramesRead = totalFramesRead; return MA_SUCCESS; } @@ -57150,6 +57597,10 @@ MA_API ma_result ma_data_source_init(const ma_data_source_config* pConfig, ma_da return MA_INVALID_ARGS; } + if (pConfig->vtable == NULL) { + return MA_INVALID_ARGS; + } + pDataSourceBase->vtable = pConfig->vtable; pDataSourceBase->rangeBegInFrames = MA_DATA_SOURCE_DEFAULT_RANGE_BEG; pDataSourceBase->rangeEndInFrames = MA_DATA_SOURCE_DEFAULT_RANGE_END; @@ -57200,6 +57651,58 @@ static ma_result ma_data_source_resolve_current(ma_data_source* pDataSource, ma_ return MA_SUCCESS; } +static ma_result ma_data_source_read_pcm_frames_from_backend(ma_data_source* pDataSource, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead) +{ + ma_data_source_base* pDataSourceBase = (ma_data_source_base*)pDataSource; + + MA_ASSERT(pDataSourceBase != NULL); + MA_ASSERT(pDataSourceBase->vtable != NULL); + MA_ASSERT(pDataSourceBase->vtable->onRead != NULL); + MA_ASSERT(pFramesRead != NULL); + + if (pFramesOut != NULL) { + return pDataSourceBase->vtable->onRead(pDataSourceBase, pFramesOut, frameCount, pFramesRead); + } else { + /* + No output buffer. Probably seeking forward. Read and discard. Can probably optimize this in terms of + onSeek and onGetCursor, but need to keep in mind that the data source may not implement these functions. + */ + ma_result result; + ma_uint64 framesRead; + ma_format format; + ma_uint32 channels; + ma_uint64 discardBufferCapInFrames; + ma_uint8 pDiscardBuffer[4096]; + + result = ma_data_source_get_data_format(pDataSource, &format, &channels, NULL, NULL, 0); + if (result != MA_SUCCESS) { + return result; + } + + discardBufferCapInFrames = sizeof(pDiscardBuffer) / ma_get_bytes_per_frame(format, channels); + + framesRead = 0; + while (framesRead < frameCount) { + ma_uint64 framesReadThisIteration = 0; + ma_uint64 framesToRead = frameCount - framesRead; + if (framesToRead > discardBufferCapInFrames) { + framesToRead = discardBufferCapInFrames; + } + + result = pDataSourceBase->vtable->onRead(pDataSourceBase, pDiscardBuffer, framesToRead, &framesReadThisIteration); + if (result != MA_SUCCESS) { + return result; + } + + framesRead += framesReadThisIteration; + } + + *pFramesRead = framesRead; + + return MA_SUCCESS; + } +} + static ma_result ma_data_source_read_pcm_frames_within_range(ma_data_source* pDataSource, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead) { ma_data_source_base* pDataSourceBase = (ma_data_source_base*)pDataSource; @@ -57215,9 +57718,11 @@ static ma_result ma_data_source_read_pcm_frames_within_range(ma_data_source* pDa return MA_INVALID_ARGS; } + MA_ASSERT(pDataSourceBase->vtable != NULL); + if ((pDataSourceBase->vtable->flags & MA_DATA_SOURCE_SELF_MANAGED_RANGE_AND_LOOP_POINT) != 0 || (pDataSourceBase->rangeEndInFrames == ~((ma_uint64)0) && (pDataSourceBase->loopEndInFrames == ~((ma_uint64)0) || loop == MA_FALSE))) { /* Either the data source is self-managing the range, or no range is set - just read like normal. The data source itself will tell us when the end is reached. */ - result = pDataSourceBase->vtable->onRead(pDataSourceBase, pFramesOut, frameCount, &framesRead); + result = ma_data_source_read_pcm_frames_from_backend(pDataSource, pFramesOut, frameCount, &framesRead); } else { /* Need to clamp to within the range. */ ma_uint64 relativeCursor; @@ -57226,7 +57731,7 @@ static ma_result ma_data_source_read_pcm_frames_within_range(ma_data_source* pDa result = ma_data_source_get_cursor_in_pcm_frames(pDataSourceBase, &relativeCursor); if (result != MA_SUCCESS) { /* Failed to retrieve the cursor. Cannot read within a range or loop points. Just read like normal - this may happen for things like noise data sources where it doesn't really matter. */ - result = pDataSourceBase->vtable->onRead(pDataSourceBase, pFramesOut, frameCount, &framesRead); + result = ma_data_source_read_pcm_frames_from_backend(pDataSource, pFramesOut, frameCount, &framesRead); } else { ma_uint64 rangeBeg; ma_uint64 rangeEnd; @@ -57254,7 +57759,7 @@ static ma_result ma_data_source_read_pcm_frames_within_range(ma_data_source* pDa MA_AT_END so the higher level function can know about it. */ if (frameCount > 0) { - result = pDataSourceBase->vtable->onRead(pDataSourceBase, pFramesOut, frameCount, &framesRead); + result = ma_data_source_read_pcm_frames_from_backend(pDataSource, pFramesOut, frameCount, &framesRead); } else { result = MA_AT_END; /* The cursor is sitting on the end of the range which means we're at the end. */ } @@ -57336,7 +57841,7 @@ MA_API ma_result ma_data_source_read_pcm_frames(ma_data_source* pDataSource, voi totalFramesProcessed += framesProcessed; /* - If we encounted an error from the read callback, make sure it's propagated to the caller. The caller may need to know whether or not MA_BUSY is returned which is + If we encountered an error from the read callback, make sure it's propagated to the caller. The caller may need to know whether or not MA_BUSY is returned which is not necessarily considered an error. */ if (result != MA_SUCCESS && result != MA_AT_END) { @@ -57427,7 +57932,7 @@ MA_API ma_result ma_data_source_seek_to_pcm_frame(ma_data_source* pDataSource, m ma_data_source_base* pDataSourceBase = (ma_data_source_base*)pDataSource; if (pDataSourceBase == NULL) { - return MA_SUCCESS; + return MA_INVALID_ARGS; } if (pDataSourceBase->vtable->onSeek == NULL) { @@ -57435,12 +57940,61 @@ MA_API ma_result ma_data_source_seek_to_pcm_frame(ma_data_source* pDataSource, m } if (frameIndex > pDataSourceBase->rangeEndInFrames) { - return MA_INVALID_OPERATION; /* Trying to seek to far forward. */ + return MA_INVALID_OPERATION; /* Trying to seek too far forward. */ } + MA_ASSERT(pDataSourceBase->vtable != NULL); + return pDataSourceBase->vtable->onSeek(pDataSource, pDataSourceBase->rangeBegInFrames + frameIndex); } +MA_API ma_result ma_data_source_seek_seconds(ma_data_source* pDataSource, float secondCount, float* pSecondsSeeked) +{ + ma_uint64 frameCount; + ma_uint64 framesSeeked = 0; + ma_uint32 sampleRate; + ma_result result; + + if (pDataSource == NULL) { + return MA_INVALID_ARGS; + } + + result = ma_data_source_get_data_format(pDataSource, NULL, NULL, &sampleRate, NULL, 0); + if (result != MA_SUCCESS) { + return result; + } + + /* We need PCM frames instead of seconds */ + frameCount = (ma_uint64)(secondCount * sampleRate); + + result = ma_data_source_seek_pcm_frames(pDataSource, frameCount, &framesSeeked); + + /* VC6 doesn't support division between unsigned 64-bit integer and floating point number. Signed integer needed. This shouldn't affect anything in practice */ + *pSecondsSeeked = (ma_int64)framesSeeked / (float)sampleRate; + return result; +} + +MA_API ma_result ma_data_source_seek_to_second(ma_data_source* pDataSource, float seekPointInSeconds) +{ + ma_uint64 frameIndex; + ma_uint32 sampleRate; + ma_result result; + + if (pDataSource == NULL) { + return MA_INVALID_ARGS; + } + + result = ma_data_source_get_data_format(pDataSource, NULL, NULL, &sampleRate, NULL, 0); + if (result != MA_SUCCESS) { + return result; + } + + /* We need PCM frames instead of seconds */ + frameIndex = (ma_uint64)(seekPointInSeconds * sampleRate); + + return ma_data_source_seek_to_pcm_frame(pDataSource, frameIndex); +} + MA_API ma_result ma_data_source_get_data_format(ma_data_source* pDataSource, ma_format* pFormat, ma_uint32* pChannels, ma_uint32* pSampleRate, ma_channel* pChannelMap, size_t channelMapCap) { ma_data_source_base* pDataSourceBase = (ma_data_source_base*)pDataSource; @@ -57467,6 +58021,8 @@ MA_API ma_result ma_data_source_get_data_format(ma_data_source* pDataSource, ma_ return MA_INVALID_ARGS; } + MA_ASSERT(pDataSourceBase->vtable != NULL); + if (pDataSourceBase->vtable->onGetDataFormat == NULL) { return MA_NOT_IMPLEMENTED; } @@ -57507,6 +58063,8 @@ MA_API ma_result ma_data_source_get_cursor_in_pcm_frames(ma_data_source* pDataSo return MA_SUCCESS; } + MA_ASSERT(pDataSourceBase->vtable != NULL); + if (pDataSourceBase->vtable->onGetCursor == NULL) { return MA_NOT_IMPLEMENTED; } @@ -57540,6 +58098,8 @@ MA_API ma_result ma_data_source_get_length_in_pcm_frames(ma_data_source* pDataSo return MA_INVALID_ARGS; } + MA_ASSERT(pDataSourceBase->vtable != NULL); + /* If we have a range defined we'll use that to determine the length. This is one of rare times where we'll actually trust the caller. If they've set the range, I think it's mostly safe to @@ -57627,6 +58187,8 @@ MA_API ma_result ma_data_source_set_looping(ma_data_source* pDataSource, ma_bool ma_atomic_exchange_32(&pDataSourceBase->isLooping, isLooping); + MA_ASSERT(pDataSourceBase->vtable != NULL); + /* If there's no callback for this just treat it as a successful no-op. */ if (pDataSourceBase->vtable->onSetLooping == NULL) { return MA_SUCCESS; @@ -57664,7 +58226,7 @@ MA_API ma_result ma_data_source_set_range_in_pcm_frames(ma_data_source* pDataSou /* We may need to adjust the position of the cursor to ensure it's clamped to the range. Grab it now - so we can calculate it's absolute position before we change the range. + so we can calculate its absolute position before we change the range. */ result = ma_data_source_get_cursor_in_pcm_frames(pDataSource, &relativeCursor); if (result == MA_SUCCESS) { @@ -57698,7 +58260,7 @@ MA_API ma_result ma_data_source_set_range_in_pcm_frames(ma_data_source* pDataSou /* Seek to within range. Note that our seek positions here are relative to the new range. We don't want - do do this if we failed to retrieve the cursor earlier on because it probably means the data source + to do this if we failed to retrieve the cursor earlier on because it probably means the data source has no notion of a cursor. In practice the seek would probably fail (which we silently ignore), but I'm just not even going to attempt it. */ @@ -57717,6 +58279,13 @@ MA_API void ma_data_source_get_range_in_pcm_frames(const ma_data_source* pDataSo { const ma_data_source_base* pDataSourceBase = (const ma_data_source_base*)pDataSource; + if (pRangeBegInFrames != NULL) { + *pRangeBegInFrames = 0; + } + if (pRangeEndInFrames != NULL) { + *pRangeEndInFrames = 0; + } + if (pDataSource == NULL) { return; } @@ -57761,6 +58330,13 @@ MA_API void ma_data_source_get_loop_point_in_pcm_frames(const ma_data_source* pD { const ma_data_source_base* pDataSourceBase = (const ma_data_source_base*)pDataSource; + if (pLoopBegInFrames != NULL) { + *pLoopBegInFrames = 0; + } + if (pLoopEndInFrames != NULL) { + *pLoopEndInFrames = 0; + } + if (pDataSource == NULL) { return; } @@ -59155,7 +59731,7 @@ static ma_result ma_default_vfs_seek__win32(ma_vfs* pVFS, ma_vfs_file file, ma_i result = ma_SetFilePointerEx((HANDLE)file, liDistanceToMove, NULL, dwMoveMethod); } else if (ma_SetFilePointer != NULL) { /* No SetFilePointerEx() so restrict to 31 bits. */ - if (origin > 0x7FFFFFFF) { + if (offset > 0x7FFFFFFF) { return MA_OUT_OF_RANGE; } @@ -59365,7 +59941,7 @@ static ma_result ma_default_vfs_seek__stdio(ma_vfs* pVFS, ma_vfs_file file, ma_i result = _fseeki64((FILE*)file, offset, whence); #else /* No _fseeki64() so restrict to 31 bits. */ - if (origin > 0x7FFFFFFF) { + if (offset > 0x7FFFFFFF) { return MA_OUT_OF_RANGE; } @@ -59758,7 +60334,7 @@ extern "C" { #define MA_DR_WAV_XSTRINGIFY(x) MA_DR_WAV_STRINGIFY(x) #define MA_DR_WAV_VERSION_MAJOR 0 #define MA_DR_WAV_VERSION_MINOR 13 -#define MA_DR_WAV_VERSION_REVISION 13 +#define MA_DR_WAV_VERSION_REVISION 18 #define MA_DR_WAV_VERSION_STRING MA_DR_WAV_XSTRINGIFY(MA_DR_WAV_VERSION_MAJOR) "." MA_DR_WAV_XSTRINGIFY(MA_DR_WAV_VERSION_MINOR) "." MA_DR_WAV_XSTRINGIFY(MA_DR_WAV_VERSION_REVISION) #include #define MA_DR_WAVE_FORMAT_PCM 0x1 @@ -60178,7 +60754,7 @@ extern "C" { #define MA_DR_FLAC_XSTRINGIFY(x) MA_DR_FLAC_STRINGIFY(x) #define MA_DR_FLAC_VERSION_MAJOR 0 #define MA_DR_FLAC_VERSION_MINOR 12 -#define MA_DR_FLAC_VERSION_REVISION 42 +#define MA_DR_FLAC_VERSION_REVISION 43 #define MA_DR_FLAC_VERSION_STRING MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_MAJOR) "." MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_MINOR) "." MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_REVISION) #include #if defined(_MSC_VER) && _MSC_VER >= 1700 @@ -60465,7 +61041,7 @@ extern "C" { #define MA_DR_MP3_XSTRINGIFY(x) MA_DR_MP3_STRINGIFY(x) #define MA_DR_MP3_VERSION_MAJOR 0 #define MA_DR_MP3_VERSION_MINOR 6 -#define MA_DR_MP3_VERSION_REVISION 38 +#define MA_DR_MP3_VERSION_REVISION 40 #define MA_DR_MP3_VERSION_STRING MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_MAJOR) "." MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_MINOR) "." MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_REVISION) #include #define MA_DR_MP3_MAX_PCM_FRAMES_PER_MP3_FRAME 1152 @@ -60627,7 +61203,7 @@ MA_API ma_decoder_config ma_decoder_config_init(ma_format outputFormat, ma_uint3 return config; } -MA_API ma_decoder_config ma_decoder_config_init_default() +MA_API ma_decoder_config ma_decoder_config_init_default(void) { return ma_decoder_config_init(ma_format_unknown, 0, 0); } @@ -63220,7 +63796,7 @@ MA_API ma_result ma_stbvorbis_init(ma_read_proc onRead, ma_seek_proc onSeek, ma_ #if !defined(MA_NO_VORBIS) { /* - stb_vorbis lacks a callback based API for it's pulling API which means we're stuck with the + stb_vorbis lacks a callback based API for its pulling API which means we're stuck with the pushing API. In order for us to be able to successfully initialize the decoder we need to supply it with enough data. We need to keep loading data until we have enough. */ @@ -63301,7 +63877,7 @@ MA_API ma_result ma_stbvorbis_init_memory(const void* pData, size_t dataSize, co { (void)pAllocationCallbacks; - /* stb_vorbis uses an int as it's size specifier, restricting it to 32-bit even on 64-bit systems. *sigh*. */ + /* stb_vorbis uses an int as its size specifier, restricting it to 32-bit even on 64-bit systems. *sigh*. */ if (dataSize > INT_MAX) { return MA_TOO_BIG; } @@ -63391,7 +63967,7 @@ MA_API ma_result ma_stbvorbis_read_pcm_frames(ma_stbvorbis* pVorbis, void* pFram /* The first thing to do is read from any already-cached frames. */ ma_uint32 framesToReadFromCache = (ma_uint32)ma_min(pVorbis->push.framesRemaining, (frameCount - totalFramesRead)); /* Safe cast because pVorbis->framesRemaining is 32-bit. */ - /* The output pointer can be null in which case we just treate it as a seek. */ + /* The output pointer can be null in which case we just treat it as a seek. */ if (pFramesOut != NULL) { ma_uint64 iFrame; for (iFrame = 0; iFrame < framesToReadFromCache; iFrame += 1) { @@ -63465,7 +64041,7 @@ MA_API ma_result ma_stbvorbis_read_pcm_frames(ma_stbvorbis* pVorbis, void* pFram } } - /* If we don't have a success code at this point it means we've encounted an error or the end of the file has been reached (probably the latter). */ + /* If we don't have a success code at this point it means we've encountered an error or the end of the file has been reached (probably the latter). */ if (result != MA_SUCCESS) { break; } @@ -64279,8 +64855,7 @@ MA_API ma_result ma_decoder_init_memory(const void* pData, size_t dataSize, cons #if defined(MA_HAS_WAV) || \ defined(MA_HAS_MP3) || \ defined(MA_HAS_FLAC) || \ - defined(MA_HAS_VORBIS) || \ - defined(MA_HAS_OPUS) + defined(MA_HAS_VORBIS) #define MA_HAS_PATH_API #endif @@ -65095,7 +65670,7 @@ MA_API ma_result ma_decoder_read_pcm_frames(ma_decoder* pDecoder, void* pFramesO } else { /* Getting here means we need to do data conversion. If we're seeking forward and are _not_ doing resampling we can run this in a fast path. If we're doing resampling we - need to run through each sample because we need to ensure it's internal cache is updated. + need to run through each sample because we need to ensure its internal cache is updated. */ if (pFramesOut == NULL && pDecoder->converter.hasResampler == MA_FALSE) { result = ma_data_source_read_pcm_frames(pDecoder->pBackend, NULL, frameCount, &totalFramesReadOut); @@ -65185,8 +65760,17 @@ MA_API ma_result ma_decoder_read_pcm_frames(ma_decoder* pDecoder, void* pFramesO if (requiredInputFrameCount > 0) { result = ma_data_source_read_pcm_frames(pDecoder->pBackend, pIntermediaryBuffer, framesToReadThisIterationIn, &framesReadThisIterationIn); + + /* + Note here that even if we've reached the end, we don't want to abort because there might be more output frames needing to be + generated from cached input data, which might happen if resampling is being performed. + */ + if (result != MA_SUCCESS && result != MA_AT_END) { + break; + } } else { framesReadThisIterationIn = 0; + pIntermediaryBuffer[0] = 0; /* <-- This is just to silence a static analysis warning. */ } /* @@ -66667,7 +67251,7 @@ MA_API ma_result ma_noise_set_type(ma_noise* pNoise, ma_noise_type type) /* This function should never have been implemented in the first place. Changing the type dynamically is not - supported. Instead you need to uninitialize and reinitiailize a fresh `ma_noise` object. This function + supported. Instead you need to uninitialize and reinitialize a fresh `ma_noise` object. This function will be removed in version 0.12. */ MA_ASSERT(MA_FALSE); @@ -67713,7 +68297,7 @@ MA_API ma_result ma_resource_manager_init(const ma_resource_manager_config* pCon pResourceManager->config.pVFS = &pResourceManager->defaultVFS; } - /* If threading has been disabled at compile time, enfore it at run time as well. */ + /* If threading has been disabled at compile time, enforce it at run time as well. */ #ifdef MA_NO_THREADING { pResourceManager->config.flags |= MA_RESOURCE_MANAGER_FLAG_NO_THREADING; @@ -67750,15 +68334,17 @@ MA_API ma_result ma_resource_manager_init(const ma_resource_manager_config* pCon /* Custom decoding backends. */ if (pConfig->ppCustomDecodingBackendVTables != NULL && pConfig->customDecodingBackendCount > 0) { size_t sizeInBytes = sizeof(*pResourceManager->config.ppCustomDecodingBackendVTables) * pConfig->customDecodingBackendCount; + ma_decoding_backend_vtable** ppCustomDecodingBackendVTables; - pResourceManager->config.ppCustomDecodingBackendVTables = (ma_decoding_backend_vtable**)ma_malloc(sizeInBytes, &pResourceManager->config.allocationCallbacks); + ppCustomDecodingBackendVTables = (ma_decoding_backend_vtable**)ma_malloc(sizeInBytes, &pResourceManager->config.allocationCallbacks); if (pResourceManager->config.ppCustomDecodingBackendVTables == NULL) { ma_job_queue_uninit(&pResourceManager->jobQueue, &pResourceManager->config.allocationCallbacks); return MA_OUT_OF_MEMORY; } - MA_COPY_MEMORY(pResourceManager->config.ppCustomDecodingBackendVTables, pConfig->ppCustomDecodingBackendVTables, sizeInBytes); + MA_COPY_MEMORY(ppCustomDecodingBackendVTables, pConfig->ppCustomDecodingBackendVTables, sizeInBytes); + pResourceManager->config.ppCustomDecodingBackendVTables = ppCustomDecodingBackendVTables; pResourceManager->config.customDecodingBackendCount = pConfig->customDecodingBackendCount; pResourceManager->config.pCustomDecodingBackendUserData = pConfig->pCustomDecodingBackendUserData; } @@ -67809,7 +68395,7 @@ static void ma_resource_manager_delete_all_data_buffer_nodes(ma_resource_manager ma_resource_manager_data_buffer_node* pDataBufferNode = pResourceManager->pRootDataBufferNode; ma_resource_manager_data_buffer_node_remove(pResourceManager, pDataBufferNode); - /* The data buffer has been removed from the BST, so now we need to free it's data. */ + /* The data buffer has been removed from the BST, so now we need to free its data. */ ma_resource_manager_data_buffer_node_free(pResourceManager, pDataBufferNode); } } @@ -67822,7 +68408,7 @@ MA_API void ma_resource_manager_uninit(ma_resource_manager* pResourceManager) /* Job threads need to be killed first. To do this we need to post a quit message to the message queue and then wait for the thread. The quit message will never be removed from the - queue which means it will never not be returned after being encounted for the first time which means all threads will eventually receive it. + queue which means it will never not be returned after being encountered for the first time which means all threads will eventually receive it. */ ma_resource_manager_post_job_quit(pResourceManager); @@ -67862,7 +68448,7 @@ MA_API void ma_resource_manager_uninit(ma_resource_manager* pResourceManager) #endif } - ma_free(pResourceManager->config.ppCustomDecodingBackendVTables, &pResourceManager->config.allocationCallbacks); + ma_free((ma_decoding_backend_vtable**)pResourceManager->config.ppCustomDecodingBackendVTables, &pResourceManager->config.allocationCallbacks); /* <-- Naughty const-cast, but this is safe. */ if (pResourceManager->config.pLog == &pResourceManager->log) { ma_log_uninit(&pResourceManager->log); @@ -68280,7 +68866,7 @@ static ma_result ma_resource_manager_data_buffer_node_decode_next_page(ma_resour } result = ma_decoder_read_pcm_frames(pDecoder, pPage->pAudioData, framesToTryReading, &framesRead); - if (framesRead > 0) { + if (result == MA_SUCCESS && framesRead > 0) { pPage->sizeInFrames = framesRead; result = ma_paged_audio_buffer_data_append_page(&pDataBufferNode->data.backend.decodedPaged.data, pPage); @@ -68433,7 +69019,7 @@ static ma_result ma_resource_manager_data_buffer_node_acquire_critical_section(m if ((flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT) != 0) { ma_resource_manager_inline_notification_uninit(pInitNotification); } else { - /* These will have been freed by the job thread, but with WAIT_INIT they will already have happend sinced the job has already been handled. */ + /* These will have been freed by the job thread, but with WAIT_INIT they will already have happened since the job has already been handled. */ ma_free(pFilePathCopy, &pResourceManager->config.allocationCallbacks); ma_free(pFilePathWCopy, &pResourceManager->config.allocationCallbacks); } @@ -68798,6 +69384,10 @@ static ma_result ma_resource_manager_data_buffer_init_ex_internal(ma_resource_ma flags &= ~MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC; } + if (pConfig->isLooping) { + flags |= MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING; + } + async = (flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC) != 0; /* @@ -68810,7 +69400,7 @@ static ma_result ma_resource_manager_data_buffer_init_ex_internal(ma_resource_ma These fences are always released at the "done" tag at the end of this function. They'll be acquired a second if loading asynchronously. This double acquisition system is just done to - simplify code maintanence. + simplify code maintenance. */ ma_resource_manager_pipeline_notifications_acquire_all_fences(¬ifications); { @@ -68855,7 +69445,7 @@ static ma_result ma_resource_manager_data_buffer_init_ex_internal(ma_resource_ma /* The status of the data buffer needs to be set to MA_BUSY before posting the job so that the - worker thread is aware of it's busy state. If the LOAD_DATA_BUFFER job sees a status other + worker thread is aware of its busy state. If the LOAD_DATA_BUFFER job sees a status other than MA_BUSY, it'll assume an error and fall through to an early exit. */ ma_atomic_exchange_i32(&pDataBuffer->result, MA_BUSY); @@ -68874,7 +69464,7 @@ static ma_result ma_resource_manager_data_buffer_init_ex_internal(ma_resource_ma job.data.resourceManager.loadDataBuffer.rangeEndInPCMFrames = pConfig->rangeEndInPCMFrames; job.data.resourceManager.loadDataBuffer.loopPointBegInPCMFrames = pConfig->loopPointBegInPCMFrames; job.data.resourceManager.loadDataBuffer.loopPointEndInPCMFrames = pConfig->loopPointEndInPCMFrames; - job.data.resourceManager.loadDataBuffer.isLooping = pConfig->isLooping; + job.data.resourceManager.loadDataBuffer.isLooping = (flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING) != 0; /* If we need to wait for initialization to complete we can just process the job in place. */ if ((flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT) != 0) { @@ -69095,22 +69685,29 @@ MA_API ma_result ma_resource_manager_data_buffer_read_pcm_frames(ma_resource_man isDecodedBufferBusy = (ma_resource_manager_data_buffer_node_result(pDataBuffer->pNode) == MA_BUSY); if (ma_resource_manager_data_buffer_get_available_frames(pDataBuffer, &availableFrames) == MA_SUCCESS) { - /* Don't try reading more than the available frame count. */ - if (frameCount > availableFrames) { - frameCount = availableFrames; + /* Don't try reading more than the available frame count if the data buffer node is still loading. */ + if (isDecodedBufferBusy) { + if (frameCount > availableFrames) { + frameCount = availableFrames; - /* - If there's no frames available we want to set the status to MA_AT_END. The logic below - will check if the node is busy, and if so, change it to MA_BUSY. The reason we do this - is because we don't want to call `ma_data_source_read_pcm_frames()` if the frame count - is 0 because that'll result in a situation where it's possible MA_AT_END won't get - returned. - */ - if (frameCount == 0) { - result = MA_AT_END; + /* + If there's no frames available we want to set the status to MA_AT_END. The logic below + will check if the node is busy, and if so, change it to MA_BUSY. The reason we do this + is because we don't want to call `ma_data_source_read_pcm_frames()` if the frame count + is 0 because that'll result in a situation where it's possible MA_AT_END won't get + returned. + */ + if (frameCount == 0) { + result = MA_AT_END; + } + } else { + isDecodedBufferBusy = MA_FALSE; /* We have enough frames available in the buffer to avoid a MA_BUSY status. */ } } else { - isDecodedBufferBusy = MA_FALSE; /* We have enough frames available in the buffer to avoid a MA_BUSY status. */ + /* + Getting here means the buffer has been fully loaded. We can just pass the frame count straight + into ma_data_source_read_pcm_frames() below and let ma_data_source handle it. + */ } } } @@ -69510,6 +70107,7 @@ MA_API ma_result ma_resource_manager_data_stream_init_ex(ma_resource_manager* pR ma_bool32 waitBeforeReturning = MA_FALSE; ma_resource_manager_inline_notification waitNotification; ma_resource_manager_pipeline_notifications notifications; + ma_uint32 flags; if (pDataStream == NULL) { if (pConfig != NULL && pConfig->pNotifications != NULL) { @@ -69540,13 +70138,18 @@ MA_API ma_result ma_resource_manager_data_stream_init_ex(ma_resource_manager* pR return result; } + flags = pConfig->flags; + if (pConfig->isLooping) { + flags |= MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING; + } + pDataStream->pResourceManager = pResourceManager; pDataStream->flags = pConfig->flags; pDataStream->result = MA_BUSY; ma_data_source_set_range_in_pcm_frames(pDataStream, pConfig->rangeBegInPCMFrames, pConfig->rangeEndInPCMFrames); ma_data_source_set_loop_point_in_pcm_frames(pDataStream, pConfig->loopPointBegInPCMFrames, pConfig->loopPointEndInPCMFrames); - ma_data_source_set_looping(pDataStream, pConfig->isLooping); + ma_data_source_set_looping(pDataStream, (flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING) != 0); if (pResourceManager == NULL || (pConfig->pFilePath == NULL && pConfig->pFilePathW == NULL)) { ma_resource_manager_pipeline_notifications_signal_all_notifications(¬ifications); @@ -70168,6 +70771,9 @@ static ma_result ma_resource_manager_data_source_preinit(ma_resource_manager* pR } pDataSource->flags = pConfig->flags; + if (pConfig->isLooping) { + pDataSource->flags |= MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING; + } return MA_SUCCESS; } @@ -70726,9 +71332,10 @@ static ma_result ma_job_process__resource_manager__load_data_buffer(ma_job* pJob */ result = ma_resource_manager_data_buffer_result(pDataBuffer); if (result != MA_BUSY) { - goto done; /* <-- This will ensure the exucution pointer is incremented. */ + goto done; /* <-- This will ensure the execution pointer is incremented. */ } else { result = MA_SUCCESS; /* <-- Make sure this is reset. */ + (void)result; /* <-- This is to suppress a static analysis diagnostic about "result" not being used. But for safety when I do future maintenance I don't want to delete that assignment. */ } /* Try initializing the connector if we haven't already. */ @@ -71075,11 +71682,74 @@ static ma_result ma_job_process__resource_manager__seek_data_stream(ma_job* pJob #ifndef MA_NO_NODE_GRAPH + +static ma_stack* ma_stack_init(size_t sizeInBytes, const ma_allocation_callbacks* pAllocationCallbacks) +{ + ma_stack* pStack; + + if (sizeInBytes == 0) { + return NULL; + } + + pStack = (ma_stack*)ma_malloc(sizeof(*pStack) - sizeof(pStack->_data) + sizeInBytes, pAllocationCallbacks); + if (pStack == NULL) { + return NULL; + } + + pStack->offset = 0; + pStack->sizeInBytes = sizeInBytes; + + return pStack; +} + +static void ma_stack_uninit(ma_stack* pStack, const ma_allocation_callbacks* pAllocationCallbacks) +{ + if (pStack == NULL) { + return; + } + + ma_free(pStack, pAllocationCallbacks); +} + +static void* ma_stack_alloc(ma_stack* pStack, size_t sz) +{ + /* The size of the allocation is stored in the memory directly before the pointer. This needs to include padding to keep it aligned to ma_uintptr */ + void* p = (void*)((char*)pStack->_data + pStack->offset); + size_t* pSize = (size_t*)p; + + sz = (sz + (sizeof(ma_uintptr) - 1)) & ~(sizeof(ma_uintptr) - 1); /* Padding. */ + if (pStack->offset + sz + sizeof(size_t) > pStack->sizeInBytes) { + return NULL; /* Out of memory. */ + } + + pStack->offset += sz + sizeof(size_t); + + *pSize = sz; + return (void*)((char*)p + sizeof(size_t)); +} + +static void ma_stack_free(ma_stack* pStack, void* p) +{ + size_t* pSize; + + if (p == NULL) { + return; + } + + pSize = (size_t*)p - 1; + pStack->offset -= *pSize + sizeof(size_t); +} + + + /* 10ms @ 48K = 480. Must never exceed 65535. */ #ifndef MA_DEFAULT_NODE_CACHE_CAP_IN_FRAMES_PER_BUS #define MA_DEFAULT_NODE_CACHE_CAP_IN_FRAMES_PER_BUS 480 #endif +#ifndef MA_DEFAULT_PREMIX_STACK_SIZE_PER_CHANNEL +#define MA_DEFAULT_PREMIX_STACK_SIZE_PER_CHANNEL 524288 +#endif static ma_result ma_node_read_pcm_frames(ma_node* pNode, ma_uint32 outputBusIndex, float* pFramesOut, ma_uint32 frameCount, ma_uint32* pFramesRead, ma_uint64 globalTime); @@ -71119,8 +71789,8 @@ MA_API ma_node_graph_config ma_node_graph_config_init(ma_uint32 channels) ma_node_graph_config config; MA_ZERO_OBJECT(&config); - config.channels = channels; - config.nodeCacheCapInFrames = MA_DEFAULT_NODE_CACHE_CAP_IN_FRAMES_PER_BUS; + config.channels = channels; + config.processingSizeInFrames = 0; return config; } @@ -71207,11 +71877,7 @@ MA_API ma_result ma_node_graph_init(const ma_node_graph_config* pConfig, const m } MA_ZERO_OBJECT(pNodeGraph); - pNodeGraph->nodeCacheCapInFrames = pConfig->nodeCacheCapInFrames; - if (pNodeGraph->nodeCacheCapInFrames == 0) { - pNodeGraph->nodeCacheCapInFrames = MA_DEFAULT_NODE_CACHE_CAP_IN_FRAMES_PER_BUS; - } - + pNodeGraph->processingSizeInFrames = pConfig->processingSizeInFrames; /* Base node so we can use the node graph as a node into another graph. */ baseConfig = ma_node_config_init(); @@ -71236,6 +71902,40 @@ MA_API ma_result ma_node_graph_init(const ma_node_graph_config* pConfig, const m return result; } + + /* Processing cache. */ + if (pConfig->processingSizeInFrames > 0) { + pNodeGraph->pProcessingCache = (float*)ma_malloc(pConfig->processingSizeInFrames * pConfig->channels * sizeof(float), pAllocationCallbacks); + if (pNodeGraph->pProcessingCache == NULL) { + ma_node_uninit(&pNodeGraph->endpoint, pAllocationCallbacks); + ma_node_uninit(&pNodeGraph->base, pAllocationCallbacks); + return MA_OUT_OF_MEMORY; + } + } + + + /* + We need a pre-mix stack. The size of this stack is configurable via the config. The default value depends on the channel count. + */ + { + size_t preMixStackSizeInBytes = pConfig->preMixStackSizeInBytes; + if (preMixStackSizeInBytes == 0) { + preMixStackSizeInBytes = pConfig->channels * MA_DEFAULT_PREMIX_STACK_SIZE_PER_CHANNEL; + } + + pNodeGraph->pPreMixStack = ma_stack_init(preMixStackSizeInBytes, pAllocationCallbacks); + if (pNodeGraph->pPreMixStack == NULL) { + ma_node_uninit(&pNodeGraph->endpoint, pAllocationCallbacks); + ma_node_uninit(&pNodeGraph->base, pAllocationCallbacks); + if (pNodeGraph->pProcessingCache != NULL) { + ma_free(pNodeGraph->pProcessingCache, pAllocationCallbacks); + } + + return MA_OUT_OF_MEMORY; + } + } + + return MA_SUCCESS; } @@ -71246,6 +71946,17 @@ MA_API void ma_node_graph_uninit(ma_node_graph* pNodeGraph, const ma_allocation_ } ma_node_uninit(&pNodeGraph->endpoint, pAllocationCallbacks); + ma_node_uninit(&pNodeGraph->base, pAllocationCallbacks); + + if (pNodeGraph->pProcessingCache != NULL) { + ma_free(pNodeGraph->pProcessingCache, pAllocationCallbacks); + pNodeGraph->pProcessingCache = NULL; + } + + if (pNodeGraph->pPreMixStack != NULL) { + ma_stack_uninit(pNodeGraph->pPreMixStack, pAllocationCallbacks); + pNodeGraph->pPreMixStack = NULL; + } } MA_API ma_node* ma_node_graph_get_endpoint(ma_node_graph* pNodeGraph) @@ -71278,27 +71989,72 @@ MA_API ma_result ma_node_graph_read_pcm_frames(ma_node_graph* pNodeGraph, void* totalFramesRead = 0; while (totalFramesRead < frameCount) { ma_uint32 framesJustRead; - ma_uint64 framesToRead = frameCount - totalFramesRead; + ma_uint64 framesToRead; + float* pRunningFramesOut; + framesToRead = frameCount - totalFramesRead; if (framesToRead > 0xFFFFFFFF) { framesToRead = 0xFFFFFFFF; } - ma_node_graph_set_is_reading(pNodeGraph, MA_TRUE); - { - result = ma_node_read_pcm_frames(&pNodeGraph->endpoint, 0, (float*)ma_offset_pcm_frames_ptr(pFramesOut, totalFramesRead, ma_format_f32, channels), (ma_uint32)framesToRead, &framesJustRead, ma_node_get_time(&pNodeGraph->endpoint)); - } - ma_node_graph_set_is_reading(pNodeGraph, MA_FALSE); + pRunningFramesOut = (float*)ma_offset_pcm_frames_ptr(pFramesOut, totalFramesRead, ma_format_f32, channels); - totalFramesRead += framesJustRead; + /* If there's anything in the cache, consume that first. */ + if (pNodeGraph->processingCacheFramesRemaining > 0) { + ma_uint32 framesToReadFromCache; - if (result != MA_SUCCESS) { - break; - } + framesToReadFromCache = (ma_uint32)framesToRead; + if (framesToReadFromCache > pNodeGraph->processingCacheFramesRemaining) { + framesToReadFromCache = pNodeGraph->processingCacheFramesRemaining; + } - /* Abort if we weren't able to read any frames or else we risk getting stuck in a loop. */ - if (framesJustRead == 0) { - break; + MA_COPY_MEMORY(pRunningFramesOut, pNodeGraph->pProcessingCache, framesToReadFromCache * channels * sizeof(float)); + MA_MOVE_MEMORY(pNodeGraph->pProcessingCache, pNodeGraph->pProcessingCache + (framesToReadFromCache * channels), (pNodeGraph->processingCacheFramesRemaining - framesToReadFromCache) * channels * sizeof(float)); + pNodeGraph->processingCacheFramesRemaining -= framesToReadFromCache; + + totalFramesRead += framesToReadFromCache; + continue; + } else { + /* + If processingSizeInFrames is non-zero, we need to make sure we always read in chunks of that size. If the frame count is less than + that, we need to read into the cache and then continue on. + */ + float* pReadDst = pRunningFramesOut; + + if (pNodeGraph->processingSizeInFrames > 0) { + if (framesToRead < pNodeGraph->processingSizeInFrames) { + pReadDst = pNodeGraph->pProcessingCache; /* We need to read into the cache because otherwise we'll overflow the output buffer. */ + } + + framesToRead = pNodeGraph->processingSizeInFrames; + } + + ma_node_graph_set_is_reading(pNodeGraph, MA_TRUE); + { + result = ma_node_read_pcm_frames(&pNodeGraph->endpoint, 0, pReadDst, (ma_uint32)framesToRead, &framesJustRead, ma_node_get_time(&pNodeGraph->endpoint)); + } + ma_node_graph_set_is_reading(pNodeGraph, MA_FALSE); + + /* + Do not increment the total frames read counter if we read into the cache. We use this to determine how many frames have + been written to the final output buffer. + */ + if (pReadDst == pNodeGraph->pProcessingCache) { + /* We read into the cache. */ + pNodeGraph->processingCacheFramesRemaining = framesJustRead; + } else { + /* We read straight into the output buffer. */ + totalFramesRead += framesJustRead; + } + + if (result != MA_SUCCESS) { + break; + } + + /* Abort if we weren't able to read any frames or else we risk getting stuck in a loop. */ + if (framesJustRead == 0) { + break; + } } } @@ -71499,7 +72255,7 @@ static void ma_node_input_bus_detach__no_output_bus_lock(ma_node_input_bus* pInp *not* using a lock when iterating over the list in the audio thread. We therefore need to craft this in a way such that the iteration on the audio thread doesn't break. - The the first thing to do is swap out the "next" pointer of the previous output bus with the + The first thing to do is swap out the "next" pointer of the previous output bus with the new "next" output bus. This is the operation that matters for iteration on the audio thread. After that, the previous pointer on the new "next" pointer needs to be updated, after which point the linked list will be in a good state. @@ -71592,7 +72348,7 @@ static void ma_node_input_bus_attach(ma_node_input_bus* pInputBus, ma_node_outpu /* Now we need to attach the output bus to the linked list. This involves updating two pointers on two different output buses so I'm going to go ahead and keep this simple and just use a lock. - There are ways to do this without a lock, but it's just too hard to maintain for it's value. + There are ways to do this without a lock, but it's just too hard to maintain for its value. Although we're locking here, it's important to remember that we're *not* locking when iterating and reading audio data since that'll be running on the audio thread. As a result we need to be @@ -71685,11 +72441,9 @@ static ma_result ma_node_input_bus_read_pcm_frames(ma_node* pInputNode, ma_node_ ma_uint32 inputChannels; ma_bool32 doesOutputBufferHaveContent = MA_FALSE; - (void)pInputNode; /* Not currently used. */ - /* This will be called from the audio thread which means we can't be doing any locking. Basically, - this function will not perfom any locking, whereas attaching and detaching will, but crafted in + this function will not perform any locking, whereas attaching and detaching will, but crafted in such a way that we don't need to perform any locking here. The important thing to remember is to always iterate in a forward direction. @@ -71735,19 +72489,12 @@ static ma_result ma_node_input_bus_read_pcm_frames(ma_node* pInputNode, ma_node_ if (pFramesOut != NULL) { /* Read. */ - float temp[MA_DATA_CONVERTER_STACK_BUFFER_SIZE / sizeof(float)]; - ma_uint32 tempCapInFrames = ma_countof(temp) / inputChannels; - while (framesProcessed < frameCount) { float* pRunningFramesOut; ma_uint32 framesToRead; - ma_uint32 framesJustRead; + ma_uint32 framesJustRead = 0; framesToRead = frameCount - framesProcessed; - if (framesToRead > tempCapInFrames) { - framesToRead = tempCapInFrames; - } - pRunningFramesOut = ma_offset_pcm_frames_ptr_f32(pFramesOut, framesProcessed, inputChannels); if (doesOutputBufferHaveContent == MA_FALSE) { @@ -71755,11 +72502,32 @@ static ma_result ma_node_input_bus_read_pcm_frames(ma_node* pInputNode, ma_node_ result = ma_node_read_pcm_frames(pOutputBus->pNode, pOutputBus->outputBusIndex, pRunningFramesOut, framesToRead, &framesJustRead, globalTime + framesProcessed); } else { /* Slow path. Not the first attachment. Mixing required. */ - result = ma_node_read_pcm_frames(pOutputBus->pNode, pOutputBus->outputBusIndex, temp, framesToRead, &framesJustRead, globalTime + framesProcessed); - if (result == MA_SUCCESS || result == MA_AT_END) { - if (isSilentOutput == MA_FALSE) { /* Don't mix if the node outputs silence. */ - ma_mix_pcm_frames_f32(pRunningFramesOut, temp, framesJustRead, inputChannels, /*volume*/1); + ma_uint32 preMixBufferCapInFrames = ((ma_node_base*)pInputNode)->cachedDataCapInFramesPerBus; + float* pPreMixBuffer = (float*)ma_stack_alloc(((ma_node_base*)pInputNode)->pNodeGraph->pPreMixStack, preMixBufferCapInFrames * inputChannels * sizeof(float)); + + if (pPreMixBuffer == NULL) { + /* + If you're hitting this assert it means you've got an unusually deep chain of nodes, you've got an excessively large processing + size, or you have a combination of both, and as a result have run out of stack space. You can increase this using the + preMixStackSizeInBytes variable in ma_node_graph_config. If you're using ma_engine, you can do it via the preMixStackSizeInBytes + variable in ma_engine_config. It defaults to 512KB per output channel. + */ + MA_ASSERT(MA_FALSE); + } else { + if (framesToRead > preMixBufferCapInFrames) { + framesToRead = preMixBufferCapInFrames; } + + result = ma_node_read_pcm_frames(pOutputBus->pNode, pOutputBus->outputBusIndex, pPreMixBuffer, framesToRead, &framesJustRead, globalTime + framesProcessed); + if (result == MA_SUCCESS || result == MA_AT_END) { + if (isSilentOutput == MA_FALSE) { /* Don't mix if the node outputs silence. */ + ma_mix_pcm_frames_f32(pRunningFramesOut, pPreMixBuffer, framesJustRead, inputChannels, /*volume*/1); + } + } + + /* The pre-mix buffer is no longer required. */ + ma_stack_free(((ma_node_base*)pInputNode)->pNodeGraph->pPreMixStack, pPreMixBuffer); + pPreMixBuffer = NULL; } } @@ -71814,6 +72582,25 @@ MA_API ma_node_config ma_node_config_init(void) return config; } +static ma_uint16 ma_node_config_get_cache_size_in_frames(const ma_node_config* pConfig, const ma_node_graph* pNodeGraph) +{ + ma_uint32 cacheSizeInFrames; + + (void)pConfig; + + if (pNodeGraph->processingSizeInFrames > 0) { + cacheSizeInFrames = pNodeGraph->processingSizeInFrames; + } else { + cacheSizeInFrames = MA_DEFAULT_NODE_CACHE_CAP_IN_FRAMES_PER_BUS; + } + + if (cacheSizeInFrames > 0xFFFF) { + cacheSizeInFrames = 0xFFFF; + } + + return (ma_uint16)cacheSizeInFrames; +} + static ma_result ma_node_detach_full(ma_node* pNode); @@ -71968,7 +72755,7 @@ static ma_result ma_node_get_heap_layout(ma_node_graph* pNodeGraph, const ma_nod /* Cached audio data. - We need to allocate memory for a caching both input and output data. We have an optimization + We need to allocate memory for caching both input and output data. We have an optimization where no caching is necessary for specific conditions: - The node has 0 inputs and 1 output. @@ -71987,14 +72774,18 @@ static ma_result ma_node_get_heap_layout(ma_node_graph* pNodeGraph, const ma_nod } else { /* Slow path. Cache needed. */ size_t cachedDataSizeInBytes = 0; + ma_uint32 cacheCapInFrames; ma_uint32 iBus; + /* The capacity of the cache is based on our callback processing size. */ + cacheCapInFrames = ma_node_config_get_cache_size_in_frames(pConfig, pNodeGraph); + for (iBus = 0; iBus < inputBusCount; iBus += 1) { - cachedDataSizeInBytes += pNodeGraph->nodeCacheCapInFrames * ma_get_bytes_per_frame(ma_format_f32, pConfig->pInputChannels[iBus]); + cachedDataSizeInBytes += cacheCapInFrames * ma_get_bytes_per_frame(ma_format_f32, pConfig->pInputChannels[iBus]); } for (iBus = 0; iBus < outputBusCount; iBus += 1) { - cachedDataSizeInBytes += pNodeGraph->nodeCacheCapInFrames * ma_get_bytes_per_frame(ma_format_f32, pConfig->pOutputChannels[iBus]); + cachedDataSizeInBytes += cacheCapInFrames * ma_get_bytes_per_frame(ma_format_f32, pConfig->pOutputChannels[iBus]); } pHeapLayout->cachedDataOffset = pHeapLayout->sizeInBytes; @@ -72080,13 +72871,12 @@ MA_API ma_result ma_node_init_preallocated(ma_node_graph* pNodeGraph, const ma_n if (heapLayout.cachedDataOffset != MA_SIZE_MAX) { pNodeBase->pCachedData = (float*)ma_offset_ptr(pHeap, heapLayout.cachedDataOffset); - pNodeBase->cachedDataCapInFramesPerBus = pNodeGraph->nodeCacheCapInFrames; + pNodeBase->cachedDataCapInFramesPerBus = ma_node_config_get_cache_size_in_frames(pConfig, pNodeGraph); } else { pNodeBase->pCachedData = NULL; } - /* We need to run an initialization step for each input and output bus. */ for (iInputBus = 0; iInputBus < ma_node_get_input_bus_count(pNodeBase); iInputBus += 1) { result = ma_node_input_bus_init(pConfig->pInputChannels[iInputBus], &pNodeBase->pInputBuses[iInputBus]); @@ -72260,7 +73050,7 @@ static ma_result ma_node_detach_full(ma_node* pNode) /* At this point all output buses will have been detached from the graph and we can be guaranteed - that none of it's input nodes will be getting processed by the graph. We can detach these + that none of its input nodes will be getting processed by the graph. We can detach these without needing to worry about the audio thread touching them. */ for (iInputBus = 0; iInputBus < ma_node_get_input_bus_count(pNode); iInputBus += 1) { @@ -72275,7 +73065,7 @@ static ma_result ma_node_detach_full(ma_node* pNode) linked list logic. We don't need to worry about the audio thread referencing these because the step above severed the connection to the graph. */ - for (pOutputBus = (ma_node_output_bus*)ma_atomic_load_ptr(&pInputBus->head.pNext); pOutputBus != NULL; pOutputBus = (ma_node_output_bus*)ma_atomic_load_ptr(&pOutputBus->pNext)) { + for (pOutputBus = (ma_node_output_bus*)ma_atomic_load_ptr(&pInputBus->head.pNext); pOutputBus != NULL; pOutputBus = (ma_node_output_bus*)ma_atomic_load_ptr(&pInputBus->head.pNext)) { ma_node_detach_output_bus(pOutputBus->pNode, pOutputBus->outputBusIndex); /* This won't do any waiting in practice and should be efficient. */ } } @@ -72297,7 +73087,7 @@ MA_API ma_result ma_node_detach_output_bus(ma_node* pNode, ma_uint32 outputBusIn return MA_INVALID_ARGS; /* Invalid output bus index. */ } - /* We need to lock the output bus because we need to inspect the input node and grab it's input bus. */ + /* We need to lock the output bus because we need to inspect the input node and grab its input bus. */ ma_node_output_bus_lock(&pNodeBase->pOutputBuses[outputBusIndex]); { pInputNodeBase = (ma_node_base*)pNodeBase->pOutputBuses[outputBusIndex].pInputNode; @@ -72463,7 +73253,7 @@ MA_API ma_node_state ma_node_get_state_by_time_range(const ma_node* pNode, ma_ui /* Getting here means the node is marked as started, but it may still not be truly started due to - it's start time not having been reached yet. Also, the stop time may have also been reached in + its start time not having been reached yet. Also, the stop time may have also been reached in which case it'll be considered stopped. */ if (ma_node_get_state_time(pNode, ma_node_state_started) > globalTimeBeg) { @@ -72474,7 +73264,7 @@ MA_API ma_node_state ma_node_get_state_by_time_range(const ma_node* pNode, ma_ui return ma_node_state_stopped; /* Stop time has been reached. */ } - /* Getting here means the node is marked as started and is within it's start/stop times. */ + /* Getting here means the node is marked as started and is within its start/stop times. */ return ma_node_state_started; } @@ -72636,12 +73426,12 @@ static ma_result ma_node_read_pcm_frames(ma_node* pNode, ma_uint32 outputBusInde frameCountOut = totalFramesRead; if (totalFramesRead > 0) { - ma_node_process_pcm_frames_internal(pNode, (const float**)ppFramesIn, &frameCountIn, ppFramesOut, &frameCountOut); /* From GCC: expected 'const float **' but argument is of type 'float **'. Shouldn't this be implicit? Excplicit cast to silence the warning. */ + ma_node_process_pcm_frames_internal(pNode, (const float**)ppFramesIn, &frameCountIn, ppFramesOut, &frameCountOut); /* From GCC: expected 'const float **' but argument is of type 'float **'. Shouldn't this be implicit? Explicit cast to silence the warning. */ } /* A passthrough should never have modified the input and output frame counts. If you're - triggering these assers you need to fix your processing callback. + triggering these asserts you need to fix your processing callback. */ MA_ASSERT(frameCountIn == totalFramesRead); MA_ASSERT(frameCountOut == totalFramesRead); @@ -72819,7 +73609,7 @@ static ma_result ma_node_read_pcm_frames(ma_node* pNode, ma_uint32 outputBusInde frames available right now. */ if (frameCountIn > 0 || (pNodeBase->vtable->flags & MA_NODE_FLAG_DIFFERENT_PROCESSING_RATES) != 0) { - ma_node_process_pcm_frames_internal(pNode, (const float**)ppFramesIn, &frameCountIn, ppFramesOut, &frameCountOut); /* From GCC: expected 'const float **' but argument is of type 'float **'. Shouldn't this be implicit? Excplicit cast to silence the warning. */ + ma_node_process_pcm_frames_internal(pNode, (const float**)ppFramesIn, &frameCountIn, ppFramesOut, &frameCountOut); /* From GCC: expected 'const float **' but argument is of type 'float **'. Shouldn't this be implicit? Explicit cast to silence the warning. */ } else { frameCountOut = 0; /* No data was processed. */ } @@ -74056,7 +74846,7 @@ static ma_bool32 ma_engine_node_is_pitching_enabled(const ma_engine_node* pEngin { MA_ASSERT(pEngineNode != NULL); - /* Don't try to be clever by skiping resampling in the pitch=1 case or else you'll glitch when moving away from 1. */ + /* Don't try to be clever by skipping resampling in the pitch=1 case or else you'll glitch when moving away from 1. */ return !ma_atomic_load_explicit_32(&pEngineNode->isPitchDisabled, ma_atomic_memory_order_acquire); } @@ -74093,7 +74883,7 @@ static ma_result ma_engine_node_set_volume(ma_engine_node* pEngineNode, float vo /* If we're not smoothing we should bypass the volume gainer entirely. */ if (pEngineNode->volumeSmoothTimeInPCMFrames == 0) { - /* We should always have an active spatializer because it can be enabled and disabled dynamically. We can just use that for hodling our volume. */ + /* We should always have an active spatializer because it can be enabled and disabled dynamically. We can just use that for holding our volume. */ ma_spatializer_set_master_volume(&pEngineNode->spatializer, volume); } else { /* We're using volume smoothing, so apply the master volume to the gainer. */ @@ -74408,7 +75198,7 @@ static void ma_engine_node_process_pcm_frames__sound(ma_node* pNode, const float ma_sound_set_at_end(pSound, MA_TRUE); /* This will be set to false in ma_sound_start(). */ } - pRunningFramesOut = ma_offset_pcm_frames_ptr_f32(ppFramesOut[0], totalFramesRead, ma_engine_get_channels(ma_sound_get_engine(pSound))); + pRunningFramesOut = ma_offset_pcm_frames_ptr_f32(ppFramesOut[0], totalFramesRead, ma_node_get_output_channels(pNode, 0)); frameCountIn = (ma_uint32)framesJustRead; frameCountOut = framesRemaining; @@ -74739,7 +75529,7 @@ MA_API ma_result ma_engine_node_init_preallocated(const ma_engine_node_config* p /* - Spatialization comes next. We spatialize based ont he node's output channel count. It's up the caller to + Spatialization comes next. We spatialize based on the node's output channel count. It's up the caller to ensure channels counts link up correctly in the node graph. */ spatializerConfig = ma_engine_node_spatializer_config_init(&baseNodeConfig); @@ -74929,6 +75719,21 @@ static void ma_engine_data_callback_internal(ma_device* pDevice, void* pFramesOu ma_engine_read_pcm_frames(pEngine, pFramesOut, frameCount, NULL); } + +static ma_uint32 ma_device__get_processing_size_in_frames(ma_device* pDevice) +{ + /* + The processing size is the period size. The device can have a fixed sized processing size, or + it can be decided by the backend in which case it can be variable. + */ + if (pDevice->playback.intermediaryBufferCap > 0) { + /* Using a fixed sized processing callback. */ + return pDevice->playback.intermediaryBufferCap; + } else { + /* Not using a fixed sized processing callback. Need to estimate the processing size based on the backend. */ + return pDevice->playback.internalPeriodSizeInFrames; + } +} #endif MA_API ma_result ma_engine_init(const ma_engine_config* pConfig, ma_engine* pEngine) @@ -75022,6 +75827,14 @@ MA_API ma_result ma_engine_init(const ma_engine_config* pConfig, ma_engine* pEng if (pEngine->pDevice != NULL) { engineConfig.channels = pEngine->pDevice->playback.channels; engineConfig.sampleRate = pEngine->pDevice->sampleRate; + + /* + The processing size used by the engine is determined by engineConfig.periodSizeInFrames. We want + to make this equal to what the device is using for it's period size. If we don't do that, it's + possible that the node graph will split it's processing into multiple passes which can introduce + glitching. + */ + engineConfig.periodSizeInFrames = ma_device__get_processing_size_in_frames(pEngine->pDevice); } } #endif @@ -75048,9 +75861,10 @@ MA_API ma_result ma_engine_init(const ma_engine_config* pConfig, ma_engine* pEng } - /* The engine is a node graph. This needs to be initialized after we have the device so we can can determine the channel count. */ + /* The engine is a node graph. This needs to be initialized after we have the device so we can determine the channel count. */ nodeGraphConfig = ma_node_graph_config_init(engineConfig.channels); - nodeGraphConfig.nodeCacheCapInFrames = (engineConfig.periodSizeInFrames > 0xFFFF) ? 0xFFFF : (ma_uint16)engineConfig.periodSizeInFrames; + nodeGraphConfig.processingSizeInFrames = engineConfig.periodSizeInFrames; + nodeGraphConfig.preMixStackSizeInBytes = engineConfig.preMixStackSizeInBytes; result = ma_node_graph_init(&nodeGraphConfig, &pEngine->allocationCallbacks, &pEngine->nodeGraph); if (result != MA_SUCCESS) { @@ -75130,8 +75944,8 @@ MA_API ma_result ma_engine_init(const ma_engine_config* pConfig, ma_engine* pEng ma_allocation_callbacks_init_copy(&resourceManagerConfig.allocationCallbacks, &pEngine->allocationCallbacks); resourceManagerConfig.pVFS = engineConfig.pResourceManagerVFS; - /* The Emscripten build cannot use threads. */ - #if defined(MA_EMSCRIPTEN) + /* The Emscripten build cannot use threads unless it's targeting pthreads. */ + #if defined(MA_EMSCRIPTEN) && !defined(__EMSCRIPTEN_PTHREADS__) { resourceManagerConfig.jobThreadCount = 0; resourceManagerConfig.flags |= MA_RESOURCE_MANAGER_FLAG_NO_THREADING; @@ -75646,7 +76460,7 @@ MA_API ma_result ma_engine_play_sound_ex(ma_engine* pEngine, const char* pFilePa return MA_INVALID_ARGS; } - /* Attach to the endpoint node if nothing is specicied. */ + /* Attach to the endpoint node if nothing is specified. */ if (pNode == NULL) { pNode = ma_node_graph_get_endpoint(&pEngine->nodeGraph); nodeInputBusIndex = 0; @@ -75863,7 +76677,7 @@ static ma_result ma_sound_init_from_data_source_internal(ma_engine* pEngine, con ma_data_source_set_range_in_pcm_frames(ma_sound_get_data_source(pSound), pConfig->loopPointBegInPCMFrames, pConfig->loopPointEndInPCMFrames); } - ma_sound_set_looping(pSound, pConfig->isLooping); + ma_sound_set_looping(pSound, pConfig->isLooping || ((pConfig->flags & MA_SOUND_FLAG_LOOPING) != 0)); return MA_SUCCESS; } @@ -75887,6 +76701,9 @@ MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_s it and can avoid accessing the sound from within the notification. */ flags = pConfig->flags | MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT; + if (pConfig->isLooping) { + flags |= MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING; + } pSound->pResourceManagerDataSource = (ma_resource_manager_data_source*)ma_malloc(sizeof(*pSound->pResourceManagerDataSource), &pEngine->allocationCallbacks); if (pSound->pResourceManagerDataSource == NULL) { @@ -75915,7 +76732,7 @@ MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_s resourceManagerDataSourceConfig.rangeEndInPCMFrames = pConfig->rangeEndInPCMFrames; resourceManagerDataSourceConfig.loopPointBegInPCMFrames = pConfig->loopPointBegInPCMFrames; resourceManagerDataSourceConfig.loopPointEndInPCMFrames = pConfig->loopPointEndInPCMFrames; - resourceManagerDataSourceConfig.isLooping = pConfig->isLooping; + resourceManagerDataSourceConfig.isLooping = (flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING) != 0; result = ma_resource_manager_data_source_init_ex(pEngine->pResourceManager, &resourceManagerDataSourceConfig, pSound->pResourceManagerDataSource); if (result != MA_SUCCESS) { @@ -76067,7 +76884,7 @@ MA_API ma_result ma_sound_init_ex(ma_engine* pEngine, const ma_sound_config* pCo { /* Getting here means we're not loading from a file. We may be loading from an already-initialized - data source, or none at all. If we aren't specifying any data source, we'll be initializing the + data source, or none at all. If we aren't specifying any data source, we'll be initializing the equivalent to a group. ma_data_source_init_from_data_source_internal() will deal with this for us, so no special treatment required here. */ @@ -76787,6 +77604,27 @@ MA_API ma_result ma_sound_seek_to_pcm_frame(ma_sound* pSound, ma_uint64 frameInd return MA_SUCCESS; } +MA_API ma_result ma_sound_seek_to_second(ma_sound* pSound, float seekPointInSeconds) +{ + ma_uint64 frameIndex; + ma_uint32 sampleRate; + ma_result result; + + if (pSound == NULL) { + return MA_INVALID_ARGS; + } + + result = ma_sound_get_data_format(pSound, NULL, NULL, &sampleRate, NULL, 0); + if (result != MA_SUCCESS) { + return result; + } + + /* We need PCM frames. We need to convert first */ + frameIndex = (ma_uint64)(seekPointInSeconds * sampleRate); + + return ma_sound_seek_to_pcm_frame(pSound, frameIndex); +} + MA_API ma_result ma_sound_get_data_format(ma_sound* pSound, ma_format* pFormat, ma_uint32* pChannels, ma_uint32* pSampleRate, ma_channel* pChannelMap, size_t channelMapCap) { if (pSound == NULL) { @@ -77233,7 +78071,7 @@ code below please report the bug to the respective repository for the relevant p *************************************************************************************************************************************************************** **************************************************************************************************************************************************************/ #if !defined(MA_NO_WAV) && (!defined(MA_NO_DECODING) || !defined(MA_NO_ENCODING)) -#if !defined(MA_DR_WAV_IMPLEMENTATION) && !defined(MA_DR_WAV_IMPLEMENTATION) /* For backwards compatibility. Will be removed in version 0.11 for cleanliness. */ +#if !defined(MA_DR_WAV_IMPLEMENTATION) /* dr_wav_c begin */ #ifndef ma_dr_wav_c #define ma_dr_wav_c @@ -78555,7 +79393,6 @@ MA_PRIVATE ma_bool32 ma_dr_wav_init__internal(ma_dr_wav* pWav, ma_dr_wav_chunk_p } if (pWav->container == ma_dr_wav_container_riff || pWav->container == ma_dr_wav_container_rifx) { if (ma_dr_wav_bytes_to_u32_ex(chunkSizeBytes, pWav->container) < 36) { - return MA_FALSE; } } else if (pWav->container == ma_dr_wav_container_rf64) { if (ma_dr_wav_bytes_to_u32_le(chunkSizeBytes) != 0xFFFFFFFF) { @@ -78824,7 +79661,9 @@ MA_PRIVATE ma_bool32 ma_dr_wav_init__internal(ma_dr_wav* pWav, ma_dr_wav_chunk_p compressionFormat = MA_DR_WAVE_FORMAT_MULAW; } else if (ma_dr_wav_fourcc_equal(type, "ima4")) { compressionFormat = MA_DR_WAVE_FORMAT_DVI_ADPCM; - sampleSizeInBits = 4; + sampleSizeInBits = 4; + (void)compressionFormat; + (void)sampleSizeInBits; return MA_FALSE; } else { return MA_FALSE; @@ -78882,9 +79721,7 @@ MA_PRIVATE ma_bool32 ma_dr_wav_init__internal(ma_dr_wav* pWav, ma_dr_wav_chunk_p } } if (isProcessingMetadata) { - ma_uint64 metadataBytesRead; - metadataBytesRead = ma_dr_wav__metadata_process_chunk(&metadataParser, &header, ma_dr_wav_metadata_type_all_including_unknown); - MA_DR_WAV_ASSERT(metadataBytesRead <= header.sizeInBytes); + ma_dr_wav__metadata_process_chunk(&metadataParser, &header, ma_dr_wav_metadata_type_all_including_unknown); if (ma_dr_wav__seek_from_start(pWav->onSeek, cursor, pWav->pUserData) == MA_FALSE) { break; } @@ -80332,6 +81169,12 @@ MA_API ma_uint64 ma_dr_wav_write_pcm_frames(ma_dr_wav* pWav, ma_uint64 framesToW MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_uint64 framesToRead, ma_int16* pBufferOut) { ma_uint64 totalFramesRead = 0; + static ma_int32 adaptationTable[] = { + 230, 230, 230, 230, 307, 409, 512, 614, + 768, 614, 512, 409, 307, 230, 230, 230 + }; + static ma_int32 coeff1Table[] = { 256, 512, 0, 192, 240, 460, 392 }; + static ma_int32 coeff2Table[] = { 0, -256, 0, 64, 0, -208, -232 }; MA_DR_WAV_ASSERT(pWav != NULL); MA_DR_WAV_ASSERT(framesToRead > 0); while (pWav->readCursorInPCMFrames < pWav->totalPCMFrameCount) { @@ -80350,6 +81193,9 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_ pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0]; pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1]; pWav->msadpcm.cachedFrameCount = 2; + if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table)) { + return totalFramesRead; + } } else { ma_uint8 header[14]; if (pWav->onRead(pWav->pUserData, header, sizeof(header)) != sizeof(header)) { @@ -80369,6 +81215,9 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_ pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][1]; pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[1][1]; pWav->msadpcm.cachedFrameCount = 2; + if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[1] >= ma_dr_wav_countof(coeff2Table)) { + return totalFramesRead; + } } } while (framesToRead > 0 && pWav->msadpcm.cachedFrameCount > 0 && pWav->readCursorInPCMFrames < pWav->totalPCMFrameCount) { @@ -80391,12 +81240,6 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_ if (pWav->msadpcm.bytesRemainingInBlock == 0) { continue; } else { - static ma_int32 adaptationTable[] = { - 230, 230, 230, 230, 307, 409, 512, 614, - 768, 614, 512, 409, 307, 230, 230, 230 - }; - static ma_int32 coeff1Table[] = { 256, 512, 0, 192, 240, 460, 392 }; - static ma_int32 coeff2Table[] = { 0, -256, 0, 64, 0, -208, -232 }; ma_uint8 nibbles; ma_int32 nibble0; ma_int32 nibble1; @@ -81647,7 +82490,7 @@ MA_API void ma_dr_wav_f32_to_s32(ma_int32* pOut, const float* pIn, size_t sample return; } for (i = 0; i < sampleCount; ++i) { - *pOut++ = (ma_int32)(2147483648.0 * pIn[i]); + *pOut++ = (ma_int32)(2147483648.0f * pIn[i]); } } MA_API void ma_dr_wav_f64_to_s32(ma_int32* pOut, const double* pIn, size_t sampleCount) @@ -82061,7 +82904,7 @@ MA_API ma_bool32 ma_dr_wav_fourcc_equal(const ma_uint8* a, const char* b) #endif /* MA_NO_WAV */ #if !defined(MA_NO_FLAC) && !defined(MA_NO_DECODING) -#if !defined(MA_DR_FLAC_IMPLEMENTATION) && !defined(MA_DR_FLAC_IMPLEMENTATION) /* For backwards compatibility. Will be removed in version 0.11 for cleanliness. */ +#if !defined(MA_DR_FLAC_IMPLEMENTATION) /* dr_flac_c begin */ #ifndef ma_dr_flac_c #define ma_dr_flac_c @@ -85093,6 +85936,7 @@ static ma_bool32 ma_dr_flac__read_subframe_header(ma_dr_flac_bs* bs, ma_dr_flac_ if ((header & 0x80) != 0) { return MA_FALSE; } + pSubframe->lpcOrder = 0; type = (header & 0x7E) >> 1; if (type == 0) { pSubframe->subframeType = MA_DR_FLAC_SUBFRAME_CONSTANT; @@ -85150,6 +85994,9 @@ static ma_bool32 ma_dr_flac__decode_subframe(ma_dr_flac_bs* bs, ma_dr_flac_frame } subframeBitsPerSample -= pSubframe->wastedBitsPerSample; pSubframe->pSamplesS32 = pDecodedSamplesOut; + if (frame->header.blockSizeInPCMFrames < pSubframe->lpcOrder) { + return MA_FALSE; + } switch (pSubframe->subframeType) { case MA_DR_FLAC_SUBFRAME_CONSTANT: @@ -89806,7 +90653,7 @@ MA_API ma_bool32 ma_dr_flac_next_cuesheet_track(ma_dr_flac_cuesheet_track_iterat #endif /* MA_NO_FLAC */ #if !defined(MA_NO_MP3) && !defined(MA_NO_DECODING) -#if !defined(MA_DR_MP3_IMPLEMENTATION) && !defined(MA_DR_MP3_IMPLEMENTATION) /* For backwards compatibility. Will be removed in version 0.11 for cleanliness. */ +#if !defined(MA_DR_MP3_IMPLEMENTATION) /* dr_mp3_c begin */ #ifndef ma_dr_mp3_c #define ma_dr_mp3_c @@ -89867,7 +90714,7 @@ MA_API const char* ma_dr_mp3_version_string(void) #define MA_DR_MP3_MIN(a, b) ((a) > (b) ? (b) : (a)) #define MA_DR_MP3_MAX(a, b) ((a) < (b) ? (b) : (a)) #if !defined(MA_DR_MP3_NO_SIMD) -#if !defined(MA_DR_MP3_ONLY_SIMD) && (defined(_M_X64) || defined(__x86_64__) || defined(__aarch64__) || defined(_M_ARM64)) +#if !defined(MA_DR_MP3_ONLY_SIMD) && (defined(_M_X64) || defined(__x86_64__) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) #define MA_DR_MP3_ONLY_SIMD #endif #if ((defined(_MSC_VER) && _MSC_VER >= 1400) && defined(_M_X64)) || ((defined(__i386) || defined(_M_IX86) || defined(__i386__) || defined(__x86_64__)) && ((defined(_M_IX86_FP) && _M_IX86_FP == 2) || defined(__SSE2__))) @@ -89940,7 +90787,7 @@ end: return g_have_simd - 1; #endif } -#elif defined(__ARM_NEON) || defined(__aarch64__) || defined(_M_ARM64) +#elif defined(__ARM_NEON) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) #include #define MA_DR_MP3_HAVE_SSE 0 #define MA_DR_MP3_HAVE_SIMD 1 @@ -89969,7 +90816,7 @@ static int ma_dr_mp3_have_simd(void) #else #define MA_DR_MP3_HAVE_SIMD 0 #endif -#if defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__aarch64__) && !defined(_M_ARM64) && !defined(__ARM_ARCH_6M__) +#if defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__aarch64__) && !defined(_M_ARM64) && !defined(_M_ARM64EC) && !defined(__ARM_ARCH_6M__) #define MA_DR_MP3_HAVE_ARMV6 1 static __inline__ __attribute__((always_inline)) ma_int32 ma_dr_mp3_clip_int16_arm(ma_int32 a) { @@ -91135,8 +91982,8 @@ static ma_int16 ma_dr_mp3d_scale_pcm(float sample) s32 -= (s32 < 0); s = (ma_int16)ma_dr_mp3_clip_int16_arm(s32); #else - if (sample >= 32766.5) return (ma_int16) 32767; - if (sample <= -32767.5) return (ma_int16)-32768; + if (sample >= 32766.5f) return (ma_int16) 32767; + if (sample <= -32767.5f) return (ma_int16)-32768; s = (ma_int16)(sample + .5f); s -= (s < 0); #endif @@ -91522,9 +92369,9 @@ MA_API void ma_dr_mp3dec_f32_to_s16(const float *in, ma_int16 *out, size_t num_s for(; i < num_samples; i++) { float sample = in[i] * 32768.0f; - if (sample >= 32766.5) + if (sample >= 32766.5f) out[i] = (ma_int16) 32767; - else if (sample <= -32767.5) + else if (sample <= -32767.5f) out[i] = (ma_int16)-32768; else { @@ -92602,7 +93449,7 @@ For more information, please refer to =============================================================================== ALTERNATIVE 2 - MIT No Attribution =============================================================================== -Copyright 2023 David Reid +Copyright 2025 David Reid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/vendor/miniaudio/synchronization.odin b/vendor/miniaudio/synchronization.odin index 012f52c2c..08182c32b 100644 --- a/vendor/miniaudio/synchronization.odin +++ b/vendor/miniaudio/synchronization.odin @@ -62,6 +62,11 @@ when !NO_THREADING { Signals the specified auto-reset event. */ event_signal :: proc(pEvent: ^event) -> result --- + + semaphore_init :: proc(initialValue: i32, pSemaphore: ^semaphore) -> result --- + semaphore_uninit :: proc(pSemaphore: ^semaphore) --- + semaphore_wait :: proc(pSemaphore: ^semaphore) -> result --- + semaphore_release :: proc(pSemaphore: ^semaphore) -> result --- } /* NO_THREADING */ } diff --git a/vendor/miniaudio/utilities.odin b/vendor/miniaudio/utilities.odin index 9285874b6..d59bb75a4 100644 --- a/vendor/miniaudio/utilities.odin +++ b/vendor/miniaudio/utilities.odin @@ -7,7 +7,7 @@ foreign import lib { LIB } @(default_calling_convention="c", link_prefix="ma_") foreign lib { /* - Calculates a buffer size in milliseconds from the specified number of frames and sample rate. + Calculates a buffer size in milliseconds (rounded up) from the specified number of frames and sample rate. */ calculate_buffer_size_in_milliseconds_from_frames :: proc(bufferSizeInFrames: u32, sampleRate: u32) -> u32 --- @@ -163,6 +163,8 @@ foreign lib { data_source_read_pcm_frames :: proc(pDataSource: ^data_source, pFramesOut: rawptr, frameCount: u64, pFramesRead: ^u64) -> result --- /* Must support pFramesOut = NULL in which case a forward seek should be performed. */ data_source_seek_pcm_frames :: proc(pDataSource: ^data_source, frameCount: u64, pFramesSeeked: ^u64) -> result --- /* Can only seek forward. Equivalent to ma_data_source_read_pcm_frames(pDataSource, NULL, frameCount); */ data_source_seek_to_pcm_frame :: proc(pDataSource: ^data_source, frameIndex: u64) -> result --- + data_source_seek_seconds :: proc(pDataSource: ^data_source, secondCount: f32, pSecondsSeeked: ^f32) -> result --- /* Can only seek forward. Abstraction to ma_data_source_seek_pcm_frames() */ + data_source_seek_to_seconds :: proc(pDataSource: ^data_source, seekPointInSeconds: f32) -> result --- /* Abstraction to ma_data_source_seek_to_pcm_frame() */ data_source_get_data_format :: proc(pDataSource: ^data_source, pFormat: ^format, pChannels: ^u32, pSampleRate: ^u32, pChannelMap: [^]channel, channelMapCap: c.size_t) -> result --- data_source_get_cursor_in_pcm_frames :: proc(pDataSource: ^data_source, pCursor: ^u64) -> result --- data_source_get_length_in_pcm_frames :: proc(pDataSource: ^data_source, pLength: ^u64) -> result --- /* Returns MA_NOT_IMPLEMENTED if the length is unknown or cannot be determined. Decoders can return this. */ From 326454f0f00945a2a4f5d02e8d8c5bc37f472883 Mon Sep 17 00:00:00 2001 From: Laytan Date: Fri, 16 May 2025 22:14:26 +0200 Subject: [PATCH 080/120] generate xlib package docs on linux --- examples/all/all_linux.odin | 6 +++++- examples/all/all_vendor.odin | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/all/all_linux.odin b/examples/all/all_linux.odin index ca51d6562..dde712b8d 100644 --- a/examples/all/all_linux.odin +++ b/examples/all/all_linux.odin @@ -3,4 +3,8 @@ package all import linux "core:sys/linux" -_ :: linux \ No newline at end of file +import xlib "vendor:x11/xlib" + +_ :: linux + +_ :: xlib diff --git a/examples/all/all_vendor.odin b/examples/all/all_vendor.odin index b224a3bbe..ebbfe786b 100644 --- a/examples/all/all_vendor.odin +++ b/examples/all/all_vendor.odin @@ -28,8 +28,6 @@ import nvg "vendor:nanovg" import nvg_gl "vendor:nanovg/gl" import fontstash "vendor:fontstash" -import xlib "vendor:x11/xlib" - _ :: cgltf // _ :: commonmark _ :: ENet @@ -57,8 +55,6 @@ _ :: nvg _ :: nvg_gl _ :: fontstash -_ :: xlib - // NOTE: needed for doc generator From d77124feae57a919734e77e88c3801d86ee097dd Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 17 May 2025 11:36:24 +0100 Subject: [PATCH 081/120] Add Objective-C helper for creating subclasses --- core/sys/darwin/Foundation/NSApplication.odin | 2 +- core/sys/darwin/Foundation/NSArray.odin | 46 ++ core/sys/darwin/Foundation/NSMenu.odin | 629 +++++++++++++++--- core/sys/darwin/Foundation/objc_helper.odin | 137 ++++ 4 files changed, 716 insertions(+), 98 deletions(-) create mode 100644 core/sys/darwin/Foundation/objc_helper.odin diff --git a/core/sys/darwin/Foundation/NSApplication.odin b/core/sys/darwin/Foundation/NSApplication.odin index 254da75ad..7b14d8ebc 100644 --- a/core/sys/darwin/Foundation/NSApplication.odin +++ b/core/sys/darwin/Foundation/NSApplication.odin @@ -99,7 +99,7 @@ Application_setTitle :: proc "c" (self: ^Application, title: ^String) { } @(objc_type=Application, objc_name="mainMenu") -Window_mainMenu :: proc "c" (self: ^Application) -> ^Menu { +Application_mainMenu :: proc "c" (self: ^Application) -> ^Menu { return msgSend(^Menu, self, "mainMenu") } diff --git a/core/sys/darwin/Foundation/NSArray.odin b/core/sys/darwin/Foundation/NSArray.odin index b238f63f8..0977c6469 100644 --- a/core/sys/darwin/Foundation/NSArray.odin +++ b/core/sys/darwin/Foundation/NSArray.odin @@ -40,3 +40,49 @@ Array_objectAs :: proc "c" (self: ^Array, index: UInteger, $T: typeid) -> T wher Array_count :: proc "c" (self: ^Array) -> UInteger { return msgSend(UInteger, self, "count") } + + +@(objc_class="NSMutableArray") +MutableArray :: struct { + using _: Copying(MutableArray), +} + +@(objc_type=MutableArray, objc_name="alloc", objc_is_class_method=true) +MutableArray_alloc :: proc "c" () -> ^MutableArray { + return msgSend(^MutableArray, MutableArray, "alloc") +} + +@(objc_type=MutableArray, objc_name="init") +MutableArray_init :: proc "c" (self: ^MutableArray) -> ^MutableArray { + return msgSend(^MutableArray, self, "init") +} + +@(objc_type=MutableArray, objc_name="initWithObjects") +MutableArray_initWithObjects :: proc "c" (self: ^MutableArray, objects: [^]^Object, count: UInteger) -> ^MutableArray { + return msgSend(^MutableArray, self, "initWithObjects:count:", objects, count) +} + +@(objc_type=MutableArray, objc_name="initWithCoder") +MutableArray_initWithCoder :: proc "c" (self: ^MutableArray, coder: ^Coder) -> ^MutableArray { + return msgSend(^MutableArray, self, "initWithCoder:", coder) +} + +@(objc_type=MutableArray, objc_name="object") +MutableArray_object :: proc "c" (self: ^MutableArray, index: UInteger) -> ^Object { + return msgSend(^Object, self, "objectAtIndex:", index) +} +@(objc_type=MutableArray, objc_name="objectAs") +MutableArray_objectAs :: proc "c" (self: ^MutableArray, index: UInteger, $T: typeid) -> T where intrinsics.type_is_pointer(T), intrinsics.type_is_subtype_of(T, ^Object) { + return (T)(MutableArray_object(self, index)) +} + +@(objc_type=MutableArray, objc_name="count") +MutableArray_count :: proc "c" (self: ^MutableArray) -> UInteger { + return msgSend(UInteger, self, "count") +} + + +@(objc_type=MutableArray, objc_name="exchangeObjectAtIndex") +MutableArray_exchangeObjectAtIndex :: proc "c" (self: ^MutableArray, idx1, idx2: UInteger) { + msgSend(nil, self, "exchangeObjectAtIndex:withObjectAtIndex:", idx1, idx2) +} diff --git a/core/sys/darwin/Foundation/NSMenu.odin b/core/sys/darwin/Foundation/NSMenu.odin index 9a74151b0..747920ab7 100644 --- a/core/sys/darwin/Foundation/NSMenu.odin +++ b/core/sys/darwin/Foundation/NSMenu.odin @@ -2,127 +2,562 @@ package objc_Foundation import "base:builtin" import "base:intrinsics" - -KeyEquivalentModifierFlag :: enum UInteger { - CapsLock = 16, // Set if Caps Lock key is pressed. - Shift = 17, // Set if Shift key is pressed. - Control = 18, // Set if Control key is pressed. - Option = 19, // Set if Option or Alternate key is pressed. - Command = 20, // Set if Command key is pressed. - NumericPad = 21, // Set if any key in the numeric keypad is pressed. - Help = 22, // Set if the Help key is pressed. - Function = 23, // Set if any function key is pressed. -} -KeyEquivalentModifierMask :: distinct bit_set[KeyEquivalentModifierFlag; UInteger] - -// Used to retrieve only the device-independent modifier flags, allowing applications to mask off the device-dependent modifier flags, including event coalescing information. -KeyEventModifierFlagDeviceIndependentFlagsMask := transmute(KeyEquivalentModifierMask)_KeyEventModifierFlagDeviceIndependentFlagsMask -@(private) _KeyEventModifierFlagDeviceIndependentFlagsMask := UInteger(0xffff0000) +import "core:c" -MenuItemCallback :: proc "c" (unused: rawptr, name: SEL, sender: ^Object) - - -@(objc_class="NSMenuItem") -MenuItem :: struct {using _: Object} - -@(objc_type=MenuItem, objc_name="alloc", objc_is_class_method=true) -MenuItem_alloc :: proc "c" () -> ^MenuItem { - return msgSend(^MenuItem, MenuItem, "alloc") +MenuSelectionMode :: enum c.long { + Automatic = 0, + SelectOne = 1, + SelectAny = 2, } -@(objc_type=MenuItem, objc_name="registerActionCallback", objc_is_class_method=true) -MenuItem_registerActionCallback :: proc "c" (name: cstring, callback: MenuItemCallback) -> SEL { - s := string(name) - n := len(s) - sel: SEL - if n > 0 && s[n-1] != ':' { - col_name := intrinsics.alloca(n+2, 1) - builtin.copy(col_name[:n], s) - col_name[n] = ':' - col_name[n+1] = 0 - sel = sel_registerName(cstring(col_name)) - } else { - sel = sel_registerName(name) - } - if callback != nil { - class_addMethod(intrinsics.objc_find_class("NSObject"), sel, auto_cast callback, "v@:@") - } - return sel +MenuPresentationStyle :: enum c.long { + Regular = 0, + Palette = 1, } -@(objc_type=MenuItem, objc_name="separatorItem", objc_is_class_method=true) -MenuItem_separatorItem :: proc "c" () -> ^MenuItem { - return msgSend(^MenuItem, MenuItem, "separatorItem") +UserInterfaceLayoutDirection :: enum c.long { + LeftToRight = 0, + RightToLeft = 1, } -@(objc_type=MenuItem, objc_name="init") -MenuItem_init :: proc "c" (self: ^MenuItem) -> ^MenuItem { - return msgSend(^MenuItem, self, "init") +MenuPropertyItem :: enum c.ulong { + Title = 0, + AttributedTitle = 1, + KeyEquivalent = 2, + Image = 3, + Enabled = 4, + AccessibilityDescription = 5, } - -@(objc_type=MenuItem, objc_name="initWithTitle") -MenuItem_initWithTitle :: proc "c" (self: ^MenuItem, title: ^String, action: SEL, keyEquivalent: ^String) -> ^MenuItem { - return msgSend(^MenuItem, self, "initWithTitle:action:keyEquivalent:", title, action, keyEquivalent) -} - -@(objc_type=MenuItem, objc_name="setKeyEquivalentModifierMask") -MenuItem_setKeyEquivalentModifierMask :: proc "c" (self: ^MenuItem, modifierMask: KeyEquivalentModifierMask) { - msgSend(nil, self, "setKeyEquivalentModifierMask:", modifierMask) -} - -@(objc_type=MenuItem, objc_name="keyEquivalentModifierMask") -MenuItem_keyEquivalentModifierMask :: proc "c" (self: ^MenuItem) -> KeyEquivalentModifierMask { - return msgSend(KeyEquivalentModifierMask, self, "keyEquivalentModifierMask") -} - -@(objc_type=MenuItem, objc_name="setSubmenu") -MenuItem_setSubmenu :: proc "c" (self: ^MenuItem, submenu: ^Menu) { - msgSend(nil, self, "setSubmenu:", submenu) -} - -@(objc_type=MenuItem, objc_name="title") -MenuItem_title :: proc "c" (self: ^MenuItem) -> ^String { - return msgSend(^String, self, "title") -} - -@(objc_type=MenuItem, objc_name="setTitle") -MenuItem_setTitle :: proc "c" (self: ^MenuItem, title: ^String) -> ^String { - return msgSend(^String, self, "title:", title) -} - +MenuProperties :: distinct bit_set[MenuPropertyItem; c.ulong] @(objc_class="NSMenu") Menu :: struct {using _: Object} -@(objc_type=Menu, objc_name="alloc", objc_is_class_method=true) -Menu_alloc :: proc "c" () -> ^Menu { - return msgSend(^Menu, Menu, "alloc") -} - @(objc_type=Menu, objc_name="init") Menu_init :: proc "c" (self: ^Menu) -> ^Menu { return msgSend(^Menu, self, "init") } + @(objc_type=Menu, objc_name="initWithTitle") -Menu_initWithTitle :: proc "c" (self: ^Menu, title: ^String) -> ^Menu { +Menu_initWithTitle :: #force_inline proc "c" (self: ^Menu, title: ^String) -> ^Menu { return msgSend(^Menu, self, "initWithTitle:", title) } - - +@(objc_type=Menu, objc_name="initWithCoder") +Menu_initWithCoder :: #force_inline proc "c" (self: ^Menu, coder: ^Coder) -> ^Menu { + return msgSend(^Menu, self, "initWithCoder:", coder) +} +@(objc_type=Menu, objc_name="popUpContextMenu_withEvent_forView", objc_is_class_method=true) +Menu_popUpContextMenu_withEvent_forView :: #force_inline proc "c" (menu: ^Menu, event: ^Event, view: ^View) { + msgSend(nil, Menu, "popUpContextMenu:withEvent:forView:", menu, event, view) +} +// @(objc_type=Menu, objc_name="popUpContextMenu_withEvent_forView_withFont", objc_is_class_method=true) +// Menu_popUpContextMenu_withEvent_forView_withFont :: #force_inline proc "c" (menu: ^Menu, event: ^Event, view: ^View, font: ^Font) { +// msgSend(nil, Menu, "popUpContextMenu:withEvent:forView:withFont:", menu, event, view, font) +// } +@(objc_type=Menu, objc_name="popUpMenuPositioningItem") +Menu_popUpMenuPositioningItem :: #force_inline proc "c" (self: ^Menu, item: ^MenuItem, location: Point, view: ^View) -> bool { + return msgSend(bool, self, "popUpMenuPositioningItem:atLocation:inView:", item, location, view) +} +@(objc_type=Menu, objc_name="setMenuBarVisible", objc_is_class_method=true) +Menu_setMenuBarVisible :: #force_inline proc "c" (visible: bool) { + msgSend(nil, Menu, "setMenuBarVisible:", visible) +} +@(objc_type=Menu, objc_name="menuBarVisible", objc_is_class_method=true) +Menu_menuBarVisible :: #force_inline proc "c" () -> bool { + return msgSend(bool, Menu, "menuBarVisible") +} +@(objc_type=Menu, objc_name="insertItem") +Menu_insertItem :: #force_inline proc "c" (self: ^Menu, newItem: ^MenuItem, index: Integer) { + msgSend(nil, self, "insertItem:atIndex:", newItem, index) +} @(objc_type=Menu, objc_name="addItem") -Menu_addItem :: proc "c" (self: ^Menu, item: ^MenuItem) { - msgSend(nil, self, "addItem:", item) +Menu_addItem :: #force_inline proc "c" (self: ^Menu, newItem: ^MenuItem) { + msgSend(nil, self, "addItem:", newItem) +} +@(objc_type=Menu, objc_name="insertItemWithTitle") +Menu_insertItemWithTitle :: #force_inline proc "c" (self: ^Menu, string: ^String, selector: SEL, charCode: ^String, index: Integer) -> ^MenuItem { + return msgSend(^MenuItem, self, "insertItemWithTitle:action:keyEquivalent:atIndex:", string, selector, charCode, index) } - @(objc_type=Menu, objc_name="addItemWithTitle") -Menu_addItemWithTitle :: proc "c" (self: ^Menu, title: ^String, selector: SEL, keyEquivalent: ^String) -> ^MenuItem { - return msgSend(^MenuItem, self, "addItemWithTitle:action:keyEquivalent:", title, selector, keyEquivalent) +Menu_addItemWithTitle :: #force_inline proc "c" (self: ^Menu, string: ^String, selector: SEL, charCode: ^String) -> ^MenuItem { + return msgSend(^MenuItem, self, "addItemWithTitle:action:keyEquivalent:", string, selector, charCode) +} +@(objc_type=Menu, objc_name="removeItemAtIndex") +Menu_removeItemAtIndex :: #force_inline proc "c" (self: ^Menu, index: Integer) { + msgSend(nil, self, "removeItemAtIndex:", index) +} +@(objc_type=Menu, objc_name="removeItem") +Menu_removeItem :: #force_inline proc "c" (self: ^Menu, item: ^MenuItem) { + msgSend(nil, self, "removeItem:", item) +} +@(objc_type=Menu, objc_name="setSubmenu") +Menu_setSubmenu :: #force_inline proc "c" (self: ^Menu, menu: ^Menu, item: ^MenuItem) { + msgSend(nil, self, "setSubmenu:forItem:", menu, item) +} +@(objc_type=Menu, objc_name="removeAllItems") +Menu_removeAllItems :: #force_inline proc "c" (self: ^Menu) { + msgSend(nil, self, "removeAllItems") +} +@(objc_type=Menu, objc_name="itemAtIndex") +Menu_itemAtIndex :: #force_inline proc "c" (self: ^Menu, index: Integer) -> ^MenuItem { + return msgSend(^MenuItem, self, "itemAtIndex:", index) +} +@(objc_type=Menu, objc_name="indexOfItem") +Menu_indexOfItem :: #force_inline proc "c" (self: ^Menu, item: ^MenuItem) -> Integer { + return msgSend(Integer, self, "indexOfItem:", item) +} +@(objc_type=Menu, objc_name="indexOfItemWithTitle") +Menu_indexOfItemWithTitle :: #force_inline proc "c" (self: ^Menu, title: ^String) -> Integer { + return msgSend(Integer, self, "indexOfItemWithTitle:", title) +} +@(objc_type=Menu, objc_name="indexOfItemWithTag") +Menu_indexOfItemWithTag :: #force_inline proc "c" (self: ^Menu, tag: Integer) -> Integer { + return msgSend(Integer, self, "indexOfItemWithTag:", tag) +} +@(objc_type=Menu, objc_name="indexOfItemWithRepresentedObject") +Menu_indexOfItemWithRepresentedObject :: #force_inline proc "c" (self: ^Menu, object: id) -> Integer { + return msgSend(Integer, self, "indexOfItemWithRepresentedObject:", object) +} +@(objc_type=Menu, objc_name="indexOfItemWithSubmenu") +Menu_indexOfItemWithSubmenu :: #force_inline proc "c" (self: ^Menu, submenu: ^Menu) -> Integer { + return msgSend(Integer, self, "indexOfItemWithSubmenu:", submenu) +} +@(objc_type=Menu, objc_name="indexOfItemWithTarget") +Menu_indexOfItemWithTarget :: #force_inline proc "c" (self: ^Menu, target: id, actionSelector: SEL) -> Integer { + return msgSend(Integer, self, "indexOfItemWithTarget:andAction:", target, actionSelector) +} +@(objc_type=Menu, objc_name="itemWithTitle") +Menu_itemWithTitle :: #force_inline proc "c" (self: ^Menu, title: ^String) -> ^MenuItem { + return msgSend(^MenuItem, self, "itemWithTitle:", title) +} +@(objc_type=Menu, objc_name="itemWithTag") +Menu_itemWithTag :: #force_inline proc "c" (self: ^Menu, tag: Integer) -> ^MenuItem { + return msgSend(^MenuItem, self, "itemWithTag:", tag) +} +@(objc_type=Menu, objc_name="update") +Menu_update :: #force_inline proc "c" (self: ^Menu) { + msgSend(nil, self, "update") +} +@(objc_type=Menu, objc_name="performKeyEquivalent") +Menu_performKeyEquivalent :: #force_inline proc "c" (self: ^Menu, event: ^Event) -> bool { + return msgSend(bool, self, "performKeyEquivalent:", event) +} +@(objc_type=Menu, objc_name="itemChanged") +Menu_itemChanged :: #force_inline proc "c" (self: ^Menu, item: ^MenuItem) { + msgSend(nil, self, "itemChanged:", item) +} +@(objc_type=Menu, objc_name="performActionForItemAtIndex") +Menu_performActionForItemAtIndex :: #force_inline proc "c" (self: ^Menu, index: Integer) { + msgSend(nil, self, "performActionForItemAtIndex:", index) +} +@(objc_type=Menu, objc_name="cancelTracking") +Menu_cancelTracking :: #force_inline proc "c" (self: ^Menu) { + msgSend(nil, self, "cancelTracking") +} +@(objc_type=Menu, objc_name="cancelTrackingWithoutAnimation") +Menu_cancelTrackingWithoutAnimation :: #force_inline proc "c" (self: ^Menu) { + msgSend(nil, self, "cancelTrackingWithoutAnimation") +} +@(objc_type=Menu, objc_name="title") +Menu_title :: #force_inline proc "c" (self: ^Menu) -> ^String { + return msgSend(^String, self, "title") +} +@(objc_type=Menu, objc_name="setTitle") +Menu_setTitle :: #force_inline proc "c" (self: ^Menu, title: ^String) { + msgSend(nil, self, "setTitle:", title) +} +@(objc_type=Menu, objc_name="supermenu") +Menu_supermenu :: #force_inline proc "c" (self: ^Menu) -> ^Menu { + return msgSend(^Menu, self, "supermenu") +} +@(objc_type=Menu, objc_name="setSupermenu") +Menu_setSupermenu :: #force_inline proc "c" (self: ^Menu, supermenu: ^Menu) { + msgSend(nil, self, "setSupermenu:", supermenu) +} +@(objc_type=Menu, objc_name="itemArray") +Menu_itemArray :: #force_inline proc "c" (self: ^Menu) -> ^Array { + return msgSend(^Array, self, "itemArray") +} +@(objc_type=Menu, objc_name="setItemArray") +Menu_setItemArray :: #force_inline proc "c" (self: ^Menu, itemArray: ^Array) { + msgSend(nil, self, "setItemArray:", itemArray) +} +@(objc_type=Menu, objc_name="numberOfItems") +Menu_numberOfItems :: #force_inline proc "c" (self: ^Menu) -> Integer { + return msgSend(Integer, self, "numberOfItems") +} +@(objc_type=Menu, objc_name="autoenablesItems") +Menu_autoenablesItems :: #force_inline proc "c" (self: ^Menu) -> bool { + return msgSend(bool, self, "autoenablesItems") +} +@(objc_type=Menu, objc_name="setAutoenablesItems") +Menu_setAutoenablesItems :: #force_inline proc "c" (self: ^Menu, autoenablesItems: bool) { + msgSend(nil, self, "setAutoenablesItems:", autoenablesItems) +} +@(objc_type=Menu, objc_name="delegate") +Menu_delegate :: #force_inline proc "c" (self: ^Menu) -> ^MenuDelegate { + return msgSend(^MenuDelegate, self, "delegate") +} +@(objc_type=Menu, objc_name="setDelegate") +Menu_setDelegate :: #force_inline proc "c" (self: ^Menu, delegate: ^MenuDelegate) { + msgSend(nil, self, "setDelegate:", delegate) +} +@(objc_type=Menu, objc_name="menuBarHeight") +Menu_menuBarHeight :: #force_inline proc "c" (self: ^Menu) -> Float { + return msgSend(Float, self, "menuBarHeight") +} +@(objc_type=Menu, objc_name="highlightedItem") +Menu_highlightedItem :: #force_inline proc "c" (self: ^Menu) -> ^MenuItem { + return msgSend(^MenuItem, self, "highlightedItem") +} +@(objc_type=Menu, objc_name="minimumWidth") +Menu_minimumWidth :: #force_inline proc "c" (self: ^Menu) -> Float { + return msgSend(Float, self, "minimumWidth") +} +@(objc_type=Menu, objc_name="setMinimumWidth") +Menu_setMinimumWidth :: #force_inline proc "c" (self: ^Menu, minimumWidth: Float) { + msgSend(nil, self, "setMinimumWidth:", minimumWidth) +} +@(objc_type=Menu, objc_name="size") +Menu_size :: #force_inline proc "c" (self: ^Menu) -> Size { + return msgSend(Size, self, "size") +} +// @(objc_type=Menu, objc_name="font") +// Menu_font :: #force_inline proc "c" (self: ^Menu) -> ^Font { +// return msgSend(^Font, self, "font") +// } +// @(objc_type=Menu, objc_name="setFont") +// Menu_setFont :: #force_inline proc "c" (self: ^Menu, font: ^Font) { +// msgSend(nil, self, "setFont:", font) +// } +@(objc_type=Menu, objc_name="allowsContextMenuPlugIns") +Menu_allowsContextMenuPlugIns :: #force_inline proc "c" (self: ^Menu) -> bool { + return msgSend(bool, self, "allowsContextMenuPlugIns") +} +@(objc_type=Menu, objc_name="setAllowsContextMenuPlugIns") +Menu_setAllowsContextMenuPlugIns :: #force_inline proc "c" (self: ^Menu, allowsContextMenuPlugIns: bool) { + msgSend(nil, self, "setAllowsContextMenuPlugIns:", allowsContextMenuPlugIns) +} +@(objc_type=Menu, objc_name="showsStateColumn") +Menu_showsStateColumn :: #force_inline proc "c" (self: ^Menu) -> bool { + return msgSend(bool, self, "showsStateColumn") +} +@(objc_type=Menu, objc_name="setShowsStateColumn") +Menu_setShowsStateColumn :: #force_inline proc "c" (self: ^Menu, showsStateColumn: bool) { + msgSend(nil, self, "setShowsStateColumn:", showsStateColumn) +} +@(objc_type=Menu, objc_name="userInterfaceLayoutDirection") +Menu_userInterfaceLayoutDirection :: #force_inline proc "c" (self: ^Menu) -> UserInterfaceLayoutDirection { + return msgSend(UserInterfaceLayoutDirection, self, "userInterfaceLayoutDirection") +} +@(objc_type=Menu, objc_name="setUserInterfaceLayoutDirection") +Menu_setUserInterfaceLayoutDirection :: #force_inline proc "c" (self: ^Menu, userInterfaceLayoutDirection: UserInterfaceLayoutDirection) { + msgSend(nil, self, "setUserInterfaceLayoutDirection:", userInterfaceLayoutDirection) +} +@(objc_type=Menu, objc_name="paletteMenuWithColors_titles_selectionHandler", objc_is_class_method=true) +Menu_paletteMenuWithColors_titles_selectionHandler :: #force_inline proc "c" (colors: ^Array, itemTitles: ^Array, onSelectionChange: proc "c" (_arg_0: ^Menu)) -> ^Menu { + return msgSend(^Menu, Menu, "paletteMenuWithColors:titles:selectionHandler:", colors, itemTitles, onSelectionChange) +} +// @(objc_type=Menu, objc_name="paletteMenuWithColors_titles_templateImage_selectionHandler", objc_is_class_method=true) +// Menu_paletteMenuWithColors_titles_templateImage_selectionHandler :: #force_inline proc "c" (colors: ^Array, itemTitles: ^Array, image: ^Image, onSelectionChange: proc "c" (_arg_0: ^Menu)) -> ^Menu { +// return msgSend(^Menu, Menu, "paletteMenuWithColors:titles:templateImage:selectionHandler:", colors, itemTitles, image, onSelectionChange) +// } +@(objc_type=Menu, objc_name="presentationStyle") +Menu_presentationStyle :: #force_inline proc "c" (self: ^Menu) -> MenuPresentationStyle { + return msgSend(MenuPresentationStyle, self, "presentationStyle") +} +@(objc_type=Menu, objc_name="setPresentationStyle") +Menu_setPresentationStyle :: #force_inline proc "c" (self: ^Menu, presentationStyle: MenuPresentationStyle) { + msgSend(nil, self, "setPresentationStyle:", presentationStyle) +} +@(objc_type=Menu, objc_name="selectionMode") +Menu_selectionMode :: #force_inline proc "c" (self: ^Menu) -> MenuSelectionMode { + return msgSend(MenuSelectionMode, self, "selectionMode") +} +@(objc_type=Menu, objc_name="setSelectionMode") +Menu_setSelectionMode :: #force_inline proc "c" (self: ^Menu, selectionMode: MenuSelectionMode) { + msgSend(nil, self, "setSelectionMode:", selectionMode) +} +@(objc_type=Menu, objc_name="selectedItems") +Menu_selectedItems :: #force_inline proc "c" (self: ^Menu) -> ^Array { + return msgSend(^Array, self, "selectedItems") +} +@(objc_type=Menu, objc_name="setSelectedItems") +Menu_setSelectedItems :: #force_inline proc "c" (self: ^Menu, selectedItems: ^Array) { + msgSend(nil, self, "setSelectedItems:", selectedItems) +} +@(objc_type=Menu, objc_name="submenuAction") +Menu_submenuAction :: #force_inline proc "c" (self: ^Menu, sender: id) { + msgSend(nil, self, "submenuAction:", sender) +} +@(objc_type=Menu, objc_name="propertiesToUpdate") +Menu_propertiesToUpdate :: #force_inline proc "c" (self: ^Menu) -> MenuProperties { + return msgSend(MenuProperties, self, "propertiesToUpdate") +} +@(objc_type=Menu, objc_name="setMenuRepresentation") +Menu_setMenuRepresentation :: #force_inline proc "c" (self: ^Menu, menuRep: id) { + msgSend(nil, self, "setMenuRepresentation:", menuRep) +} +@(objc_type=Menu, objc_name="menuRepresentation") +Menu_menuRepresentation :: #force_inline proc "c" (self: ^Menu) -> id { + return msgSend(id, self, "menuRepresentation") +} +@(objc_type=Menu, objc_name="setContextMenuRepresentation") +Menu_setContextMenuRepresentation :: #force_inline proc "c" (self: ^Menu, menuRep: id) { + msgSend(nil, self, "setContextMenuRepresentation:", menuRep) +} +@(objc_type=Menu, objc_name="contextMenuRepresentation") +Menu_contextMenuRepresentation :: #force_inline proc "c" (self: ^Menu) -> id { + return msgSend(id, self, "contextMenuRepresentation") +} +@(objc_type=Menu, objc_name="setTearOffMenuRepresentation") +Menu_setTearOffMenuRepresentation :: #force_inline proc "c" (self: ^Menu, menuRep: id) { + msgSend(nil, self, "setTearOffMenuRepresentation:", menuRep) +} +@(objc_type=Menu, objc_name="tearOffMenuRepresentation") +Menu_tearOffMenuRepresentation :: #force_inline proc "c" (self: ^Menu) -> id { + return msgSend(id, self, "tearOffMenuRepresentation") +} +@(objc_type=Menu, objc_name="menuZone", objc_is_class_method=true) +Menu_menuZone :: #force_inline proc "c" () -> ^Zone { + return msgSend(^Zone, Menu, "menuZone") +} +@(objc_type=Menu, objc_name="setMenuZone", objc_is_class_method=true) +Menu_setMenuZone :: #force_inline proc "c" (zone: ^Zone) { + msgSend(nil, Menu, "setMenuZone:", zone) +} +@(objc_type=Menu, objc_name="attachedMenu") +Menu_attachedMenu :: #force_inline proc "c" (self: ^Menu) -> ^Menu { + return msgSend(^Menu, self, "attachedMenu") +} +@(objc_type=Menu, objc_name="isAttached") +Menu_isAttached :: #force_inline proc "c" (self: ^Menu) -> bool { + return msgSend(bool, self, "isAttached") +} +@(objc_type=Menu, objc_name="sizeToFit") +Menu_sizeToFit :: #force_inline proc "c" (self: ^Menu) { + msgSend(nil, self, "sizeToFit") +} +@(objc_type=Menu, objc_name="locationForSubmenu") +Menu_locationForSubmenu :: #force_inline proc "c" (self: ^Menu, submenu: ^Menu) -> Point { + return msgSend(Point, self, "locationForSubmenu:", submenu) +} +@(objc_type=Menu, objc_name="helpRequested") +Menu_helpRequested :: #force_inline proc "c" (self: ^Menu, eventPtr: ^Event) { + msgSend(nil, self, "helpRequested:", eventPtr) +} +@(objc_type=Menu, objc_name="menuChangedMessagesEnabled") +Menu_menuChangedMessagesEnabled :: #force_inline proc "c" (self: ^Menu) -> bool { + return msgSend(bool, self, "menuChangedMessagesEnabled") +} +@(objc_type=Menu, objc_name="setMenuChangedMessagesEnabled") +Menu_setMenuChangedMessagesEnabled :: #force_inline proc "c" (self: ^Menu, menuChangedMessagesEnabled: bool) { + msgSend(nil, self, "setMenuChangedMessagesEnabled:", menuChangedMessagesEnabled) +} +@(objc_type=Menu, objc_name="isTornOff") +Menu_isTornOff :: #force_inline proc "c" (self: ^Menu) -> bool { + return msgSend(bool, self, "isTornOff") +} +@(objc_type=Menu, objc_name="load", objc_is_class_method=true) +Menu_load :: #force_inline proc "c" () { + msgSend(nil, Menu, "load") +} +@(objc_type=Menu, objc_name="initialize", objc_is_class_method=true) +Menu_initialize :: #force_inline proc "c" () { + msgSend(nil, Menu, "initialize") +} +@(objc_type=Menu, objc_name="new", objc_is_class_method=true) +Menu_new :: #force_inline proc "c" () -> ^Menu { + return msgSend(^Menu, Menu, "new") +} +@(objc_type=Menu, objc_name="allocWithZone", objc_is_class_method=true) +Menu_allocWithZone :: #force_inline proc "c" (zone: ^Zone) -> ^Menu { + return msgSend(^Menu, Menu, "allocWithZone:", zone) +} +@(objc_type=Menu, objc_name="alloc", objc_is_class_method=true) +Menu_alloc :: #force_inline proc "c" () -> ^Menu { + return msgSend(^Menu, Menu, "alloc") +} +@(objc_type=Menu, objc_name="copyWithZone", objc_is_class_method=true) +Menu_copyWithZone :: #force_inline proc "c" (zone: ^Zone) -> id { + return msgSend(id, Menu, "copyWithZone:", zone) +} +@(objc_type=Menu, objc_name="mutableCopyWithZone", objc_is_class_method=true) +Menu_mutableCopyWithZone :: #force_inline proc "c" (zone: ^Zone) -> id { + return msgSend(id, Menu, "mutableCopyWithZone:", zone) +} +@(objc_type=Menu, objc_name="instancesRespondToSelector", objc_is_class_method=true) +Menu_instancesRespondToSelector :: #force_inline proc "c" (aSelector: SEL) -> bool { + return msgSend(bool, Menu, "instancesRespondToSelector:", aSelector) +} +@(objc_type=Menu, objc_name="conformsToProtocol", objc_is_class_method=true) +Menu_conformsToProtocol :: #force_inline proc "c" (protocol: ^Protocol) -> bool { + return msgSend(bool, Menu, "conformsToProtocol:", protocol) +} +@(objc_type=Menu, objc_name="instanceMethodForSelector", objc_is_class_method=true) +Menu_instanceMethodForSelector :: #force_inline proc "c" (aSelector: SEL) -> IMP { + return msgSend(IMP, Menu, "instanceMethodForSelector:", aSelector) +} +// @(objc_type=Menu, objc_name="instanceMethodSignatureForSelector", objc_is_class_method=true) +// Menu_instanceMethodSignatureForSelector :: #force_inline proc "c" (aSelector: SEL) -> ^MethodSignature { +// return msgSend(^MethodSignature, Menu, "instanceMethodSignatureForSelector:", aSelector) +// } +@(objc_type=Menu, objc_name="isSubclassOfClass", objc_is_class_method=true) +Menu_isSubclassOfClass :: #force_inline proc "c" (aClass: Class) -> bool { + return msgSend(bool, Menu, "isSubclassOfClass:", aClass) +} +@(objc_type=Menu, objc_name="resolveClassMethod", objc_is_class_method=true) +Menu_resolveClassMethod :: #force_inline proc "c" (sel: SEL) -> bool { + return msgSend(bool, Menu, "resolveClassMethod:", sel) +} +@(objc_type=Menu, objc_name="resolveInstanceMethod", objc_is_class_method=true) +Menu_resolveInstanceMethod :: #force_inline proc "c" (sel: SEL) -> bool { + return msgSend(bool, Menu, "resolveInstanceMethod:", sel) +} +@(objc_type=Menu, objc_name="hash", objc_is_class_method=true) +Menu_hash :: #force_inline proc "c" () -> UInteger { + return msgSend(UInteger, Menu, "hash") +} +@(objc_type=Menu, objc_name="superclass", objc_is_class_method=true) +Menu_superclass :: #force_inline proc "c" () -> Class { + return msgSend(Class, Menu, "superclass") +} +@(objc_type=Menu, objc_name="class", objc_is_class_method=true) +Menu_class :: #force_inline proc "c" () -> Class { + return msgSend(Class, Menu, "class") +} +@(objc_type=Menu, objc_name="description", objc_is_class_method=true) +Menu_description :: #force_inline proc "c" () -> ^String { + return msgSend(^String, Menu, "description") +} +@(objc_type=Menu, objc_name="debugDescription", objc_is_class_method=true) +Menu_debugDescription :: #force_inline proc "c" () -> ^String { + return msgSend(^String, Menu, "debugDescription") +} +@(objc_type=Menu, objc_name="version", objc_is_class_method=true) +Menu_version :: #force_inline proc "c" () -> Integer { + return msgSend(Integer, Menu, "version") +} +@(objc_type=Menu, objc_name="setVersion", objc_is_class_method=true) +Menu_setVersion :: #force_inline proc "c" (aVersion: Integer) { + msgSend(nil, Menu, "setVersion:", aVersion) +} +@(objc_type=Menu, objc_name="poseAsClass", objc_is_class_method=true) +Menu_poseAsClass :: #force_inline proc "c" (aClass: Class) { + msgSend(nil, Menu, "poseAsClass:", aClass) +} +@(objc_type=Menu, objc_name="cancelPreviousPerformRequestsWithTarget_selector_object", objc_is_class_method=true) +Menu_cancelPreviousPerformRequestsWithTarget_selector_object :: #force_inline proc "c" (aTarget: id, aSelector: SEL, anArgument: id) { + msgSend(nil, Menu, "cancelPreviousPerformRequestsWithTarget:selector:object:", aTarget, aSelector, anArgument) +} +@(objc_type=Menu, objc_name="cancelPreviousPerformRequestsWithTarget_", objc_is_class_method=true) +Menu_cancelPreviousPerformRequestsWithTarget_ :: #force_inline proc "c" (aTarget: id) { + msgSend(nil, Menu, "cancelPreviousPerformRequestsWithTarget:", aTarget) +} +@(objc_type=Menu, objc_name="accessInstanceVariablesDirectly", objc_is_class_method=true) +Menu_accessInstanceVariablesDirectly :: #force_inline proc "c" () -> bool { + return msgSend(bool, Menu, "accessInstanceVariablesDirectly") +} +@(objc_type=Menu, objc_name="useStoredAccessor", objc_is_class_method=true) +Menu_useStoredAccessor :: #force_inline proc "c" () -> bool { + return msgSend(bool, Menu, "useStoredAccessor") +} +@(objc_type=Menu, objc_name="keyPathsForValuesAffectingValueForKey", objc_is_class_method=true) +Menu_keyPathsForValuesAffectingValueForKey :: #force_inline proc "c" (key: ^String) -> ^Set { + return msgSend(^Set, Menu, "keyPathsForValuesAffectingValueForKey:", key) +} +@(objc_type=Menu, objc_name="automaticallyNotifiesObserversForKey", objc_is_class_method=true) +Menu_automaticallyNotifiesObserversForKey :: #force_inline proc "c" (key: ^String) -> bool { + return msgSend(bool, Menu, "automaticallyNotifiesObserversForKey:", key) +} +@(objc_type=Menu, objc_name="setKeys", objc_is_class_method=true) +Menu_setKeys :: #force_inline proc "c" (keys: ^Array, dependentKey: ^String) { + msgSend(nil, Menu, "setKeys:triggerChangeNotificationsForDependentKey:", keys, dependentKey) +} +@(objc_type=Menu, objc_name="classFallbacksForKeyedArchiver", objc_is_class_method=true) +Menu_classFallbacksForKeyedArchiver :: #force_inline proc "c" () -> ^Array { + return msgSend(^Array, Menu, "classFallbacksForKeyedArchiver") +} +@(objc_type=Menu, objc_name="classForKeyedUnarchiver", objc_is_class_method=true) +Menu_classForKeyedUnarchiver :: #force_inline proc "c" () -> Class { + return msgSend(Class, Menu, "classForKeyedUnarchiver") +} +@(objc_type=Menu, objc_name="exposeBinding", objc_is_class_method=true) +Menu_exposeBinding :: #force_inline proc "c" (binding: ^String) { + msgSend(nil, Menu, "exposeBinding:", binding) +} +@(objc_type=Menu, objc_name="setDefaultPlaceholder", objc_is_class_method=true) +Menu_setDefaultPlaceholder :: #force_inline proc "c" (placeholder: id, marker: id, binding: ^String) { + msgSend(nil, Menu, "setDefaultPlaceholder:forMarker:withBinding:", placeholder, marker, binding) +} +@(objc_type=Menu, objc_name="defaultPlaceholderForMarker", objc_is_class_method=true) +Menu_defaultPlaceholderForMarker :: #force_inline proc "c" (marker: id, binding: ^String) -> id { + return msgSend(id, Menu, "defaultPlaceholderForMarker:withBinding:", marker, binding) +} +@(objc_type=Menu, objc_name="popUpContextMenu") +Menu_popUpContextMenu :: proc { + Menu_popUpContextMenu_withEvent_forView, + // Menu_popUpContextMenu_withEvent_forView_withFont, } -@(objc_type=Menu, objc_name="itemArray") -Menu_itemArray :: proc "c" (self: ^Menu) -> ^Array { - return msgSend(^Array, self, "itemArray") -} \ No newline at end of file +@(objc_type=Menu, objc_name="paletteMenuWithColors") +Menu_paletteMenuWithColors :: proc { + Menu_paletteMenuWithColors_titles_selectionHandler, + // Menu_paletteMenuWithColors_titles_templateImage_selectionHandler, +} + +@(objc_type=Menu, objc_name="cancelPreviousPerformRequestsWithTarget") +Menu_cancelPreviousPerformRequestsWithTarget :: proc { + Menu_cancelPreviousPerformRequestsWithTarget_selector_object, + Menu_cancelPreviousPerformRequestsWithTarget_, +} + + + + + + + +@(objc_class="NSMenuDelegate") +MenuDelegate :: struct {using _: Object, using _: ObjectProtocol} + +@(objc_type=MenuDelegate, objc_name="menuNeedsUpdate") +MenuDelegate_menuNeedsUpdate :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu) { + msgSend(nil, self, "menuNeedsUpdate:", menu) +} +@(objc_type=MenuDelegate, objc_name="numberOfItemsInMenu") +MenuDelegate_numberOfItemsInMenu :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu) -> Integer { + return msgSend(Integer, self, "numberOfItemsInMenu:", menu) +} +@(objc_type=MenuDelegate, objc_name="menu_updateItem_atIndex_shouldCancel") +MenuDelegate_menu_updateItem_atIndex_shouldCancel :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu, item: ^MenuItem, index: Integer, shouldCancel: bool) -> bool { + return msgSend(bool, self, "menu:updateItem:atIndex:shouldCancel:", menu, item, index, shouldCancel) +} +@(objc_type=MenuDelegate, objc_name="menuHasKeyEquivalent") +MenuDelegate_menuHasKeyEquivalent :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu, event: ^Event, target: ^id, action: ^SEL) -> bool { + return msgSend(bool, self, "menuHasKeyEquivalent:forEvent:target:action:", menu, event, target, action) +} +@(objc_type=MenuDelegate, objc_name="menuWillOpen") +MenuDelegate_menuWillOpen :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu) { + msgSend(nil, self, "menuWillOpen:", menu) +} +@(objc_type=MenuDelegate, objc_name="menuDidClose") +MenuDelegate_menuDidClose :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu) { + msgSend(nil, self, "menuDidClose:", menu) +} +@(objc_type=MenuDelegate, objc_name="menu_willHighlightItem") +MenuDelegate_menu_willHighlightItem :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu, item: ^MenuItem) { + msgSend(nil, self, "menu:willHighlightItem:", menu, item) +} +@(objc_type=MenuDelegate, objc_name="confinementRectForMenu") +MenuDelegate_confinementRectForMenu :: #force_inline proc "c" (self: ^MenuDelegate, menu: ^Menu, screen: ^Screen) -> Rect { + return msgSend(Rect, self, "confinementRectForMenu:onScreen:", menu, screen) +} +@(objc_type=MenuDelegate, objc_name="menu") +MenuDelegate_menu :: proc { + MenuDelegate_menu_updateItem_atIndex_shouldCancel, + MenuDelegate_menu_willHighlightItem, +} diff --git a/core/sys/darwin/Foundation/objc_helper.odin b/core/sys/darwin/Foundation/objc_helper.odin new file mode 100644 index 000000000..76e6c840f --- /dev/null +++ b/core/sys/darwin/Foundation/objc_helper.odin @@ -0,0 +1,137 @@ +package objc_Foundation + +import "base:runtime" +import "base:intrinsics" + +Subclasser_Proc :: proc(cls: Class, vtable: rawptr) + +Object_VTable_Info :: struct { + vtable: rawptr, + size: uint, + impl: Subclasser_Proc, +} + +Class_VTable_Info :: struct { + _context: runtime.Context, + super_vtable: rawptr, + protocol_vtable: rawptr, +} + +@(require_results) +class_get_metaclass :: #force_inline proc "contextless" (cls: Class) -> Class { + return (^Class)(cls)^ +} + +@(require_results) +object_get_vtable_info :: proc "contextless" (obj: id) -> ^Class_VTable_Info { + return (^Class_VTable_Info)(object_getIndexedIvars(obj)) +} + +@(require_results) +make_subclasser :: #force_inline proc(vtable: ^$T, impl: proc(cls: Class, vt: ^T)) -> Object_VTable_Info { + return Object_VTable_Info{ + vtable = vtable, + size = size_of(T), + impl = (Subclasser_Proc)(impl), + } +} + +@(require_results) +register_subclass :: proc( + class_name: cstring, + superclass: Class, + superclass_overrides: Maybe(Object_VTable_Info) = nil, + protocol: Maybe(Object_VTable_Info) = nil, + _context: Maybe(runtime.Context) = nil, +) -> Class { + assert(superclass != nil) + + super_size: uint + proto_size: uint + + if superclass_overrides != nil { + // Align to 8-byte boundary + super_size = (superclass_overrides.?.size + 7)/8 * 8 + } + + if protocol != nil { + // Align to 8-byte boundary + proto_size = (protocol.?.size + 7)/8 * 8 + } + + cls := objc_lookUpClass(class_name) + if cls != nil { + return cls + } + + extra_size := uint(size_of(Class_VTable_Info)) + 8 + super_size + proto_size + + cls = objc_allocateClassPair(superclass, class_name, extra_size) + assert(cls != nil) + + if s, ok := superclass_overrides.?; ok { + s.impl(cls, s.vtable) + } + + if p, ok := protocol.?; ok { + p.impl(cls, p.vtable) + } + + objc_registerClassPair(cls) + meta_cls := class_get_metaclass(cls) + class_size1 := uint(class_getInstanceSize(cls)) + meta_size := uint(class_getInstanceSize(meta_cls)) + + // Offsets are always aligned to 8-byte boundary + info_offset := (meta_size + 7) / 8 * 8 + super_vtable_offset := (info_offset + size_of(Class_VTable_Info) + 7) / 8 * 8 + ptoto_vtable_offset := super_vtable_offset + super_size + + + p_info := (^Class_VTable_Info)(([^]u8)(cls)[info_offset:]) + p_super_vtable := ([^]u8)(cls)[super_vtable_offset:] + p_proto_vtable := ([^]u8)(cls)[ptoto_vtable_offset:] + + intrinsics.mem_zero(p_info, size_of(Class_VTable_Info)) + + // Assign the context + p_info._context = _context.? or_else context + + if s, ok := superclass_overrides.?; ok { + p_info.super_vtable = p_super_vtable + intrinsics.mem_copy(p_super_vtable, s.vtable, super_size) + } + if p, ok := protocol.?; ok { + p_info.protocol_vtable = p_proto_vtable + intrinsics.mem_copy(p_proto_vtable, p.vtable, p.size) + } + + return cls +} + +@(require_results) +class_get_vtable_info :: proc "contextless" (cls: Class) -> ^Class_VTable_Info { + meta_cls := class_get_metaclass(cls) + meta_size := uint(class_getInstanceSize(meta_cls)) + + // Align to 8-byte boundary + info_offset := (meta_size+7) / 8 * 8 + + p_cls := ([^]u8)(cls)[info_offset:] + ctx := (^Class_VTable_Info)(p_cls) + return ctx +} + +@(require_results) +alloc_user_object :: proc "contextless" (cls: Class, _context: Maybe(runtime.Context) = nil) -> id { + info := class_get_vtable_info(cls) + + obj := class_createInstance(cls, size_of(Class_VTable_Info)) + obj_info := (^Class_VTable_Info)(object_getIndexedIvars(obj)) + obj_info^ = info^ + + if _context != nil { + obj_info._context = _context.? + } + return obj +} \ No newline at end of file From 5454e120fe29476d94dd1b42fed48a5791b0dc2c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 17 May 2025 13:27:54 +0100 Subject: [PATCH 082/120] Add NSMenuItem.odin --- core/sys/darwin/Foundation/NSMenuItem.odin | 461 +++++++++++++++++++++ 1 file changed, 461 insertions(+) create mode 100644 core/sys/darwin/Foundation/NSMenuItem.odin diff --git a/core/sys/darwin/Foundation/NSMenuItem.odin b/core/sys/darwin/Foundation/NSMenuItem.odin new file mode 100644 index 000000000..ed7168899 --- /dev/null +++ b/core/sys/darwin/Foundation/NSMenuItem.odin @@ -0,0 +1,461 @@ +package objc_Foundation + +import "base:builtin" +import "base:intrinsics" +import "core:c" + +KeyEquivalentModifierFlag :: EventModifierFlag +KeyEquivalentModifierMask :: EventModifierFlags + +// Used to retrieve only the device-independent modifier flags, allowing applications to mask off the device-dependent modifier flags, including event coalescing information. +KeyEventModifierFlagDeviceIndependentFlagsMask := transmute(KeyEquivalentModifierMask)_KeyEventModifierFlagDeviceIndependentFlagsMask +@(private) _KeyEventModifierFlagDeviceIndependentFlagsMask := UInteger(0xffff0000) + +MenuItemCallback :: proc "c" (unused: rawptr, name: SEL, sender: ^Object) + +@(objc_class="NSMenuItem") +MenuItem :: struct {using _: Object} + +@(objc_type=MenuItem, objc_name="registerActionCallback", objc_is_class_method=true) +MenuItem_registerActionCallback :: proc "c" (name: cstring, callback: MenuItemCallback) -> SEL { + s := string(name) + n := len(s) + sel: SEL + if n > 0 && s[n-1] != ':' { + col_name := intrinsics.alloca(n+2, 1) + builtin.copy(col_name[:n], s) + col_name[n] = ':' + col_name[n+1] = 0 + sel = sel_registerName(cstring(col_name)) + } else { + sel = sel_registerName(name) + } + if callback != nil { + class_addMethod(intrinsics.objc_find_class("NSObject"), sel, auto_cast callback, "v@:@") + } + return sel +} + +@(objc_type=MenuItem, objc_name="init") +MenuItem_init :: proc "c" (self: ^MenuItem) -> ^MenuItem { + return msgSend(^MenuItem, self, "init") +} + + +@(objc_type=MenuItem, objc_name="separatorItem", objc_is_class_method=true) +MenuItem_separatorItem :: #force_inline proc "c" () -> ^MenuItem { + return msgSend(^MenuItem, MenuItem, "separatorItem") +} +@(objc_type=MenuItem, objc_name="sectionHeaderWithTitle", objc_is_class_method=true) +MenuItem_sectionHeaderWithTitle :: #force_inline proc "c" (title: ^String) -> ^MenuItem { + return msgSend(^MenuItem, MenuItem, "sectionHeaderWithTitle:", title) +} +@(objc_type=MenuItem, objc_name="initWithTitle") +MenuItem_initWithTitle :: #force_inline proc "c" (self: ^MenuItem, string: ^String, selector: SEL, charCode: ^String) -> ^MenuItem { + return msgSend(^MenuItem, self, "initWithTitle:action:keyEquivalent:", string, selector, charCode) +} +@(objc_type=MenuItem, objc_name="initWithCoder") +MenuItem_initWithCoder :: #force_inline proc "c" (self: ^MenuItem, coder: ^Coder) -> ^MenuItem { + return msgSend(^MenuItem, self, "initWithCoder:", coder) +} +@(objc_type=MenuItem, objc_name="usesUserKeyEquivalents", objc_is_class_method=true) +MenuItem_usesUserKeyEquivalents :: #force_inline proc "c" () -> bool { + return msgSend(bool, MenuItem, "usesUserKeyEquivalents") +} +@(objc_type=MenuItem, objc_name="setUsesUserKeyEquivalents", objc_is_class_method=true) +MenuItem_setUsesUserKeyEquivalents :: #force_inline proc "c" (usesUserKeyEquivalents: bool) { + msgSend(nil, MenuItem, "setUsesUserKeyEquivalents:", usesUserKeyEquivalents) +} +@(objc_type=MenuItem, objc_name="menu") +MenuItem_menu :: #force_inline proc "c" (self: ^MenuItem) -> ^Menu { + return msgSend(^Menu, self, "menu") +} +@(objc_type=MenuItem, objc_name="setMenu") +MenuItem_setMenu :: #force_inline proc "c" (self: ^MenuItem, menu: ^Menu) { + msgSend(nil, self, "setMenu:", menu) +} +@(objc_type=MenuItem, objc_name="hasSubmenu") +MenuItem_hasSubmenu :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "hasSubmenu") +} +@(objc_type=MenuItem, objc_name="submenu") +MenuItem_submenu :: #force_inline proc "c" (self: ^MenuItem) -> ^Menu { + return msgSend(^Menu, self, "submenu") +} +@(objc_type=MenuItem, objc_name="setSubmenu") +MenuItem_setSubmenu :: #force_inline proc "c" (self: ^MenuItem, submenu: ^Menu) { + msgSend(nil, self, "setSubmenu:", submenu) +} +@(objc_type=MenuItem, objc_name="parentItem") +MenuItem_parentItem :: #force_inline proc "c" (self: ^MenuItem) -> ^MenuItem { + return msgSend(^MenuItem, self, "parentItem") +} +@(objc_type=MenuItem, objc_name="title") +MenuItem_title :: #force_inline proc "c" (self: ^MenuItem) -> ^String { + return msgSend(^String, self, "title") +} +@(objc_type=MenuItem, objc_name="setTitle") +MenuItem_setTitle :: #force_inline proc "c" (self: ^MenuItem, title: ^String) { + msgSend(nil, self, "setTitle:", title) +} +// @(objc_type=MenuItem, objc_name="attributedTitle") +// MenuItem_attributedTitle :: #force_inline proc "c" (self: ^MenuItem) -> ^AttributedString { +// return msgSend(^AttributedString, self, "attributedTitle") +// } +// @(objc_type=MenuItem, objc_name="setAttributedTitle") +// MenuItem_setAttributedTitle :: #force_inline proc "c" (self: ^MenuItem, attributedTitle: ^AttributedString) { +// msgSend(nil, self, "setAttributedTitle:", attributedTitle) +// } +@(objc_type=MenuItem, objc_name="subtitle") +MenuItem_subtitle :: #force_inline proc "c" (self: ^MenuItem) -> ^String { + return msgSend(^String, self, "subtitle") +} +@(objc_type=MenuItem, objc_name="setSubtitle") +MenuItem_setSubtitle :: #force_inline proc "c" (self: ^MenuItem, subtitle: ^String) { + msgSend(nil, self, "setSubtitle:", subtitle) +} +@(objc_type=MenuItem, objc_name="isSeparatorItem") +MenuItem_isSeparatorItem :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "isSeparatorItem") +} +@(objc_type=MenuItem, objc_name="isSectionHeader") +MenuItem_isSectionHeader :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "isSectionHeader") +} +@(objc_type=MenuItem, objc_name="keyEquivalent") +MenuItem_keyEquivalent :: #force_inline proc "c" (self: ^MenuItem) -> ^String { + return msgSend(^String, self, "keyEquivalent") +} +@(objc_type=MenuItem, objc_name="setKeyEquivalent") +MenuItem_setKeyEquivalent :: #force_inline proc "c" (self: ^MenuItem, keyEquivalent: ^String) { + msgSend(nil, self, "setKeyEquivalent:", keyEquivalent) +} +@(objc_type=MenuItem, objc_name="keyEquivalentModifierMask") +MenuItem_keyEquivalentModifierMask :: #force_inline proc "c" (self: ^MenuItem) -> EventModifierFlags { + return msgSend(EventModifierFlags, self, "keyEquivalentModifierMask") +} +@(objc_type=MenuItem, objc_name="setKeyEquivalentModifierMask") +MenuItem_setKeyEquivalentModifierMask :: #force_inline proc "c" (self: ^MenuItem, keyEquivalentModifierMask: EventModifierFlags) { + msgSend(nil, self, "setKeyEquivalentModifierMask:", keyEquivalentModifierMask) +} +@(objc_type=MenuItem, objc_name="userKeyEquivalent") +MenuItem_userKeyEquivalent :: #force_inline proc "c" (self: ^MenuItem) -> ^String { + return msgSend(^String, self, "userKeyEquivalent") +} +@(objc_type=MenuItem, objc_name="allowsKeyEquivalentWhenHidden") +MenuItem_allowsKeyEquivalentWhenHidden :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "allowsKeyEquivalentWhenHidden") +} +@(objc_type=MenuItem, objc_name="setAllowsKeyEquivalentWhenHidden") +MenuItem_setAllowsKeyEquivalentWhenHidden :: #force_inline proc "c" (self: ^MenuItem, allowsKeyEquivalentWhenHidden: bool) { + msgSend(nil, self, "setAllowsKeyEquivalentWhenHidden:", allowsKeyEquivalentWhenHidden) +} +@(objc_type=MenuItem, objc_name="allowsAutomaticKeyEquivalentLocalization") +MenuItem_allowsAutomaticKeyEquivalentLocalization :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "allowsAutomaticKeyEquivalentLocalization") +} +@(objc_type=MenuItem, objc_name="setAllowsAutomaticKeyEquivalentLocalization") +MenuItem_setAllowsAutomaticKeyEquivalentLocalization :: #force_inline proc "c" (self: ^MenuItem, allowsAutomaticKeyEquivalentLocalization: bool) { + msgSend(nil, self, "setAllowsAutomaticKeyEquivalentLocalization:", allowsAutomaticKeyEquivalentLocalization) +} +@(objc_type=MenuItem, objc_name="allowsAutomaticKeyEquivalentMirroring") +MenuItem_allowsAutomaticKeyEquivalentMirroring :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "allowsAutomaticKeyEquivalentMirroring") +} +@(objc_type=MenuItem, objc_name="setAllowsAutomaticKeyEquivalentMirroring") +MenuItem_setAllowsAutomaticKeyEquivalentMirroring :: #force_inline proc "c" (self: ^MenuItem, allowsAutomaticKeyEquivalentMirroring: bool) { + msgSend(nil, self, "setAllowsAutomaticKeyEquivalentMirroring:", allowsAutomaticKeyEquivalentMirroring) +} +// @(objc_type=MenuItem, objc_name="image") +// MenuItem_image :: #force_inline proc "c" (self: ^MenuItem) -> ^Image { +// return msgSend(^Image, self, "image") +// } +// @(objc_type=MenuItem, objc_name="setImage") +// MenuItem_setImage :: #force_inline proc "c" (self: ^MenuItem, image: ^Image) { +// msgSend(nil, self, "setImage:", image) +// } +// @(objc_type=MenuItem, objc_name="state") +// MenuItem_state :: #force_inline proc "c" (self: ^MenuItem) -> ControlStateValue { +// return msgSend(ControlStateValue, self, "state") +// } +// @(objc_type=MenuItem, objc_name="setState") +// MenuItem_setState :: #force_inline proc "c" (self: ^MenuItem, state: ControlStateValue) { +// msgSend(nil, self, "setState:", state) +// } +// @(objc_type=MenuItem, objc_name="onStateImage") +// MenuItem_onStateImage :: #force_inline proc "c" (self: ^MenuItem) -> ^Image { +// return msgSend(^Image, self, "onStateImage") +// } +// @(objc_type=MenuItem, objc_name="setOnStateImage") +// MenuItem_setOnStateImage :: #force_inline proc "c" (self: ^MenuItem, onStateImage: ^Image) { +// msgSend(nil, self, "setOnStateImage:", onStateImage) +// } +// @(objc_type=MenuItem, objc_name="offStateImage") +// MenuItem_offStateImage :: #force_inline proc "c" (self: ^MenuItem) -> ^Image { +// return msgSend(^Image, self, "offStateImage") +// } +// @(objc_type=MenuItem, objc_name="setOffStateImage") +// MenuItem_setOffStateImage :: #force_inline proc "c" (self: ^MenuItem, offStateImage: ^Image) { +// msgSend(nil, self, "setOffStateImage:", offStateImage) +// } +// @(objc_type=MenuItem, objc_name="mixedStateImage") +// MenuItem_mixedStateImage :: #force_inline proc "c" (self: ^MenuItem) -> ^Image { +// return msgSend(^Image, self, "mixedStateImage") +// } +// @(objc_type=MenuItem, objc_name="setMixedStateImage") +// MenuItem_setMixedStateImage :: #force_inline proc "c" (self: ^MenuItem, mixedStateImage: ^Image) { +// msgSend(nil, self, "setMixedStateImage:", mixedStateImage) +// } +@(objc_type=MenuItem, objc_name="isEnabled") +MenuItem_isEnabled :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "isEnabled") +} +@(objc_type=MenuItem, objc_name="setEnabled") +MenuItem_setEnabled :: #force_inline proc "c" (self: ^MenuItem, enabled: bool) { + msgSend(nil, self, "setEnabled:", enabled) +} +@(objc_type=MenuItem, objc_name="isAlternate") +MenuItem_isAlternate :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "isAlternate") +} +@(objc_type=MenuItem, objc_name="setAlternate") +MenuItem_setAlternate :: #force_inline proc "c" (self: ^MenuItem, alternate: bool) { + msgSend(nil, self, "setAlternate:", alternate) +} +@(objc_type=MenuItem, objc_name="indentationLevel") +MenuItem_indentationLevel :: #force_inline proc "c" (self: ^MenuItem) -> Integer { + return msgSend(Integer, self, "indentationLevel") +} +@(objc_type=MenuItem, objc_name="setIndentationLevel") +MenuItem_setIndentationLevel :: #force_inline proc "c" (self: ^MenuItem, indentationLevel: Integer) { + msgSend(nil, self, "setIndentationLevel:", indentationLevel) +} +@(objc_type=MenuItem, objc_name="target") +MenuItem_target :: #force_inline proc "c" (self: ^MenuItem) -> id { + return msgSend(id, self, "target") +} +@(objc_type=MenuItem, objc_name="setTarget") +MenuItem_setTarget :: #force_inline proc "c" (self: ^MenuItem, target: id) { + msgSend(nil, self, "setTarget:", target) +} +@(objc_type=MenuItem, objc_name="action") +MenuItem_action :: #force_inline proc "c" (self: ^MenuItem) -> SEL { + return msgSend(SEL, self, "action") +} +@(objc_type=MenuItem, objc_name="setAction") +MenuItem_setAction :: #force_inline proc "c" (self: ^MenuItem, action: SEL) { + msgSend(nil, self, "setAction:", action) +} +@(objc_type=MenuItem, objc_name="tag") +MenuItem_tag :: #force_inline proc "c" (self: ^MenuItem) -> Integer { + return msgSend(Integer, self, "tag") +} +@(objc_type=MenuItem, objc_name="setTag") +MenuItem_setTag :: #force_inline proc "c" (self: ^MenuItem, tag: Integer) { + msgSend(nil, self, "setTag:", tag) +} +@(objc_type=MenuItem, objc_name="representedObject") +MenuItem_representedObject :: #force_inline proc "c" (self: ^MenuItem) -> id { + return msgSend(id, self, "representedObject") +} +@(objc_type=MenuItem, objc_name="setRepresentedObject") +MenuItem_setRepresentedObject :: #force_inline proc "c" (self: ^MenuItem, representedObject: id) { + msgSend(nil, self, "setRepresentedObject:", representedObject) +} +@(objc_type=MenuItem, objc_name="view") +MenuItem_view :: #force_inline proc "c" (self: ^MenuItem) -> ^View { + return msgSend(^View, self, "view") +} +@(objc_type=MenuItem, objc_name="setView") +MenuItem_setView :: #force_inline proc "c" (self: ^MenuItem, view: ^View) { + msgSend(nil, self, "setView:", view) +} +@(objc_type=MenuItem, objc_name="isHighlighted") +MenuItem_isHighlighted :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "isHighlighted") +} +@(objc_type=MenuItem, objc_name="isHidden") +MenuItem_isHidden :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "isHidden") +} +@(objc_type=MenuItem, objc_name="setHidden") +MenuItem_setHidden :: #force_inline proc "c" (self: ^MenuItem, hidden: bool) { + msgSend(nil, self, "setHidden:", hidden) +} +@(objc_type=MenuItem, objc_name="isHiddenOrHasHiddenAncestor") +MenuItem_isHiddenOrHasHiddenAncestor :: #force_inline proc "c" (self: ^MenuItem) -> bool { + return msgSend(bool, self, "isHiddenOrHasHiddenAncestor") +} +@(objc_type=MenuItem, objc_name="toolTip") +MenuItem_toolTip :: #force_inline proc "c" (self: ^MenuItem) -> ^String { + return msgSend(^String, self, "toolTip") +} +@(objc_type=MenuItem, objc_name="setToolTip") +MenuItem_setToolTip :: #force_inline proc "c" (self: ^MenuItem, toolTip: ^String) { + msgSend(nil, self, "setToolTip:", toolTip) +} +// @(objc_type=MenuItem, objc_name="badge") +// MenuItem_badge :: #force_inline proc "c" (self: ^MenuItem) -> ^MenuItemBadge { +// return msgSend(^MenuItemBadge, self, "badge") +// } +// @(objc_type=MenuItem, objc_name="setBadge") +// MenuItem_setBadge :: #force_inline proc "c" (self: ^MenuItem, badge: ^MenuItemBadge) { +// msgSend(nil, self, "setBadge:", badge) +// } +@(objc_type=MenuItem, objc_name="setMnemonicLocation") +MenuItem_setMnemonicLocation :: #force_inline proc "c" (self: ^MenuItem, location: UInteger) { + msgSend(nil, self, "setMnemonicLocation:", location) +} +@(objc_type=MenuItem, objc_name="mnemonicLocation") +MenuItem_mnemonicLocation :: #force_inline proc "c" (self: ^MenuItem) -> UInteger { + return msgSend(UInteger, self, "mnemonicLocation") +} +@(objc_type=MenuItem, objc_name="mnemonic") +MenuItem_mnemonic :: #force_inline proc "c" (self: ^MenuItem) -> ^String { + return msgSend(^String, self, "mnemonic") +} +@(objc_type=MenuItem, objc_name="setTitleWithMnemonic") +MenuItem_setTitleWithMnemonic :: #force_inline proc "c" (self: ^MenuItem, stringWithAmpersand: ^String) { + msgSend(nil, self, "setTitleWithMnemonic:", stringWithAmpersand) +} +@(objc_type=MenuItem, objc_name="load", objc_is_class_method=true) +MenuItem_load :: #force_inline proc "c" () { + msgSend(nil, MenuItem, "load") +} +@(objc_type=MenuItem, objc_name="initialize", objc_is_class_method=true) +MenuItem_initialize :: #force_inline proc "c" () { + msgSend(nil, MenuItem, "initialize") +} +@(objc_type=MenuItem, objc_name="new", objc_is_class_method=true) +MenuItem_new :: #force_inline proc "c" () -> ^MenuItem { + return msgSend(^MenuItem, MenuItem, "new") +} +@(objc_type=MenuItem, objc_name="allocWithZone", objc_is_class_method=true) +MenuItem_allocWithZone :: #force_inline proc "c" (zone: ^Zone) -> ^MenuItem { + return msgSend(^MenuItem, MenuItem, "allocWithZone:", zone) +} +@(objc_type=MenuItem, objc_name="alloc", objc_is_class_method=true) +MenuItem_alloc :: #force_inline proc "c" () -> ^MenuItem { + return msgSend(^MenuItem, MenuItem, "alloc") +} +@(objc_type=MenuItem, objc_name="copyWithZone", objc_is_class_method=true) +MenuItem_copyWithZone :: #force_inline proc "c" (zone: ^Zone) -> id { + return msgSend(id, MenuItem, "copyWithZone:", zone) +} +@(objc_type=MenuItem, objc_name="mutableCopyWithZone", objc_is_class_method=true) +MenuItem_mutableCopyWithZone :: #force_inline proc "c" (zone: ^Zone) -> id { + return msgSend(id, MenuItem, "mutableCopyWithZone:", zone) +} +@(objc_type=MenuItem, objc_name="instancesRespondToSelector", objc_is_class_method=true) +MenuItem_instancesRespondToSelector :: #force_inline proc "c" (aSelector: SEL) -> bool { + return msgSend(bool, MenuItem, "instancesRespondToSelector:", aSelector) +} +@(objc_type=MenuItem, objc_name="conformsToProtocol", objc_is_class_method=true) +MenuItem_conformsToProtocol :: #force_inline proc "c" (protocol: ^Protocol) -> bool { + return msgSend(bool, MenuItem, "conformsToProtocol:", protocol) +} +@(objc_type=MenuItem, objc_name="instanceMethodForSelector", objc_is_class_method=true) +MenuItem_instanceMethodForSelector :: #force_inline proc "c" (aSelector: SEL) -> IMP { + return msgSend(IMP, MenuItem, "instanceMethodForSelector:", aSelector) +} +// @(objc_type=MenuItem, objc_name="instanceMethodSignatureForSelector", objc_is_class_method=true) +// MenuItem_instanceMethodSignatureForSelector :: #force_inline proc "c" (aSelector: SEL) -> ^MethodSignature { +// return msgSend(^MethodSignature, MenuItem, "instanceMethodSignatureForSelector:", aSelector) +// } +@(objc_type=MenuItem, objc_name="isSubclassOfClass", objc_is_class_method=true) +MenuItem_isSubclassOfClass :: #force_inline proc "c" (aClass: Class) -> bool { + return msgSend(bool, MenuItem, "isSubclassOfClass:", aClass) +} +@(objc_type=MenuItem, objc_name="resolveClassMethod", objc_is_class_method=true) +MenuItem_resolveClassMethod :: #force_inline proc "c" (sel: SEL) -> bool { + return msgSend(bool, MenuItem, "resolveClassMethod:", sel) +} +@(objc_type=MenuItem, objc_name="resolveInstanceMethod", objc_is_class_method=true) +MenuItem_resolveInstanceMethod :: #force_inline proc "c" (sel: SEL) -> bool { + return msgSend(bool, MenuItem, "resolveInstanceMethod:", sel) +} +@(objc_type=MenuItem, objc_name="hash", objc_is_class_method=true) +MenuItem_hash :: #force_inline proc "c" () -> UInteger { + return msgSend(UInteger, MenuItem, "hash") +} +@(objc_type=MenuItem, objc_name="superclass", objc_is_class_method=true) +MenuItem_superclass :: #force_inline proc "c" () -> Class { + return msgSend(Class, MenuItem, "superclass") +} +@(objc_type=MenuItem, objc_name="class", objc_is_class_method=true) +MenuItem_class :: #force_inline proc "c" () -> Class { + return msgSend(Class, MenuItem, "class") +} +@(objc_type=MenuItem, objc_name="description", objc_is_class_method=true) +MenuItem_description :: #force_inline proc "c" () -> ^String { + return msgSend(^String, MenuItem, "description") +} +@(objc_type=MenuItem, objc_name="debugDescription", objc_is_class_method=true) +MenuItem_debugDescription :: #force_inline proc "c" () -> ^String { + return msgSend(^String, MenuItem, "debugDescription") +} +@(objc_type=MenuItem, objc_name="version", objc_is_class_method=true) +MenuItem_version :: #force_inline proc "c" () -> Integer { + return msgSend(Integer, MenuItem, "version") +} +@(objc_type=MenuItem, objc_name="setVersion", objc_is_class_method=true) +MenuItem_setVersion :: #force_inline proc "c" (aVersion: Integer) { + msgSend(nil, MenuItem, "setVersion:", aVersion) +} +@(objc_type=MenuItem, objc_name="poseAsClass", objc_is_class_method=true) +MenuItem_poseAsClass :: #force_inline proc "c" (aClass: Class) { + msgSend(nil, MenuItem, "poseAsClass:", aClass) +} +@(objc_type=MenuItem, objc_name="cancelPreviousPerformRequestsWithTarget_selector_object", objc_is_class_method=true) +MenuItem_cancelPreviousPerformRequestsWithTarget_selector_object :: #force_inline proc "c" (aTarget: id, aSelector: SEL, anArgument: id) { + msgSend(nil, MenuItem, "cancelPreviousPerformRequestsWithTarget:selector:object:", aTarget, aSelector, anArgument) +} +@(objc_type=MenuItem, objc_name="cancelPreviousPerformRequestsWithTarget_", objc_is_class_method=true) +MenuItem_cancelPreviousPerformRequestsWithTarget_ :: #force_inline proc "c" (aTarget: id) { + msgSend(nil, MenuItem, "cancelPreviousPerformRequestsWithTarget:", aTarget) +} +@(objc_type=MenuItem, objc_name="accessInstanceVariablesDirectly", objc_is_class_method=true) +MenuItem_accessInstanceVariablesDirectly :: #force_inline proc "c" () -> bool { + return msgSend(bool, MenuItem, "accessInstanceVariablesDirectly") +} +@(objc_type=MenuItem, objc_name="useStoredAccessor", objc_is_class_method=true) +MenuItem_useStoredAccessor :: #force_inline proc "c" () -> bool { + return msgSend(bool, MenuItem, "useStoredAccessor") +} +@(objc_type=MenuItem, objc_name="keyPathsForValuesAffectingValueForKey", objc_is_class_method=true) +MenuItem_keyPathsForValuesAffectingValueForKey :: #force_inline proc "c" (key: ^String) -> ^Set { + return msgSend(^Set, MenuItem, "keyPathsForValuesAffectingValueForKey:", key) +} +@(objc_type=MenuItem, objc_name="automaticallyNotifiesObserversForKey", objc_is_class_method=true) +MenuItem_automaticallyNotifiesObserversForKey :: #force_inline proc "c" (key: ^String) -> bool { + return msgSend(bool, MenuItem, "automaticallyNotifiesObserversForKey:", key) +} +@(objc_type=MenuItem, objc_name="setKeys", objc_is_class_method=true) +MenuItem_setKeys :: #force_inline proc "c" (keys: ^Array, dependentKey: ^String) { + msgSend(nil, MenuItem, "setKeys:triggerChangeNotificationsForDependentKey:", keys, dependentKey) +} +@(objc_type=MenuItem, objc_name="classFallbacksForKeyedArchiver", objc_is_class_method=true) +MenuItem_classFallbacksForKeyedArchiver :: #force_inline proc "c" () -> ^Array { + return msgSend(^Array, MenuItem, "classFallbacksForKeyedArchiver") +} +@(objc_type=MenuItem, objc_name="classForKeyedUnarchiver", objc_is_class_method=true) +MenuItem_classForKeyedUnarchiver :: #force_inline proc "c" () -> Class { + return msgSend(Class, MenuItem, "classForKeyedUnarchiver") +} +@(objc_type=MenuItem, objc_name="exposeBinding", objc_is_class_method=true) +MenuItem_exposeBinding :: #force_inline proc "c" (binding: ^String) { + msgSend(nil, MenuItem, "exposeBinding:", binding) +} +@(objc_type=MenuItem, objc_name="setDefaultPlaceholder", objc_is_class_method=true) +MenuItem_setDefaultPlaceholder :: #force_inline proc "c" (placeholder: id, marker: id, binding: ^String) { + msgSend(nil, MenuItem, "setDefaultPlaceholder:forMarker:withBinding:", placeholder, marker, binding) +} +@(objc_type=MenuItem, objc_name="defaultPlaceholderForMarker", objc_is_class_method=true) +MenuItem_defaultPlaceholderForMarker :: #force_inline proc "c" (marker: id, binding: ^String) -> id { + return msgSend(id, MenuItem, "defaultPlaceholderForMarker:withBinding:", marker, binding) +} +@(objc_type=MenuItem, objc_name="cancelPreviousPerformRequestsWithTarget") +MenuItem_cancelPreviousPerformRequestsWithTarget :: proc { + MenuItem_cancelPreviousPerformRequestsWithTarget_selector_object, + MenuItem_cancelPreviousPerformRequestsWithTarget_, +} \ No newline at end of file From 7c80df483066e9e92fdb05b03192c4cca148f448 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sat, 17 May 2025 16:22:47 +0200 Subject: [PATCH 083/120] @(init), @(fini) and @(export) procedures are classified as used. For the purposes of `-vet-unused-procedures`, exported procedures and `@(init)` and `@(fini)` are now disregarded. --- src/checker.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index 17575668f..909ee705b 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -728,12 +728,17 @@ gb_internal void check_scope_usage_internal(Checker *c, Scope *scope, u64 vet_fl bool is_unused = false; if (vet_unused && check_vet_unused(c, e, &ve_unused)) { is_unused = true; - } else if (vet_unused_procedures && - e->kind == Entity_Procedure) { + } else if (vet_unused_procedures && e->kind == Entity_Procedure) { if (e->flags&EntityFlag_Used) { is_unused = false; } else if (e->flags & EntityFlag_Require) { is_unused = false; + } else if (e->flags & EntityFlag_Init) { + is_unused = false; + } else if (e->flags & EntityFlag_Fini) { + is_unused = false; + } else if (e->Procedure.is_export) { + is_unused = false; } else if (e->pkg && e->pkg->kind == Package_Init && e->token.string == "main") { is_unused = false; } else { From d6210ae76f01fd14b8eb09b12f9d3d1f48b32cea Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sat, 17 May 2025 16:36:10 +0200 Subject: [PATCH 084/120] Fix -vet complaints in `core:sys/darwin/Foundation` --- core/sys/darwin/Foundation/NSMenuItem.odin | 1 - core/sys/darwin/Foundation/objc_helper.odin | 1 - 2 files changed, 2 deletions(-) diff --git a/core/sys/darwin/Foundation/NSMenuItem.odin b/core/sys/darwin/Foundation/NSMenuItem.odin index ed7168899..248a0cf4f 100644 --- a/core/sys/darwin/Foundation/NSMenuItem.odin +++ b/core/sys/darwin/Foundation/NSMenuItem.odin @@ -2,7 +2,6 @@ package objc_Foundation import "base:builtin" import "base:intrinsics" -import "core:c" KeyEquivalentModifierFlag :: EventModifierFlag KeyEquivalentModifierMask :: EventModifierFlags diff --git a/core/sys/darwin/Foundation/objc_helper.odin b/core/sys/darwin/Foundation/objc_helper.odin index 76e6c840f..0748d700b 100644 --- a/core/sys/darwin/Foundation/objc_helper.odin +++ b/core/sys/darwin/Foundation/objc_helper.odin @@ -79,7 +79,6 @@ register_subclass :: proc( objc_registerClassPair(cls) meta_cls := class_get_metaclass(cls) - class_size1 := uint(class_getInstanceSize(cls)) meta_size := uint(class_getInstanceSize(meta_cls)) // Offsets are always aligned to 8-byte boundary From c35a45e823401a1d7a15f11c6fb07e4fe9e6007a Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sat, 17 May 2025 16:28:34 +0200 Subject: [PATCH 085/120] fix global and static any Fixes #4627 --- src/llvm_backend.cpp | 23 +++---------- src/llvm_backend_general.cpp | 43 ++++++++++++++----------- src/llvm_backend_stmt.cpp | 50 +++++++++++++++++------------ tests/internal/test_global_any.odin | 40 +++++++++++++++++++++++ 4 files changed, 98 insertions(+), 58 deletions(-) create mode 100644 tests/internal/test_global_any.odin diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 7de147058..361a0c46b 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1973,14 +1973,14 @@ gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProc gbString var_name = gb_string_make(permanent_allocator(), "__$global_any::"); gbString e_str = string_canonical_entity_name(temporary_allocator(), e); var_name = gb_string_append_length(var_name, e_str, gb_strlen(e_str)); - lbAddr g = lb_add_global_generated_with_name(main_module, var_type, var.init, make_string_c(var_name)); + lbAddr g = lb_add_global_generated_with_name(main_module, var_type, {}, make_string_c(var_name)); lb_addr_store(p, g, var.init); lbValue gp = lb_addr_get_ptr(p, g); lbValue data = lb_emit_struct_ep(p, var.var, 0); lbValue ti = lb_emit_struct_ep(p, var.var, 1); lb_emit_store(p, data, lb_emit_conv(p, gp, t_rawptr)); - lb_emit_store(p, ti, lb_type_info(p, var_type)); + lb_emit_store(p, ti, lb_typeid(p->module, var_type)); } else { LLVMTypeRef vt = llvm_addr_type(p->module, var.var); lbValue src0 = lb_emit_conv(p, var.init, t); @@ -3194,24 +3194,9 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { lbValue g = {}; g.value = LLVMAddGlobal(m->mod, lb_type(m, e->type), alloc_cstring(permanent_allocator(), name)); g.type = alloc_type_pointer(e->type); - if (e->Variable.thread_local_model != "") { - LLVMSetThreadLocal(g.value, true); - String m = e->Variable.thread_local_model; - LLVMThreadLocalMode mode = LLVMGeneralDynamicTLSModel; - if (m == "default") { - mode = LLVMGeneralDynamicTLSModel; - } else if (m == "localdynamic") { - mode = LLVMLocalDynamicTLSModel; - } else if (m == "initialexec") { - mode = LLVMInitialExecTLSModel; - } else if (m == "localexec") { - mode = LLVMLocalExecTLSModel; - } else { - GB_PANIC("Unhandled thread local mode %.*s", LIT(m)); - } - LLVMSetThreadLocalMode(g.value, mode); - } + lb_apply_thread_local_model(g.value, e->Variable.thread_local_model); + if (is_foreign) { LLVMSetLinkage(g.value, LLVMExternalLinkage); LLVMSetDLLStorageClass(g.value, LLVMDLLImportStorageClass); diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 504c8234e..85a165de4 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -2387,6 +2387,29 @@ gb_internal void lb_add_attribute_to_proc_with_string(lbModule *m, LLVMValueRef } +gb_internal bool lb_apply_thread_local_model(LLVMValueRef value, String model) { + if (model != "") { + LLVMSetThreadLocal(value, true); + + LLVMThreadLocalMode mode = LLVMGeneralDynamicTLSModel; + if (model == "default") { + mode = LLVMGeneralDynamicTLSModel; + } else if (model == "localdynamic") { + mode = LLVMLocalDynamicTLSModel; + } else if (model == "initialexec") { + mode = LLVMInitialExecTLSModel; + } else if (model == "localexec") { + mode = LLVMLocalExecTLSModel; + } else { + GB_PANIC("Unhandled thread local mode %.*s", LIT(model)); + } + LLVMSetThreadLocalMode(value, mode); + return true; + } + + return false; +} + gb_internal void lb_add_edge(lbBlock *from, lbBlock *to) { LLVMValueRef instr = LLVMGetLastInstruction(from->block); @@ -2990,25 +3013,7 @@ gb_internal lbValue lb_find_value_from_entity(lbModule *m, Entity *e) { lb_set_entity_from_other_modules_linkage_correctly(other_module, e, name); - if (e->Variable.thread_local_model != "") { - LLVMSetThreadLocal(g.value, true); - - String m = e->Variable.thread_local_model; - LLVMThreadLocalMode mode = LLVMGeneralDynamicTLSModel; - if (m == "default") { - mode = LLVMGeneralDynamicTLSModel; - } else if (m == "localdynamic") { - mode = LLVMLocalDynamicTLSModel; - } else if (m == "initialexec") { - mode = LLVMInitialExecTLSModel; - } else if (m == "localexec") { - mode = LLVMLocalExecTLSModel; - } else { - GB_PANIC("Unhandled thread local mode %.*s", LIT(m)); - } - LLVMSetThreadLocalMode(g.value, mode); - } - + lb_apply_thread_local_model(g.value, e->Variable.thread_local_model); return g; } diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index 44a78b036..9b5b14626 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -2022,33 +2022,43 @@ gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) { LLVMValueRef global = LLVMAddGlobal(p->module->mod, lb_type(p->module, e->type), c_name); LLVMSetAlignment(global, cast(u32)type_align_of(e->type)); LLVMSetInitializer(global, LLVMConstNull(lb_type(p->module, e->type))); - if (value.value != nullptr) { - LLVMSetInitializer(global, value.value); - } + if (e->Variable.is_rodata) { LLVMSetGlobalConstant(global, true); } - if (e->Variable.thread_local_model != "") { - LLVMSetThreadLocal(global, true); - String m = e->Variable.thread_local_model; - LLVMThreadLocalMode mode = LLVMGeneralDynamicTLSModel; - if (m == "default") { - mode = LLVMGeneralDynamicTLSModel; - } else if (m == "localdynamic") { - mode = LLVMLocalDynamicTLSModel; - } else if (m == "initialexec") { - mode = LLVMInitialExecTLSModel; - } else if (m == "localexec") { - mode = LLVMLocalExecTLSModel; - } else { - GB_PANIC("Unhandled thread local mode %.*s", LIT(m)); - } - LLVMSetThreadLocalMode(global, mode); - } else { + if (!lb_apply_thread_local_model(global, e->Variable.thread_local_model)) { LLVMSetLinkage(global, LLVMInternalLinkage); } + if (value.value != nullptr) { + if (is_type_any(e->type)) { + Type *var_type = default_type(value.type); + + gbString var_name = gb_string_make(temporary_allocator(), "__$static_any::"); + var_name = gb_string_append_length(var_name, mangled_name.text, mangled_name.len); + + lbAddr var_global = lb_add_global_generated_with_name(p->module, var_type, value, make_string_c(var_name), nullptr); + LLVMValueRef var_global_ref = var_global.addr.value; + + if (e->Variable.is_rodata) { + LLVMSetGlobalConstant(var_global_ref, true); + } + + if (!lb_apply_thread_local_model(var_global_ref, e->Variable.thread_local_model)) { + LLVMSetLinkage(var_global_ref, LLVMInternalLinkage); + } + + LLVMValueRef vals[2] = { + lb_emit_conv(p, var_global.addr, t_rawptr).value, + lb_typeid(p->module, var_type).value, + }; + LLVMValueRef init = llvm_const_named_struct(p->module, e->type, vals, gb_count_of(vals)); + LLVMSetInitializer(global, init); + } else { + LLVMSetInitializer(global, value.value); + } + } lbValue global_val = {global, alloc_type_pointer(e->type)}; lb_add_entity(p->module, e, global_val); diff --git a/tests/internal/test_global_any.odin b/tests/internal/test_global_any.odin new file mode 100644 index 000000000..73b70e0a4 --- /dev/null +++ b/tests/internal/test_global_any.odin @@ -0,0 +1,40 @@ +package test_internal + +@(private="file") +global_any_from_proc: any = from_proc() + +from_proc :: proc() -> f32 { + return 1.1 +} + +@(private="file") +global_any: any = 1 + +import "core:testing" + +@(test) +test_global_any :: proc(t: ^testing.T) { + as_f32, is_f32 := global_any_from_proc.(f32) + testing.expect(t, is_f32 == true) + testing.expect(t, as_f32 == 1.1) + + as_int, is_int := global_any.(int) + testing.expect(t, is_int == true) + testing.expect(t, as_int == 1) +} + +@(test) +test_static_any :: proc(t: ^testing.T) { + @(static) + var: any = 3 + + as_int, is_int := var.(int) + testing.expect(t, is_int == true) + testing.expect(t, as_int == 3) + + var = f32(1.1) + + as_f32, is_f32 := var.(f32) + testing.expect(t, is_f32 == true) + testing.expect(t, as_f32 == 1.1) +} From 306d3a16c4935dbb0f68735de01773800d1bad87 Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Sat, 17 May 2025 19:40:57 +0200 Subject: [PATCH 086/120] sys/linux: Improve documentation for Dirent and related procedures --- core/sys/linux/types.odin | 2 +- core/sys/linux/wrappers.odin | 68 ++++++++++++++++++++++++++---------- 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin index b5670cf87..08e0026d3 100644 --- a/core/sys/linux/types.odin +++ b/core/sys/linux/types.odin @@ -288,7 +288,7 @@ Rename_Flags :: bit_set[Rename_Flags_Bits; u32] /* Directory entry record. - Recommended iterate these with `dirent_iterator()`, + Recommended to iterate these with `dirent_iterate_buf()`, and obtain the name via `dirent_name()`. */ Dirent :: struct { diff --git a/core/sys/linux/wrappers.odin b/core/sys/linux/wrappers.odin index 7b0dc61e2..d93928364 100644 --- a/core/sys/linux/wrappers.odin +++ b/core/sys/linux/wrappers.odin @@ -54,22 +54,45 @@ WCOREDUMP :: #force_inline proc "contextless" (s: u32) -> bool { // TODO: sigaddset etc -/// Iterate the results of getdents -/// Only iterates as much data as loaded in the buffer -/// In case you need to iterate *all* files in a directory -/// consider using dirent_get_iterate -/// -/// Example of using dirent_iterate_buf -/// // Get dirents into a buffer -/// buf: [128]u8 -/// sys.getdents(dirfd, buf[:]) -/// // Print the names of the files -/// for dir in sys.dirent_iterate_buf(buf[:], &offs) { -/// name := sys.dirent_name(dir) -/// fmt.println(name) -/// } -/// This function doesn't automatically make a request -/// for the buffer to be refilled +/* +Iterate the results of `getdents()`. + +This procedure extracts a directory entry from `buf` at the offset `offs`. +`offs` will be modified to store an offset to the possible next directory entry +in `buf`. The procedure only iterates as much data as loaded in the buffer and +does not automatically make a request for the buffer to be refilled. + +**Inputs**: +- `buf` - byte buffer with data from `getdents()` +- `offs` - offset to the next possible directory entry in `buf` + +**Returns**: +- A pointer to a directory entry in `buf`, or `nil`. +- A bool value denoting if a valid directory entry is returned. + +**Example**: + + import "core:fmt" + import "core:sys/linux" + + print_names :: proc(dirfd: linux.Fd) { + // Get dirents into a buffer. + buf: [128]u8 + // Loop until there are no more entries. + for { + written, err := linux.getdents(dirfd, buf[:]) + if err != .NONE || written == 0 { + break + } + // Print the names of the files. + offset : int + for dir in linux.dirent_iterate_buf(buf[:written], &offset) { + name := linux.dirent_name(dir) + fmt.println(name) + } + } + } +*/ dirent_iterate_buf :: proc "contextless" (buf: []u8, offs: ^int) -> (d: ^Dirent, cont: bool) { // Stopped iterating when there's no space left if offs^ >= len(buf) { @@ -82,8 +105,17 @@ dirent_iterate_buf :: proc "contextless" (buf: []u8, offs: ^int) -> (d: ^Dirent, return dirent, true } -/// Obtain the name of dirent as a string -/// The lifetime of the string is bound to the lifetime of the provided dirent structure +/* +Obtain the name of dirent as a string. + +The lifetime of the returned string is bound to the lifetime of the provided dirent structure. + +**Inputs**: +- `dirent` - directory entry + +**Returns**: +- A name of the entry +*/ dirent_name :: proc "contextless" (dirent: ^Dirent) -> string #no_bounds_check { str := ([^]u8)(&dirent.name) // Dirents are aligned to 8 bytes, so there is guaranteed to be a null From 3e5110bb46d96f5bccc86558fe7f28c0646a5343 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 May 2025 11:20:55 +0100 Subject: [PATCH 087/120] Minor style changes for sdl3 and sdl3/ttf --- vendor/sdl3/sdl3_gpu.odin | 44 ++++-- vendor/sdl3/ttf/sdl3_textengine.odin | 11 +- vendor/sdl3/ttf/sdl3_ttf.odin | 201 +++++++++++++-------------- 3 files changed, 134 insertions(+), 122 deletions(-) diff --git a/vendor/sdl3/sdl3_gpu.odin b/vendor/sdl3/sdl3_gpu.odin index ec414f98e..f0017a525 100644 --- a/vendor/sdl3/sdl3_gpu.odin +++ b/vendor/sdl3/sdl3_gpu.odin @@ -46,7 +46,7 @@ GPUIndexElementSize :: enum c.int { GPUTextureFormat :: enum c.int { INVALID, - /* Unsigned Normalized Float Color Formats */ + /* Unsigned Normalized Float Color Formats */ A8_UNORM, R8_UNORM, R8G8_UNORM, @@ -59,34 +59,41 @@ GPUTextureFormat :: enum c.int { B5G5R5A1_UNORM, B4G4R4A4_UNORM, B8G8R8A8_UNORM, - /* Compressed Unsigned Normalized Float Color Formats */ + + /* Compressed Unsigned Normalized Float Color Formats */ BC1_RGBA_UNORM, BC2_RGBA_UNORM, BC3_RGBA_UNORM, BC4_R_UNORM, BC5_RG_UNORM, BC7_RGBA_UNORM, - /* Compressed Signed Float Color Formats */ + + /* Compressed Signed Float Color Formats */ BC6H_RGB_FLOAT, - /* Compressed Unsigned Float Color Formats */ + + /* Compressed Unsigned Float Color Formats */ BC6H_RGB_UFLOAT, - /* Signed Normalized Float Color Formats */ + + /* Signed Normalized Float Color Formats */ R8_SNORM, R8G8_SNORM, R8G8B8A8_SNORM, R16_SNORM, R16G16_SNORM, R16G16B16A16_SNORM, - /* Signed Float Color Formats */ + + /* Signed Float Color Formats */ R16_FLOAT, R16G16_FLOAT, R16G16B16A16_FLOAT, R32_FLOAT, R32G32_FLOAT, R32G32B32A32_FLOAT, - /* Unsigned Float Color Formats */ + + /* Unsigned Float Color Formats */ R11G11B10_UFLOAT, - /* Unsigned Integer Color Formats */ + + /* Unsigned Integer Color Formats */ R8_UINT, R8G8_UINT, R8G8B8A8_UINT, @@ -96,7 +103,8 @@ GPUTextureFormat :: enum c.int { R32_UINT, R32G32_UINT, R32G32B32A32_UINT, - /* Signed Integer Color Formats */ + + /* Signed Integer Color Formats */ R8_INT, R8G8_INT, R8G8B8A8_INT, @@ -106,21 +114,25 @@ GPUTextureFormat :: enum c.int { R32_INT, R32G32_INT, R32G32B32A32_INT, - /* SRGB Unsigned Normalized Color Formats */ + + /* SRGB Unsigned Normalized Color Formats */ R8G8B8A8_UNORM_SRGB, B8G8R8A8_UNORM_SRGB, - /* Compressed SRGB Unsigned Normalized Color Formats */ + + /* Compressed SRGB Unsigned Normalized Color Formats */ BC1_RGBA_UNORM_SRGB, BC2_RGBA_UNORM_SRGB, BC3_RGBA_UNORM_SRGB, BC7_RGBA_UNORM_SRGB, - /* Depth Formats */ + + /* Depth Formats */ D16_UNORM, D24_UNORM, D32_FLOAT, D24_UNORM_S8_UINT, D32_FLOAT_S8_UINT, - /* Compressed ASTC Normalized Float Color Formats*/ + + /* Compressed ASTC Normalized Float Color Formats*/ ASTC_4x4_UNORM, ASTC_5x4_UNORM, ASTC_5x5_UNORM, @@ -135,7 +147,8 @@ GPUTextureFormat :: enum c.int { ASTC_10x10_UNORM, ASTC_12x10_UNORM, ASTC_12x12_UNORM, - /* Compressed SRGB ASTC Normalized Float Color Formats*/ + + /* Compressed SRGB ASTC Normalized Float Color Formats*/ ASTC_4x4_UNORM_SRGB, ASTC_5x4_UNORM_SRGB, ASTC_5x5_UNORM_SRGB, @@ -150,7 +163,8 @@ GPUTextureFormat :: enum c.int { ASTC_10x10_UNORM_SRGB, ASTC_12x10_UNORM_SRGB, ASTC_12x12_UNORM_SRGB, - /* Compressed ASTC Signed Float Color Formats*/ + + /* Compressed ASTC Signed Float Color Formats*/ ASTC_4x4_FLOAT, ASTC_5x4_FLOAT, ASTC_5x5_FLOAT, diff --git a/vendor/sdl3/ttf/sdl3_textengine.odin b/vendor/sdl3/ttf/sdl3_textengine.odin index 55e5f1c0a..00bf881dd 100644 --- a/vendor/sdl3/ttf/sdl3_textengine.odin +++ b/vendor/sdl3/ttf/sdl3_textengine.odin @@ -18,7 +18,7 @@ CopyOperation :: struct { cmd: DrawCommand, text_offset: c.int, glyph_font: ^Font, - glyph_index: SDL.Uint32, + glyph_index: u32, src: SDL.Rect, dst: SDL.Rect, reserved: rawptr, @@ -30,8 +30,7 @@ DrawOperation :: struct #raw_union { copy: CopyOperation, } -TextLayout :: struct { -} +TextLayout :: struct {} TextData :: struct { font: ^Font, @@ -41,9 +40,9 @@ TextData :: struct { x, y: c.int, w, h: c.int, num_ops: c.int, - ops: [^]DrawOperation, + ops: [^]DrawOperation `fmt:"v,num_ops"`, num_clusters: c.int, - clusters: [^]SubString, + clusters: [^]SubString `fmt:"v,num_clusters"`, props: SDL.PropertiesID, needs_engine_update: bool, engine: ^TextEngine, @@ -51,7 +50,7 @@ TextData :: struct { } TextEngine :: struct { - version: SDL.Uint32, + version: u32, userdata: rawptr, CreateText: proc "c" (userdata: rawptr, text: ^Text) -> bool, DestroyText: proc "c" (userdata: rawptr, Textext: ^Text), diff --git a/vendor/sdl3/ttf/sdl3_ttf.odin b/vendor/sdl3/ttf/sdl3_ttf.odin index d3b8d7508..9b46143e8 100644 --- a/vendor/sdl3/ttf/sdl3_ttf.odin +++ b/vendor/sdl3/ttf/sdl3_ttf.odin @@ -10,48 +10,47 @@ when ODIN_OS == .Windows { } -PROP_FONT_CREATE_FILENAME_STRING :: "SDL_ttf.font.create.filename" -PROP_FONT_CREATE_IOSTREAM_POINTER :: "SDL_ttf.font.create.iostream" -PROP_FONT_CREATE_IOSTREAM_OFFSET_NUMBER :: "SDL_ttf.font.create.iostream.offset" +PROP_FONT_CREATE_FILENAME_STRING :: "SDL_ttf.font.create.filename" +PROP_FONT_CREATE_IOSTREAM_POINTER :: "SDL_ttf.font.create.iostream" +PROP_FONT_CREATE_IOSTREAM_OFFSET_NUMBER :: "SDL_ttf.font.create.iostream.offset" PROP_FONT_CREATE_IOSTREAM_AUTOCLOSE_BOOLEAN :: "SDL_ttf.font.create.iostream.autoclose" -PROP_FONT_CREATE_SIZE_FLOAT :: "SDL_ttf.font.create.size" -PROP_FONT_CREATE_FACE_NUMBER :: "SDL_ttf.font.create.face" -PROP_FONT_CREATE_HORIZONTAL_DPI_NUMBER :: "SDL_ttf.font.create.hdpi" -PROP_FONT_CREATE_VERTICAL_DPI_NUMBER :: "SDL_ttf.font.create.vdpi" -PROP_FONT_CREATE_EXISTING_FONT :: "SDL_ttf.font.create.existing_font" +PROP_FONT_CREATE_SIZE_FLOAT :: "SDL_ttf.font.create.size" +PROP_FONT_CREATE_FACE_NUMBER :: "SDL_ttf.font.create.face" +PROP_FONT_CREATE_HORIZONTAL_DPI_NUMBER :: "SDL_ttf.font.create.hdpi" +PROP_FONT_CREATE_VERTICAL_DPI_NUMBER :: "SDL_ttf.font.create.vdpi" +PROP_FONT_CREATE_EXISTING_FONT :: "SDL_ttf.font.create.existing_font" -FONT_WEIGHT_THIN :: 100 /**< Thin (100) named font weight value */ +FONT_WEIGHT_THIN :: 100 /**< Thin (100) named font weight value */ FONT_WEIGHT_EXTRA_LIGHT :: 200 /**< ExtraLight (200) named font weight value */ -FONT_WEIGHT_LIGHT :: 300 /**< Light (300) named font weight value */ -FONT_WEIGHT_NORMAL :: 400 /**< Normal (400) named font weight value */ -FONT_WEIGHT_MEDIUM :: 500 /**< Medium (500) named font weight value */ -FONT_WEIGHT_SEMI_BOLD :: 600 /**< SemiBold (600) named font weight value */ -FONT_WEIGHT_BOLD :: 700 /**< Bold (700) named font weight value */ -FONT_WEIGHT_EXTRA_BOLD :: 800 /**< ExtraBold (800) named font weight value */ -FONT_WEIGHT_BLACK :: 900 /**< Black (900) named font weight value */ +FONT_WEIGHT_LIGHT :: 300 /**< Light (300) named font weight value */ +FONT_WEIGHT_NORMAL :: 400 /**< Normal (400) named font weight value */ +FONT_WEIGHT_MEDIUM :: 500 /**< Medium (500) named font weight value */ +FONT_WEIGHT_SEMI_BOLD :: 600 /**< SemiBold (600) named font weight value */ +FONT_WEIGHT_BOLD :: 700 /**< Bold (700) named font weight value */ +FONT_WEIGHT_EXTRA_BOLD :: 800 /**< ExtraBold (800) named font weight value */ +FONT_WEIGHT_BLACK :: 900 /**< Black (900) named font weight value */ FONT_WEIGHT_EXTRA_BLACK :: 950 /**< ExtraBlack (950) named font weight value */ -PROP_RENDERER_TEXT_ENGINE_RENDERER :: "SDL_ttf.renderer_text_engine.create.renderer" +PROP_RENDERER_TEXT_ENGINE_RENDERER :: "SDL_ttf.renderer_text_engine.create.renderer" PROP_RENDERER_TEXT_ENGINE_ATLAS_TEXTURE_SIZE :: "SDL_ttf.renderer_text_engine.create.atlas_texture_size" -PROP_GPU_TEXT_ENGINE_DEVICE :: "SDL_ttf.gpu_text_engine.create.device" +PROP_GPU_TEXT_ENGINE_DEVICE :: "SDL_ttf.gpu_text_engine.create.device" PROP_GPU_TEXT_ENGINE_ATLAS_TEXTURE_SIZE :: "SDL_ttf.gpu_text_engine.create.atlas_texture_size" MAJOR_VERSION :: 3 MINOR_VERSION :: 2 -PATCHLEVEL :: 2 +PATCHLEVEL :: 2 -Font :: struct { -} +Font :: struct {} Text :: struct { - text: ^c.char, + text: [^]u8, num_lines: c.int, refcount: c.int, internal: ^TextData, } -FontStyle :: enum SDL.Uint32 { +FontStyle :: enum u32 { NORMAL, BOLD, ITALIC, @@ -59,7 +58,7 @@ FontStyle :: enum SDL.Uint32 { STRIKETHROUGH, } -FontStyleFlags :: bit_set[FontStyle;SDL.Uint32] +FontStyleFlags :: distinct bit_set[FontStyle; u32] // NOTE: This is called TTF_HintingFlags but its not a bit_set so // the "flags" doesnt really make sense, its just the hinting. @@ -96,21 +95,21 @@ ImageType :: enum c.int { GPUAtlasDrawSequence :: struct { atlas_texture: ^SDL.GPUTexture, - xy, uv: [^]SDL.FPoint, + xy, uv: [^]SDL.FPoint `fmt:"v,num_vertices"`, num_vertices: c.int, - indices: [^]c.int, + indices: [^]c.int `fmt:"v,num_indices"`, num_indices: c.int, image_type: ImageType, next: ^GPUAtlasDrawSequence, } GPUTextEngineWinding :: enum c.int { - INVALID = -1, - CLOCKWISE, - COUNTER_CLOCKWISE, + INVALID = -1, + CLOCKWISE = 0, + COUNTER_CLOCKWISE = +1, } -SubStringFlags :: bit_field SDL.Uint32 { +SubStringFlags :: bit_field u32 { direction: u8 | 8, text_start: bool | 1, line_start: bool | 1, @@ -125,31 +124,31 @@ SubString :: struct { rect: SDL.Rect, } -@(default_calling_convention = "c", link_prefix = "TTF_", require_results) +@(default_calling_convention="c", link_prefix="TTF_", require_results) foreign lib { - Version :: proc() -> c.int --- + Version :: proc() -> c.int --- GetFreeTypeVersion :: proc(major, minor, patch: ^c.int) --- GetHarfBuzzVersion :: proc(major, minor, patch: ^c.int) --- Init :: proc() -> bool --- - OpenFont :: proc(file: cstring, ptsize: f32) -> ^Font --- - OpenFontIO :: proc(src: ^SDL.IOStream, closeio: bool, ptsize: f32) -> ^Font --- + OpenFont :: proc(file: cstring, ptsize: f32) -> ^Font --- + OpenFontIO :: proc(src: ^SDL.IOStream, closeio: bool, ptsize: f32) -> ^Font --- OpenFontWithProperties :: proc(props: SDL.PropertiesID) -> ^Font --- CopyFont :: proc(existing_font: ^Font) -> ^Font --- GetFontProperties :: proc(font: ^Font) -> SDL.PropertiesID --- - GetFontGeneration :: proc(font: ^Font) -> SDL.Uint32 --- + GetFontGeneration :: proc(font: ^Font) -> u32 --- - AddFallbackFont :: proc(font: ^Font, fallback: ^Font) -> bool --- + AddFallbackFont :: proc(font: ^Font, fallback: ^Font) -> bool --- RemoveFallbackFont :: proc(font: ^Font, fallback: ^Font) --- ClearFallbackFonts :: proc(font: ^Font) --- - SetFontSize :: proc(font: ^Font, ptsize: f32) -> bool --- + SetFontSize :: proc(font: ^Font, ptsize: f32) -> bool --- SetFontSizeDPI :: proc(font: ^Font, ptsize: f32, hdpi: c.int, vdpi: c.int) -> bool --- - GetFontSize :: proc(font: ^Font) -> f32 --- - GetFontDPI :: proc(font: ^Font, hdpi: ^c.int, vdpi: ^c.int) -> bool --- + GetFontSize :: proc(font: ^Font) -> f32 --- + GetFontDPI :: proc(font: ^Font, hdpi: ^c.int, vdpi: ^c.int) -> bool --- SetFontStyle :: proc(font: ^Font, style: FontStyleFlags) --- GetFontStyle :: proc(#by_ptr font: Font) -> FontStyleFlags --- @@ -189,92 +188,92 @@ foreign lib { SetFontDirection :: proc(font: ^Font, direction: Direction) -> bool --- GetFontDirection :: proc(#by_ptr font: Font) -> Direction --- - StringToTag :: proc(string: cstring) -> SDL.Uint32 --- - TagToString :: proc(tag: SDL.Uint32, string: [^]c.char, size: c.size_t) --- + StringToTag :: proc(string: cstring) -> u32 --- + TagToString :: proc(tag: u32, string: [^]c.char, size: c.size_t) --- - SetFontScript :: proc(font: ^Font, script: SDL.Uint32) -> bool --- - GetFontScript :: proc(font: ^Font) -> SDL.Uint32 --- + SetFontScript :: proc(font: ^Font, script: u32) -> bool --- + GetFontScript :: proc(font: ^Font) -> u32 --- SetFontLanguage :: proc(font: ^Font, language_bcp47: cstring) -> bool --- - GetGlyphScript :: proc(ch: SDL.Uint32) -> SDL.Uint32 --- - FontHasGlyph :: proc(font: ^Font, ch: SDL.Uint32) -> bool --- - GetGlyphImage :: proc(font: ^Font, ch: SDL.Uint32, image_type: ^ImageType) -> ^SDL.Surface --- - GetGlyphImageForIndex :: proc(font: ^Font, glyph_index: SDL.Uint32, image_type: ^ImageType) -> ^SDL.Surface --- - GetGlyphMetrics :: proc(font: ^Font, ch: SDL.Uint32, minx, maxx, miny, maxy, advance: ^c.int) -> bool --- - GetGlyphKerning :: proc(font: ^Font, previous_ch: SDL.Uint32, ch: SDL.Uint32, kerning: ^c.int) -> bool --- + GetGlyphScript :: proc(ch: u32) -> u32 --- + FontHasGlyph :: proc(font: ^Font, ch: u32) -> bool --- + GetGlyphImage :: proc(font: ^Font, ch: u32, image_type: ^ImageType) -> ^SDL.Surface --- + GetGlyphImageForIndex :: proc(font: ^Font, glyph_index: u32, image_type: ^ImageType) -> ^SDL.Surface --- + GetGlyphMetrics :: proc(font: ^Font, ch: u32, minx, maxx, miny, maxy, advance: ^c.int) -> bool --- + GetGlyphKerning :: proc(font: ^Font, previous_ch: u32, ch: u32, kerning: ^c.int) -> bool --- - GetStringSize :: proc(font: ^Font, text: cstring, length: c.size_t, w, h: ^c.int) -> bool --- + GetStringSize :: proc(font: ^Font, text: cstring, length: c.size_t, w, h: ^c.int) -> bool --- GetStringSizeWrapped :: proc(font: ^Font, text: cstring, length: c.size_t, wrap_width: c.int, w, h: ^c.int) -> bool --- - MeasureString :: proc(font: ^Font, text: cstring, length: c.size_t, max_width: c.int, measured_width: ^c.int, measured_length: ^c.size_t) -> bool --- + MeasureString :: proc(font: ^Font, text: cstring, length: c.size_t, max_width: c.int, measured_width: ^c.int, measured_length: ^c.size_t) -> bool --- - RenderText_Solid :: proc(font: ^Font, text: cstring, length: c.size_t, fg: SDL.Color) -> ^SDL.Surface --- - RenderText_Solid_Wrapped :: proc(font: ^Font, text: cstring, length: c.size_t, fg: SDL.Color, wrap_Length: c.int) -> ^SDL.Surface --- - RenderGylph_Solid :: proc(font: ^Font, ch: SDL.Uint32, fg: SDL.Color) -> ^SDL.Surface --- - RenderText_Shaded :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color) -> ^SDL.Surface --- - RenderText_Shaded_Wrapped :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color, wrap_width: c.int) -> ^SDL.Surface --- - RenderGlyph_Shaded :: proc(font: ^Font, ch: SDL.Uint32, fg, bg: SDL.Color) -> ^SDL.Surface --- - RenderText_Blended :: proc(font: ^Font, text: cstring, length: c.size_t, fg: SDL.Color) -> ^SDL.Surface --- + RenderText_Solid :: proc(font: ^Font, text: cstring, length: c.size_t, fg: SDL.Color) -> ^SDL.Surface --- + RenderText_Solid_Wrapped :: proc(font: ^Font, text: cstring, length: c.size_t, fg: SDL.Color, wrap_Length: c.int) -> ^SDL.Surface --- + RenderGylph_Solid :: proc(font: ^Font, ch: u32, fg: SDL.Color) -> ^SDL.Surface --- + RenderText_Shaded :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color) -> ^SDL.Surface --- + RenderText_Shaded_Wrapped :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color, wrap_width: c.int) -> ^SDL.Surface --- + RenderGlyph_Shaded :: proc(font: ^Font, ch: u32, fg, bg: SDL.Color) -> ^SDL.Surface --- + RenderText_Blended :: proc(font: ^Font, text: cstring, length: c.size_t, fg: SDL.Color) -> ^SDL.Surface --- RnederText_Blended_Wrapped :: proc(font: ^Font, text: cstring, length: c.size_t, fg: SDL.Color, wrap_width: c.int) -> ^SDL.Surface --- - RenderGlyph_Blended :: proc(font: ^Font, ch: SDL.Uint32, fg: SDL.Color) -> ^SDL.Surface --- - RenderText_LCD :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color) -> ^SDL.Surface --- - RenderText_LCD_Wrapped :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color, wrap_width: c.int) -> ^SDL.Surface --- - RenderGlyph_LCD :: proc(font: ^Font, ch: SDL.Uint32, fg, bg: SDL.Color) -> ^SDL.Surface --- + RenderGlyph_Blended :: proc(font: ^Font, ch: u32, fg: SDL.Color) -> ^SDL.Surface --- + RenderText_LCD :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color) -> ^SDL.Surface --- + RenderText_LCD_Wrapped :: proc(font: ^Font, text: cstring, length: c.size_t, fg, bg: SDL.Color, wrap_width: c.int) -> ^SDL.Surface --- + RenderGlyph_LCD :: proc(font: ^Font, ch: u32, fg, bg: SDL.Color) -> ^SDL.Surface --- - CreateSurfaceTextEngine :: proc() -> ^TextEngine --- - DrawSurfaceText :: proc(text: ^Text, x, y: int, surface: ^SDL.Surface) -> bool --- + CreateSurfaceTextEngine :: proc() -> ^TextEngine --- + DrawSurfaceText :: proc(text: ^Text, x, y: c.int, surface: ^SDL.Surface) -> bool --- DestroySurfaceTextEngine :: proc(engine: ^TextEngine) --- - CreateRendererTextEngine :: proc(renderer: ^SDL.Renderer) -> ^TextEngine --- + CreateRendererTextEngine :: proc(renderer: ^SDL.Renderer) -> ^TextEngine --- CreateRendererTextEngineWithProperties :: proc(props: SDL.PropertiesID) -> ^TextEngine --- - DrawRendererText :: proc(text: ^Text, x, y: f32) -> bool --- - DestroyRendererTextEngine :: proc(engine: ^TextEngine) --- + DrawRendererText :: proc(text: ^Text, x, y: f32) -> bool --- + DestroyRendererTextEngine :: proc(engine: ^TextEngine) --- - CreateGPUTextEngine :: proc(device: ^SDL.GPUDevice) -> ^TextEngine --- + CreateGPUTextEngine :: proc(device: ^SDL.GPUDevice) -> ^TextEngine --- CreateGPUTextEngineWithProperties :: proc(props: SDL.PropertiesID) -> ^TextEngine --- - GetGPUTextDrawData :: proc(text: ^Text) -> ^GPUAtlasDrawSequence --- - DestroyGPUTextEngine :: proc(engine: ^TextEngine) --- - SetGPUTextEngineWinding :: proc(engine: ^TextEngine, winding: GPUTextEngineWinding) --- - GetGPUTextEngineWinding :: proc(#by_ptr engine: TextEngine) -> GPUTextEngineWinding --- + GetGPUTextDrawData :: proc(text: ^Text) -> ^GPUAtlasDrawSequence --- + DestroyGPUTextEngine :: proc(engine: ^TextEngine) --- + SetGPUTextEngineWinding :: proc(engine: ^TextEngine, winding: GPUTextEngineWinding) --- + GetGPUTextEngineWinding :: proc(#by_ptr engine: TextEngine) -> GPUTextEngineWinding --- - CreateText :: proc(engine: ^TextEngine, font: ^Font, text: cstring, length: c.size_t) -> ^Text --- - GetTextProperties :: proc(text: ^Text) -> SDL.PropertiesID --- - SetTextEngine :: proc(text: ^Text, engine: ^TextEngine) -> bool --- - GetTextEngine :: proc(text: ^Text) -> ^TextEngine --- - SetTextFont :: proc(text: ^Text, font: ^Font) -> bool --- - GetTextFont :: proc(text: ^Text) -> ^Font --- - SetTextDirection :: proc(text: ^Text, direction: Direction) -> bool --- - GetTextDirection :: proc(text: ^Text) -> Direction --- - SetTextScript :: proc(text: ^Text, script: SDL.Uint32) -> bool --- - GetTextScript :: proc(text: ^Text) -> SDL.Uint32 --- - SetTextColor :: proc(text: ^Text, r, g, b, a: SDL.Uint8) -> bool --- - SetTextColorFloat :: proc(text: ^Text, r, g, b, a: f32) -> bool --- - GetTextColor :: proc(text: ^Text, r, g, b, a: ^SDL.Uint8) -> bool --- - GetTextColorFloat :: proc(text: ^Text, r, g, b, a: ^f32) -> bool --- - SetTextPosition :: proc(text: ^Text, x, y: c.int) -> bool --- - GetTextPosition :: proc(text: ^Text, x, y: ^c.int) -> bool --- - SetTextWrapWidth :: proc(text: ^Text, wrap_width: c.int) -> bool --- - GetTextWrapWidth :: proc(text: ^Text, wrap_width: ^c.int) -> bool --- + CreateText :: proc(engine: ^TextEngine, font: ^Font, text: cstring, length: c.size_t) -> ^Text --- + GetTextProperties :: proc(text: ^Text) -> SDL.PropertiesID --- + SetTextEngine :: proc(text: ^Text, engine: ^TextEngine) -> bool --- + GetTextEngine :: proc(text: ^Text) -> ^TextEngine --- + SetTextFont :: proc(text: ^Text, font: ^Font) -> bool --- + GetTextFont :: proc(text: ^Text) -> ^Font --- + SetTextDirection :: proc(text: ^Text, direction: Direction) -> bool --- + GetTextDirection :: proc(text: ^Text) -> Direction --- + SetTextScript :: proc(text: ^Text, script: u32) -> bool --- + GetTextScript :: proc(text: ^Text) -> u32 --- + SetTextColor :: proc(text: ^Text, r, g, b, a: u8) -> bool --- + SetTextColorFloat :: proc(text: ^Text, r, g, b, a: f32) -> bool --- + GetTextColor :: proc(text: ^Text, r, g, b, a: ^u8) -> bool --- + GetTextColorFloat :: proc(text: ^Text, r, g, b, a: ^f32) -> bool --- + SetTextPosition :: proc(text: ^Text, x, y: c.int) -> bool --- + GetTextPosition :: proc(text: ^Text, x, y: ^c.int) -> bool --- + SetTextWrapWidth :: proc(text: ^Text, wrap_width: c.int) -> bool --- + GetTextWrapWidth :: proc(text: ^Text, wrap_width: ^c.int) -> bool --- SetTextWrapWhitespaceVisible :: proc(text: ^Text, visible: bool) -> bool --- - TextWrapWhitespaceVisible :: proc(text: ^Text) -> bool --- + TextWrapWhitespaceVisible :: proc(text: ^Text) -> bool --- - SetTextString :: proc(text: ^Text, string: cstring, length: c.size_t) -> bool --- + SetTextString :: proc(text: ^Text, string: cstring, length: c.size_t) -> bool --- InsertTextString :: proc(text: ^Text, offset: c.int, string: cstring, length: c.size_t) -> bool --- AppendTextString :: proc(text: ^Text, string: cstring, length: c.size_t) -> bool --- DeleteTextString :: proc(text: ^Text, offset, length: c.int) -> bool --- GetTextSize :: proc(text: ^Text, w, h: ^c.int) -> bool --- - GetTextSubString :: proc(text: ^Text, offset: c.int, substring: ^SubString) -> bool --- - GetTextSubStringForLine :: proc(text: ^Text, line: c.int, substring: ^SubString) -> bool --- + GetTextSubString :: proc(text: ^Text, offset: c.int, substring: ^SubString) -> bool --- + GetTextSubStringForLine :: proc(text: ^Text, line: c.int, substring: ^SubString) -> bool --- GetTextSubStringsForRange :: proc(text: ^Text, offset, length: c.int, count: ^c.int) -> [^]^SubString --- - GetTextSubStringForPoint :: proc(text: ^Text, x, y: c.int, substring: ^SubString) -> bool --- - GetPreviousTextSubString :: proc(text: ^Text, #by_ptr substring: SubString, previous: ^SubString) -> bool --- - GetNextTextSubString :: proc(text: ^Text, #by_ptr substring: SubString, next: ^SubString) -> bool --- + GetTextSubStringForPoint :: proc(text: ^Text, x, y: c.int, substring: ^SubString) -> bool --- + GetPreviousTextSubString :: proc(text: ^Text, #by_ptr substring: SubString, previous: ^SubString) -> bool --- + GetNextTextSubString :: proc(text: ^Text, #by_ptr substring: SubString, next: ^SubString) -> bool --- - UpdateText :: proc(text: ^Text) -> bool --- + UpdateText :: proc(text: ^Text) -> bool --- DestroyText :: proc(text: ^Text) --- - CloseFont :: proc(font: ^Font) --- - Quit :: proc() --- - WasInit :: proc() -> c.int --- + CloseFont :: proc(font: ^Font) --- + Quit :: proc() --- + WasInit :: proc() -> c.int --- } From 1b13152286bf6e2127808929651753fd2bafd5ba Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sun, 18 May 2025 15:08:10 +0200 Subject: [PATCH 088/120] Change XAudio2 DLL search flags to DEFAULT_DIRS --- vendor/windows/XAudio2/xaudio2.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/windows/XAudio2/xaudio2.odin b/vendor/windows/XAudio2/xaudio2.odin index 178463b64..078ec4095 100644 --- a/vendor/windows/XAudio2/xaudio2.odin +++ b/vendor/windows/XAudio2/xaudio2.odin @@ -724,7 +724,7 @@ Create :: proc "stdcall" (ppXAudio2: ^^IXAudio2, Flags: FLAGS = {}, XAudio2Proce create_info: CreateInfoFunc if dll_Instance == nil { - dll_Instance = win.LoadLibraryExW(win.L("xaudio2_9.dll"), nil, {.LOAD_LIBRARY_SEARCH_SYSTEM32}) + dll_Instance = win.LoadLibraryExW(win.L("xaudio2_9.dll"), nil, {.LOAD_LIBRARY_SEARCH_DEFAULT_DIRS}) if dll_Instance == nil { return HRESULT(win.GetLastError()) } From 3519cecb7c59d0e803369464e555c0c38f9b1268 Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Sun, 18 May 2025 15:25:17 +0200 Subject: [PATCH 089/120] Formatting fixes --- core/sys/linux/wrappers.odin | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/sys/linux/wrappers.odin b/core/sys/linux/wrappers.odin index d93928364..53eb80f86 100644 --- a/core/sys/linux/wrappers.odin +++ b/core/sys/linux/wrappers.odin @@ -62,15 +62,15 @@ This procedure extracts a directory entry from `buf` at the offset `offs`. in `buf`. The procedure only iterates as much data as loaded in the buffer and does not automatically make a request for the buffer to be refilled. -**Inputs**: -- `buf` - byte buffer with data from `getdents()` -- `offs` - offset to the next possible directory entry in `buf` +Inputs: +- buf: A byte buffer with data from `getdents()` +- offs: An offset to the next possible directory entry in `buf` -**Returns**: -- A pointer to a directory entry in `buf`, or `nil`. -- A bool value denoting if a valid directory entry is returned. +Returns: +- A pointer to a directory entry in `buf`, or `nil` +- A bool value denoting if a valid directory entry is returned -**Example**: +Example: import "core:fmt" import "core:sys/linux" @@ -110,10 +110,10 @@ Obtain the name of dirent as a string. The lifetime of the returned string is bound to the lifetime of the provided dirent structure. -**Inputs**: -- `dirent` - directory entry +Inputs: +- dirent: A directory entry -**Returns**: +Returns: - A name of the entry */ dirent_name :: proc "contextless" (dirent: ^Dirent) -> string #no_bounds_check { From 591118c68804bf89b9ee3d371b14c54133f4655c Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Sun, 18 May 2025 10:51:08 -0400 Subject: [PATCH 090/120] Use `--sysroot` instead of `-Wl,-syslibroot` on Darwin This keeps the linker from using the wrong SDK and mirrors how we build the Odin compiler itself in `build_odin.sh`. --- src/linker.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/linker.cpp b/src/linker.cpp index ec165ef7d..087bb49f1 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -769,7 +769,17 @@ try_cross_linking:; gbString platform_lib_str = gb_string_make(heap_allocator(), ""); defer (gb_string_free(platform_lib_str)); if (build_context.metrics.os == TargetOs_darwin) { - platform_lib_str = gb_string_appendc(platform_lib_str, "-Wl,-syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -L/usr/local/lib "); + // Get the MacOSX SDK path. + gbString darwin_sdk_path = gb_string_make(temporary_allocator(), ""); + if (!system_exec_command_line_app_output("xcrun --sdk macosx --show-sdk-path", &darwin_sdk_path)) { + darwin_sdk_path = gb_string_set(darwin_sdk_path, "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"); + } else { + // Trim the trailing newline. + darwin_sdk_path = gb_string_trim_space(darwin_sdk_path); + } + platform_lib_str = gb_string_append_fmt(platform_lib_str, "--sysroot %s ", darwin_sdk_path); + + platform_lib_str = gb_string_appendc(platform_lib_str, "-L/usr/local/lib "); // Homebrew's default library path, checking if it exists to avoid linking warnings. if (gb_file_exists("/opt/homebrew/lib")) { From eb051a2d7c0ddfa1b28d22ba5466ea973eb0e40d Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Sun, 18 May 2025 17:13:39 -0400 Subject: [PATCH 091/120] Re-enable static map calls on AMD64 SysV --- src/build_settings.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index c941e0f68..04101761c 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -1915,12 +1915,6 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta } - // TODO: Static map calls are bugged on `amd64sysv` abi. - if (bc->metrics.os != TargetOs_windows && bc->metrics.arch == TargetArch_amd64) { - // ENFORCE DYNAMIC MAP CALLS - bc->dynamic_map_calls = true; - } - bc->ODIN_VALGRIND_SUPPORT = false; if (build_context.metrics.os != TargetOs_windows) { switch (bc->metrics.arch) { From e8d52ac2bcbc0b618b079df1c04316c018cfb333 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 19 May 2025 07:15:36 -0400 Subject: [PATCH 092/120] Make `odin help` more precise about what it accepts --- src/main.cpp | 65 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index b2cfbe018..d8b866e83 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2221,20 +2221,30 @@ gb_internal void remove_temp_files(lbGenerator *gen) { } -gb_internal void print_show_help(String const arg0, String command, String optional_flag = {}) { +gb_internal int print_show_help(String const arg0, String command, String optional_flag = {}) { + bool help_resolved = false; + bool printed_usage_header = false; + bool printed_flags_header = false; + if (command == "help" && optional_flag.len != 0 && optional_flag[0] != '-') { command = optional_flag; optional_flag = {}; } - print_usage_line(0, "%.*s is a tool for managing Odin source code.", LIT(arg0)); - print_usage_line(0, "Usage:"); - print_usage_line(1, "%.*s %.*s [arguments]", LIT(arg0), LIT(command)); - print_usage_line(0, ""); - defer (print_usage_line(0, "")); - + auto const print_usage_header_once = [&help_resolved, &printed_usage_header, arg0, command]() { + if (printed_usage_header) { + return; + } + print_usage_line(0, "%.*s is a tool for managing Odin source code.", LIT(arg0)); + print_usage_line(0, "Usage:"); + print_usage_line(1, "%.*s %.*s [arguments]", LIT(arg0), LIT(command)); + print_usage_line(0, ""); + help_resolved = true; + printed_usage_header = true; + }; if (command == "build") { + print_usage_header_once(); print_usage_line(1, "build Compiles directory of .odin files as an executable."); print_usage_line(2, "One must contain the program's entry point, all must be in the same package."); print_usage_line(2, "Use `-file` to build a single file instead."); @@ -2243,6 +2253,7 @@ gb_internal void print_show_help(String const arg0, String command, String optio print_usage_line(3, "odin build

Builds package in ."); print_usage_line(3, "odin build filename.odin -file Builds single-file package, must contain entry point."); } else if (command == "run") { + print_usage_header_once(); print_usage_line(1, "run Same as 'build', but also then runs the newly compiled executable."); print_usage_line(2, "Append an empty flag and then the args, '-- ', to specify args for the output."); print_usage_line(2, "Examples:"); @@ -2250,25 +2261,31 @@ gb_internal void print_show_help(String const arg0, String command, String optio print_usage_line(3, "odin run Builds and runs package in ."); print_usage_line(3, "odin run filename.odin -file Builds and runs single-file package, must contain entry point."); } else if (command == "check") { + print_usage_header_once(); print_usage_line(1, "check Parses and type checks directory of .odin files."); print_usage_line(2, "Examples:"); print_usage_line(3, "odin check . Type checks package in current directory."); print_usage_line(3, "odin check Type checks package in ."); print_usage_line(3, "odin check filename.odin -file Type checks single-file package, must contain entry point."); } else if (command == "test") { + print_usage_header_once(); print_usage_line(1, "test Builds and runs procedures with the attribute @(test) in the initial package."); } else if (command == "doc") { + print_usage_header_once(); print_usage_line(1, "doc Generates documentation from a directory of .odin files."); print_usage_line(2, "Examples:"); print_usage_line(3, "odin doc . Generates documentation on package in current directory."); print_usage_line(3, "odin doc Generates documentation on package in ."); print_usage_line(3, "odin doc filename.odin -file Generates documentation on single-file package."); } else if (command == "version") { + print_usage_header_once(); print_usage_line(1, "version Prints version."); } else if (command == "strip-semicolon") { + print_usage_header_once(); print_usage_line(1, "strip-semicolon"); print_usage_line(2, "Parses and type checks .odin file(s) and then removes unneeded semicolons from the entire project."); } else if (command == "bundle") { + print_usage_header_once(); print_usage_line(1, "bundle Bundles a directory in a specific layout for that platform"); print_usage_line(2, "Supported platforms:"); print_usage_line(3, "android"); @@ -2293,13 +2310,10 @@ gb_internal void print_show_help(String const arg0, String command, String optio check = true; } - print_usage_line(0, ""); - print_usage_line(1, "Flags"); - print_usage_line(0, ""); - auto const print_flag = [&optional_flag](char const *flag) -> bool { + auto const print_flag = [&optional_flag, &help_resolved, &printed_flags_header, print_usage_header_once](char const *flag) -> bool { if (optional_flag.len != 0) { String f = make_string_c(flag); isize i = string_index_byte(f, ':'); @@ -2310,6 +2324,14 @@ gb_internal void print_show_help(String const arg0, String command, String optio return false; } } + print_usage_header_once(); + if (!printed_flags_header) { + print_usage_line(0, ""); + print_usage_line(1, "Flags"); + print_usage_line(0, ""); + printed_flags_header = true; + } + help_resolved = true; print_usage_line(0, ""); print_usage_line(1, flag); return true; @@ -2867,6 +2889,21 @@ gb_internal void print_show_help(String const arg0, String command, String optio print_usage_line(2, "If this is omitted, the terminal will prompt you to provide it."); } } + + if (!help_resolved) { + usage(arg0); + print_usage_line(0, ""); + if (command == "help") { + print_usage_line(0, "'%.*s' is not a recognized flag.", LIT(optional_flag)); + } else { + print_usage_line(0, "'%.*s' is not a recognized command.", LIT(command)); + } + return 1; + } + + print_usage_line(0, ""); + + return 0; } gb_internal void print_show_unused(Checker *c) { @@ -3354,8 +3391,7 @@ int main(int arg_count, char const **arg_ptr) { usage(args[0]); return 1; } else { - print_show_help(args[0], args[1], args[2]); - return 0; + return print_show_help(args[0], args[1], args[2]); } } else if (command == "bundle") { if (args.count < 4) { @@ -3441,8 +3477,7 @@ int main(int arg_count, char const **arg_ptr) { } if (build_context.show_help) { - print_show_help(args[0], command); - return 0; + return print_show_help(args[0], command); } if (command == "bundle") { From fa63d351acea69ecb6a1cb1b127a12e17538124d Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 19 May 2025 07:19:28 -0400 Subject: [PATCH 093/120] Add missing commands to `odin help` --- src/main.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index d8b866e83..818e5b60e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2289,6 +2289,12 @@ gb_internal int print_show_help(String const arg0, String command, String option print_usage_line(1, "bundle Bundles a directory in a specific layout for that platform"); print_usage_line(2, "Supported platforms:"); print_usage_line(3, "android"); + } else if (command == "report") { + print_usage_header_once(); + print_usage_line(1, "report Prints information useful to reporting a bug."); + } else if (command == "root") { + print_usage_header_once(); + print_usage_line(1, "root Prints the root path where Odin looks for the builtin collections."); } bool doc = command == "doc"; From a5926532a2316340e6ceed7d8a7fee2b02fde7b7 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 19 May 2025 07:22:47 -0400 Subject: [PATCH 094/120] Sync command descriptions between `odin help` and usage --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 818e5b60e..f64575cac 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -278,10 +278,10 @@ gb_internal void usage(String argv0, String argv1 = {}) { print_usage_line(1, " One must contain the program's entry point, all must be in the same package."); print_usage_line(1, "run Same as 'build', but also then runs the newly compiled executable."); print_usage_line(1, "bundle Bundles a directory in a specific layout for that platform."); - print_usage_line(1, "check Parses, and type checks a directory of .odin files."); + print_usage_line(1, "check Parses and type checks a directory of .odin files."); print_usage_line(1, "strip-semicolon Parses, type checks, and removes unneeded semicolons from the entire program."); print_usage_line(1, "test Builds and runs procedures with the attribute @(test) in the initial package."); - print_usage_line(1, "doc Generates documentation on a directory of .odin files."); + print_usage_line(1, "doc Generates documentation from a directory of .odin files."); print_usage_line(1, "version Prints version."); print_usage_line(1, "report Prints information useful to reporting a bug."); print_usage_line(1, "root Prints the root path where Odin looks for the builtin collections."); From 4495a4c58ed73c7b6c4b552855537ead65cd93d3 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 19 May 2025 09:25:18 -0400 Subject: [PATCH 095/120] Check for `-help` sooner and show it immediately --- src/main.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f64575cac..d32ae9c28 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3282,6 +3282,16 @@ int main(int arg_count, char const **arg_ptr) { String run_args_string = {}; isize last_non_run_arg = args.count; + for_array(i, args) { + if (args[i] == "--") { + break; + } + if (args[i] == "-help" || args[i] == "--help") { + build_context.show_help = true; + return print_show_help(args[0], command); + } + } + bool run_output = false; if (command == "run" || command == "test") { if (args.count < 3) { @@ -3428,11 +3438,6 @@ int main(int arg_count, char const **arg_ptr) { init_filename = copy_string(permanent_allocator(), init_filename); - if (init_filename == "-help" || - init_filename == "--help") { - build_context.show_help = true; - } - if (init_filename.len > 0 && !build_context.show_help) { // The command must be build, run, test, check, or another that takes a directory or filename. if (!path_is_directory(init_filename)) { From 2c25a72b45b9047862535aeb9b069292eba8a6e4 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 19 May 2025 09:26:57 -0400 Subject: [PATCH 096/120] Make certain commands fail if passed excess arguments --- src/main.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index d32ae9c28..00032c1ff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3385,6 +3385,10 @@ int main(int arg_count, char const **arg_ptr) { return 1; #endif } else if (command == "version") { + if (args.count != 2) { + usage(args[0]); + return 1; + } build_context.command_kind = Command_version; gb_printf("%.*s version %.*s", LIT(args[0]), LIT(ODIN_VERSION)); @@ -3399,6 +3403,10 @@ int main(int arg_count, char const **arg_ptr) { gb_printf("\n"); return 0; } else if (command == "report") { + if (args.count != 2) { + usage(args[0]); + return 1; + } build_context.command_kind = Command_bug_report; print_bug_report_help(); return 0; @@ -3423,6 +3431,10 @@ int main(int arg_count, char const **arg_ptr) { } init_filename = args[3]; } else if (command == "root") { + if (args.count != 2) { + usage(args[0]); + return 1; + } gb_printf("%.*s", LIT(odin_root_dir())); return 0; } else if (command == "clear-cache") { From ab9593250295137d0a654e942965feee7f506206 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Mon, 19 May 2025 20:44:27 +0200 Subject: [PATCH 097/120] -dynamic-literals --- src/build_settings.cpp | 1 + src/check_expr.cpp | 2 +- src/llvm_backend_expr.cpp | 2 +- src/main.cpp | 5 +++++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 04101761c..8364bbfbe 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -459,6 +459,7 @@ struct BuildContext { bool ignore_unknown_attributes; bool no_bounds_check; bool no_type_assert; + bool dynamic_literals; // Opt-in to `#+feature dynamic-literals` project-wide. bool no_output_files; bool no_crt; bool no_rpath; diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 7ccca1b57..167052772 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -9433,7 +9433,7 @@ gb_internal bool is_expr_inferred_fixed_array(Ast *type_expr) { } gb_internal bool check_for_dynamic_literals(CheckerContext *c, Ast *node, AstCompoundLit *cl) { - if (cl->elems.count > 0 && (check_feature_flags(c, node) & OptInFeatureFlag_DynamicLiterals) == 0) { + if (cl->elems.count > 0 && (check_feature_flags(c, node) & OptInFeatureFlag_DynamicLiterals) == 0 && !build_context.dynamic_literals) { ERROR_BLOCK(); error(node, "Compound literals of dynamic types are disabled by default"); error_line("\tSuggestion: If you want to enable them for this specific file, add '#+feature dynamic-literals' at the top of the file\n"); diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 0909b189a..e17d958d7 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4844,7 +4844,7 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { if (cl->elems.count == 0) { break; } - GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals); + GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); lbValue err = lb_dynamic_map_reserve(p, v.addr, 2*cl->elems.count, pos); gb_unused(err); diff --git a/src/main.cpp b/src/main.cpp index 00032c1ff..3692e4f06 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -319,6 +319,7 @@ enum BuildFlagKind { BuildFlag_NoBoundsCheck, BuildFlag_NoTypeAssert, BuildFlag_NoDynamicLiterals, + BuildFlag_DynamicLiterals, BuildFlag_NoCRT, BuildFlag_NoRPath, BuildFlag_NoEntryPoint, @@ -538,6 +539,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_NoTypeAssert, str_lit("no-type-assert"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_NoThreadLocal, str_lit("no-thread-local"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_NoDynamicLiterals, str_lit("no-dynamic-literals"), BuildFlagParam_None, Command__does_check); + add_flag(&build_flags, BuildFlag_DynamicLiterals, str_lit("dynamic-literals"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_NoCRT, str_lit("no-crt"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_NoRPath, str_lit("no-rpath"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_NoEntryPoint, str_lit("no-entry-point"), BuildFlagParam_None, Command__does_check &~ Command_test); @@ -1207,6 +1209,9 @@ gb_internal bool parse_build_flags(Array args) { case BuildFlag_NoDynamicLiterals: gb_printf_err("Warning: Use of -no-dynamic-literals is now redundant\n"); break; + case BuildFlag_DynamicLiterals: + build_context.dynamic_literals = true; + break; case BuildFlag_NoCRT: build_context.no_crt = true; break; From b0185288336f148b71240514b9fa61deeb31c8b4 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Mon, 19 May 2025 20:29:01 -0400 Subject: [PATCH 098/120] Do not call disabled deferred procedures --- src/checker.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/checker.cpp b/src/checker.cpp index 909ee705b..aaa815365 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -6325,6 +6325,12 @@ gb_internal void check_deferred_procedures(Checker *c) { continue; } + if (dst->flags & EntityFlag_Disabled) { + // Prevent procedures that have been disabled from acting as deferrals. + src->Procedure.deferred_procedure = {}; + continue; + } + GB_ASSERT(is_type_proc(src->type)); GB_ASSERT(is_type_proc(dst->type)); Type *src_params = base_type(src->type)->Proc.params; From e36db15b48091a5924e6c35b220546862c51ed70 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 20 May 2025 09:16:14 +0100 Subject: [PATCH 099/120] Fix typo `_beginthreadx` -> `_beginthreadex` --- vendor/sdl3/sdl3_thread.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/sdl3/sdl3_thread.odin b/vendor/sdl3/sdl3_thread.odin index 9b2d068d9..e6bbf7d16 100644 --- a/vendor/sdl3/sdl3_thread.odin +++ b/vendor/sdl3/sdl3_thread.odin @@ -49,7 +49,7 @@ PROP_THREAD_CREATE_STACKSIZE_NUMBER :: "SDL.thread.create.stacksize" BeginThreadFunction :: proc "c" () -> FunctionPointer { when ODIN_OS == .Windows { foreign { - _beginthreadx :: proc "c" ( + _beginthreadex :: proc "c" ( security: rawptr, stack_size: c.uint, start_address: proc "c" (rawptr), @@ -58,7 +58,7 @@ BeginThreadFunction :: proc "c" () -> FunctionPointer { thraddr: ^c.uint, ) -> uintptr --- } - return FunctionPointer(_beginthreadx) + return FunctionPointer(_beginthreadex) } else { return nil } From 8bffd247b77bf757449d326a4e6ae6cf49167e94 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Tue, 20 May 2025 16:51:24 +0200 Subject: [PATCH 100/120] Restore console mode when test runner exits. --- core/testing/runner.odin | 4 ++++ core/testing/runner_windows.odin | 26 ++++++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/core/testing/runner.odin b/core/testing/runner.odin index 83a5ac4e7..db0587370 100644 --- a/core/testing/runner.odin +++ b/core/testing/runner.odin @@ -949,5 +949,9 @@ To partly mitigate this, redirect STDERR to a file or use the -define:ODIN_TEST_ fmt.assertf(err == nil, "Error writing JSON report: %v", err) } + when ODIN_OS == .Windows { + console_ansi_fini() + } + return total_success_count == total_test_count } diff --git a/core/testing/runner_windows.odin b/core/testing/runner_windows.odin index 401804c71..b35914c72 100644 --- a/core/testing/runner_windows.odin +++ b/core/testing/runner_windows.odin @@ -3,20 +3,34 @@ package testing import win32 "core:sys/windows" +old_stdout_mode: u32 +old_stderr_mode: u32 + console_ansi_init :: proc() { stdout := win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) if stdout != win32.INVALID_HANDLE && stdout != nil { - old_console_mode: u32 - if win32.GetConsoleMode(stdout, &old_console_mode) { - win32.SetConsoleMode(stdout, old_console_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) + if win32.GetConsoleMode(stdout, &old_stdout_mode) { + win32.SetConsoleMode(stdout, old_stdout_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) } } stderr := win32.GetStdHandle(win32.STD_ERROR_HANDLE) if stderr != win32.INVALID_HANDLE && stderr != nil { - old_console_mode: u32 - if win32.GetConsoleMode(stderr, &old_console_mode) { - win32.SetConsoleMode(stderr, old_console_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) + if win32.GetConsoleMode(stderr, &old_stderr_mode) { + win32.SetConsoleMode(stderr, old_stderr_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) } } } + +// Restore the cursor on exit +console_ansi_fini :: proc() { + stdout := win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) + if stdout != win32.INVALID_HANDLE && stdout != nil { + win32.SetConsoleMode(stdout, old_stdout_mode) + } + + stderr := win32.GetStdHandle(win32.STD_ERROR_HANDLE) + if stderr != win32.INVALID_HANDLE && stderr != nil { + win32.SetConsoleMode(stderr, old_stderr_mode) + } +} \ No newline at end of file From eab3e2be2212ec11c568f4fcb5e74e30b379e37f Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Tue, 20 May 2025 19:47:48 +0200 Subject: [PATCH 101/120] os2: remove libc use on Linux --- core/os/os2/path_linux.odin | 18 ++++++++++++++++++ core/os/os2/path_posix.odin | 17 +++++++++++++++++ core/os/os2/path_posixfs.odin | 21 --------------------- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/core/os/os2/path_linux.odin b/core/os/os2/path_linux.odin index 64f415187..8b185f419 100644 --- a/core/os/os2/path_linux.odin +++ b/core/os/os2/path_linux.odin @@ -207,3 +207,21 @@ _get_full_path :: proc(fd: linux.Fd, allocator: runtime.Allocator) -> (fullpath: } return } + +_get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absolute_path: string, err: Error) { + rel := path + if rel == "" { + rel = "." + } + + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) + + fd, errno := linux.open(clone_to_cstring(path, temp_allocator) or_return, {}) + if errno != nil { + err = _get_platform_error(errno) + return + } + defer linux.close(fd) + + return _get_full_path(fd, allocator) +} diff --git a/core/os/os2/path_posix.odin b/core/os/os2/path_posix.odin index e59567240..f22cd446b 100644 --- a/core/os/os2/path_posix.odin +++ b/core/os/os2/path_posix.odin @@ -123,3 +123,20 @@ _set_working_directory :: proc(dir: string) -> (err: Error) { } return } + +_get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absolute_path: string, err: Error) { + rel := path + if rel == "" { + rel = "." + } + temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) + rel_cstr := clone_to_cstring(rel, temp_allocator) or_return + path_ptr := posix.realpath(rel_cstr, nil) + if path_ptr == nil { + return "", Platform_Error(posix.errno()) + } + defer posix.free(path_ptr) + + path_str := clone_string(string(path_ptr), allocator) or_return + return path_str, nil +} diff --git a/core/os/os2/path_posixfs.odin b/core/os/os2/path_posixfs.odin index 4102d71c1..0736e73d1 100644 --- a/core/os/os2/path_posixfs.odin +++ b/core/os/os2/path_posixfs.odin @@ -4,10 +4,6 @@ package os2 // This implementation is for all systems that have POSIX-compliant filesystem paths. -import "base:runtime" -import "core:strings" -import "core:sys/posix" - _are_paths_identical :: proc(a, b: string) -> (identical: bool) { return a == b } @@ -26,23 +22,6 @@ _is_absolute_path :: proc(path: string) -> bool { return len(path) > 0 && _is_path_separator(path[0]) } -_get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absolute_path: string, err: Error) { - rel := path - if rel == "" { - rel = "." - } - temp_allocator := TEMP_ALLOCATOR_GUARD({ allocator }) - rel_cstr := strings.clone_to_cstring(rel, temp_allocator) - path_ptr := posix.realpath(rel_cstr, nil) - if path_ptr == nil { - return "", Platform_Error(posix.errno()) - } - defer posix.free(path_ptr) - - path_str := strings.clone(string(path_ptr), allocator) - return path_str, nil -} - _get_relative_path_handle_start :: proc(base, target: string) -> bool { base_rooted := len(base) > 0 && _is_path_separator(base[0]) target_rooted := len(target) > 0 && _is_path_separator(target[0]) From bcaba47e15e81d7cbf4964423286f72a6065bd4c Mon Sep 17 00:00:00 2001 From: deadwanderer Date: Tue, 20 May 2025 15:42:06 -0400 Subject: [PATCH 102/120] Fix incorrect resource state bit_set --- vendor/directx/d3d12/d3d12.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/directx/d3d12/d3d12.odin b/vendor/directx/d3d12/d3d12.odin index eef93d13c..810172b0c 100644 --- a/vendor/directx/d3d12/d3d12.odin +++ b/vendor/directx/d3d12/d3d12.odin @@ -1551,7 +1551,7 @@ RESOURCE_STATE_GENERIC_READ :: RESOURCE_STATES{ .VERTEX_AND_CONSTANT_BUFFER, .INDEX_BUFFER, .NON_PIXEL_SHADER_RESOURCE, .PIXEL_SHADER_RESOURCE, .INDIRECT_ARGUMENT, .COPY_SOURCE, } RESOURCE_STATE_ALL_SHADER_RESOURCE :: RESOURCE_STATES{ - .SHADING_RATE_SOURCE, .INDEX_BUFFER, + .NON_PIXEL_SHADER_RESOURCE, .PIXEL_SHADER_RESOURCE, } RESOURCE_BARRIER_TYPE :: enum i32 { From 9f559af5305a26593c3e92d2b1b12ac9cb310946 Mon Sep 17 00:00:00 2001 From: deadwanderer Date: Tue, 20 May 2025 15:45:03 -0400 Subject: [PATCH 103/120] Add GPU_UPLOAD heap type --- vendor/directx/d3d12/d3d12.odin | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/vendor/directx/d3d12/d3d12.odin b/vendor/directx/d3d12/d3d12.odin index 810172b0c..9cb1eec48 100644 --- a/vendor/directx/d3d12/d3d12.odin +++ b/vendor/directx/d3d12/d3d12.odin @@ -1316,10 +1316,11 @@ RESOURCE_ALLOCATION_INFO1 :: struct { } HEAP_TYPE :: enum i32 { - DEFAULT = 1, - UPLOAD = 2, - READBACK = 3, - CUSTOM = 4, + DEFAULT = 1, + UPLOAD = 2, + READBACK = 3, + CUSTOM = 4, + GPU_UPLOAD = 5, } CPU_PAGE_PROPERTY :: enum i32 { From c090a28b9d390ccd5352af2b2443491be806e464 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Tue, 20 May 2025 18:56:18 -0400 Subject: [PATCH 104/120] Add `/usr/local/lib` to FreeBSD linker path --- src/linker.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/linker.cpp b/src/linker.cpp index 087bb49f1..41d4a13a1 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -801,6 +801,9 @@ try_cross_linking:; // This points the linker to where the entry point is link_settings = gb_string_appendc(link_settings, "-e _main "); } + } else if (build_context.metrics.os == TargetOs_freebsd) { + // FreeBSD pkg installs third-party shared libraries in /usr/local/lib. + platform_lib_str = gb_string_appendc(platform_lib_str, "-Wl,-L/usr/local/lib "); } else if (build_context.metrics.os == TargetOs_openbsd) { // OpenBSD ports install shared libraries in /usr/local/lib. Also, we must explicitly link libpthread. platform_lib_str = gb_string_appendc(platform_lib_str, "-lpthread -Wl,-L/usr/local/lib "); From 30c1b887414197268bc866aec770786023bd457e Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Tue, 20 May 2025 15:32:01 -0400 Subject: [PATCH 105/120] Add `core:terminal` --- core/terminal/doc.odin | 4 ++ core/terminal/terminal.odin | 104 ++++++++++++++++++++++++++++ core/terminal/terminal_posix.odin | 9 +++ core/terminal/terminal_windows.odin | 9 +++ examples/all/all_main.odin | 3 + 5 files changed, 129 insertions(+) create mode 100644 core/terminal/doc.odin create mode 100644 core/terminal/terminal.odin create mode 100644 core/terminal/terminal_posix.odin create mode 100644 core/terminal/terminal_windows.odin diff --git a/core/terminal/doc.odin b/core/terminal/doc.odin new file mode 100644 index 000000000..490e9d398 --- /dev/null +++ b/core/terminal/doc.odin @@ -0,0 +1,4 @@ +/* +This package is for interacting with the command line interface of the system. +*/ +package terminal diff --git a/core/terminal/terminal.odin b/core/terminal/terminal.odin new file mode 100644 index 000000000..fae6f880a --- /dev/null +++ b/core/terminal/terminal.odin @@ -0,0 +1,104 @@ +package terminal + +import "core:os" +import "core:strings" + +/* +This describes the range of colors that a terminal is capable of supporting. +*/ +Color_Depth :: enum { + None, // No color support + Three_Bit, // 8 colors + Four_Bit, // 16 colors + Eight_Bit, // 256 colors + True_Color, // 24-bit true color +} + +/* +Returns true if the file `handle` is attached to a terminal. + +This is normally true for `os.stdout` and `os.stderr` unless they are +redirected to a file. +*/ +@(require_results) +is_terminal :: proc(handle: os.Handle) -> bool { + return _is_terminal(handle) +} + +/* +Get the color depth support for the terminal. +*/ +@(require_results) +get_color_depth :: proc() -> Color_Depth { + // Reference documentation: + // + // - [[ https://no-color.org/ ]] + // - [[ https://github.com/termstandard/colors ]] + // - [[ https://invisible-island.net/ncurses/terminfo.src.html ]] + + // Respect `NO_COLOR` above all. + if no_color, ok := os.lookup_env("NO_COLOR"); ok { + defer delete(no_color) + if no_color != "" { + return .None + } + } + + // `COLORTERM` is non-standard but widespread and unambiguous. + if colorterm, ok := os.lookup_env("COLORTERM"); ok { + defer delete(colorterm) + // These are the only values that are typically advertised that have + // anything to do with color depth. + if colorterm == "truecolor" || colorterm == "24bit" { + return .True_Color + } + } + + if term, ok := os.lookup_env("TERM"); ok { + defer delete(term) + if strings.contains(term, "-truecolor") { + return .True_Color + } + if strings.contains(term, "-256color") { + return .Eight_Bit + } + if strings.contains(term, "-16color") { + return .Four_Bit + } + + // The `terminfo` database, which is stored in binary on *nix + // platforms, has an undocumented format that is not guaranteed to be + // portable, so beyond this point, we can only make safe assumptions. + // + // This section should only be necessary for terminals that do not + // define any of the previous environment values. + // + // Only a small sampling of some common values are checked here. + switch term { + case "ansi": fallthrough + case "konsole": fallthrough + case "putty": fallthrough + case "rxvt": fallthrough + case "rxvt-color": fallthrough + case "screen": fallthrough + case "st": fallthrough + case "tmux": fallthrough + case "vte": fallthrough + case "xterm": fallthrough + case "xterm-color": + return .Three_Bit + } + } + + return .None +} + +/* +This is true if the terminal is accepting any form of colored text output. +*/ +color_enabled: bool + +@(init, private) +init_terminal_status :: proc() { + color_enabled = get_color_depth() > .None +} diff --git a/core/terminal/terminal_posix.odin b/core/terminal/terminal_posix.odin new file mode 100644 index 000000000..adfb6a0da --- /dev/null +++ b/core/terminal/terminal_posix.odin @@ -0,0 +1,9 @@ +#+build linux, darwin, netbsd, openbsd, freebsd, haiku +package terminal + +import "core:os" +import "core:sys/posix" + +_is_terminal :: proc(handle: os.Handle) -> bool { + return bool(posix.isatty(posix.FD(handle))) +} diff --git a/core/terminal/terminal_windows.odin b/core/terminal/terminal_windows.odin new file mode 100644 index 000000000..caab87cc7 --- /dev/null +++ b/core/terminal/terminal_windows.odin @@ -0,0 +1,9 @@ +package terminal + +import "core:os" +import "core:sys/windows" + +_is_terminal :: proc(handle: os.Handle) -> bool { + mode: windows.DWORD + return bool(windows.GetConsoleMode(windows.HANDLE(handle), &mode)) +} diff --git a/examples/all/all_main.odin b/examples/all/all_main.odin index 0a17227b8..97ecfee45 100644 --- a/examples/all/all_main.odin +++ b/examples/all/all_main.odin @@ -129,6 +129,8 @@ import strings "core:strings" import sync "core:sync" import testing "core:testing" +import terminal "core:terminal" + import edit "core:text/edit" import i18n "core:text/i18n" import match "core:text/match" @@ -257,6 +259,7 @@ _ :: strconv _ :: strings _ :: sync _ :: testing +_ :: terminal _ :: scanner _ :: i18n _ :: match From df5e64beebd02971292838acc4150471620bae24 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Tue, 20 May 2025 15:35:11 -0400 Subject: [PATCH 106/120] Add terminal color detection to `core:log` --- core/log/file_console_logger.odin | 62 ++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/core/log/file_console_logger.odin b/core/log/file_console_logger.odin index 6d93fb879..f807f321f 100644 --- a/core/log/file_console_logger.odin +++ b/core/log/file_console_logger.odin @@ -2,10 +2,12 @@ #+build !orca package log +import "base:runtime" import "core:encoding/ansi" import "core:fmt" import "core:strings" import "core:os" +import "core:terminal" import "core:time" Level_Headers := [?]string{ @@ -37,11 +39,36 @@ File_Console_Logger_Data :: struct { ident: string, } +@(private) global_subtract_stdout_options: Options +@(private) global_subtract_stderr_options: Options + +@(init, private) +init_standard_stream_status :: proc() { + // NOTE(Feoramund): While it is technically possible for these streams to + // be redirected during the runtime of the program, the cost of checking on + // every single log message is not worth it to support such an + // uncommonly-used feature. + if terminal.color_enabled { + // This is done this way because it's possible that only one of these + // streams could be redirected to a file. + if !terminal.is_terminal(os.stdout) { + global_subtract_stdout_options = {.Terminal_Color} + } + if !terminal.is_terminal(os.stderr) { + global_subtract_stderr_options = {.Terminal_Color} + } + } else { + // Override any terminal coloring. + global_subtract_stdout_options = {.Terminal_Color} + global_subtract_stderr_options = {.Terminal_Color} + } +} + create_file_logger :: proc(h: os.Handle, lowest := Level.Debug, opt := Default_File_Logger_Opts, ident := "", allocator := context.allocator) -> Logger { data := new(File_Console_Logger_Data, allocator) data.file_handle = h data.ident = ident - return Logger{file_console_logger_proc, data, lowest, opt} + return Logger{file_logger_proc, data, lowest, opt} } destroy_file_logger :: proc(log: Logger, allocator := context.allocator) { @@ -56,19 +83,15 @@ create_console_logger :: proc(lowest := Level.Debug, opt := Default_Console_Logg data := new(File_Console_Logger_Data, allocator) data.file_handle = os.INVALID_HANDLE data.ident = ident - return Logger{file_console_logger_proc, data, lowest, opt} + return Logger{console_logger_proc, data, lowest, opt} } destroy_console_logger :: proc(log: Logger, allocator := context.allocator) { free(log.data, allocator) } -file_console_logger_proc :: proc(logger_data: rawptr, level: Level, text: string, options: Options, location := #caller_location) { - data := cast(^File_Console_Logger_Data)logger_data - h: os.Handle = os.stdout if level <= Level.Error else os.stderr - if data.file_handle != os.INVALID_HANDLE { - h = data.file_handle - } +@(private) +_file_console_logger_proc :: proc(h: os.Handle, ident: string, level: Level, text: string, options: Options, location: runtime.Source_Code_Location) { backing: [1024]byte //NOTE(Hoej): 1024 might be too much for a header backing, unless somebody has really long paths. buf := strings.builder_from_bytes(backing[:]) @@ -86,13 +109,32 @@ file_console_logger_proc :: proc(logger_data: rawptr, level: Level, text: string fmt.sbprintf(&buf, "[{}] ", os.current_thread_id()) } - if data.ident != "" { - fmt.sbprintf(&buf, "[%s] ", data.ident) + if ident != "" { + fmt.sbprintf(&buf, "[%s] ", ident) } //TODO(Hoej): When we have better atomics and such, make this thread-safe fmt.fprintf(h, "%s%s\n", strings.to_string(buf), text) } +file_logger_proc :: proc(logger_data: rawptr, level: Level, text: string, options: Options, location := #caller_location) { + data := cast(^File_Console_Logger_Data)logger_data + _file_console_logger_proc(data.file_handle, data.ident, level, text, options, location) +} + +console_logger_proc :: proc(logger_data: rawptr, level: Level, text: string, options: Options, location := #caller_location) { + options := options + data := cast(^File_Console_Logger_Data)logger_data + h: os.Handle = --- + if level < Level.Error { + h = os.stdout + options -= global_subtract_stdout_options + } else { + h = os.stderr + options -= global_subtract_stderr_options + } + _file_console_logger_proc(h, data.ident, level, text, options, location) +} + do_level_header :: proc(opts: Options, str: ^strings.Builder, level: Level) { RESET :: ansi.CSI + ansi.RESET + ansi.SGR From a9df1b1cde1037d030f4e823ce576dfd9bcf9c97 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Tue, 20 May 2025 15:41:35 -0400 Subject: [PATCH 107/120] Rename `core:encoding/ansi` to `core:terminal/ansi` --- core/log/file_console_logger.odin | 2 +- core/{encoding => terminal}/ansi/ansi.odin | 0 core/{encoding => terminal}/ansi/doc.odin | 0 core/testing/reporting.odin | 2 +- core/testing/runner.odin | 2 +- core/testing/signal_handler_libc.odin | 4 ++-- examples/all/all_main.odin | 4 ++-- 7 files changed, 7 insertions(+), 7 deletions(-) rename core/{encoding => terminal}/ansi/ansi.odin (100%) rename core/{encoding => terminal}/ansi/doc.odin (100%) diff --git a/core/log/file_console_logger.odin b/core/log/file_console_logger.odin index f807f321f..0fe5c3477 100644 --- a/core/log/file_console_logger.odin +++ b/core/log/file_console_logger.odin @@ -3,11 +3,11 @@ package log import "base:runtime" -import "core:encoding/ansi" import "core:fmt" import "core:strings" import "core:os" import "core:terminal" +import "core:terminal/ansi" import "core:time" Level_Headers := [?]string{ diff --git a/core/encoding/ansi/ansi.odin b/core/terminal/ansi/ansi.odin similarity index 100% rename from core/encoding/ansi/ansi.odin rename to core/terminal/ansi/ansi.odin diff --git a/core/encoding/ansi/doc.odin b/core/terminal/ansi/doc.odin similarity index 100% rename from core/encoding/ansi/doc.odin rename to core/terminal/ansi/doc.odin diff --git a/core/testing/reporting.odin b/core/testing/reporting.odin index 6752cd79b..7c7eb7b2d 100644 --- a/core/testing/reporting.odin +++ b/core/testing/reporting.odin @@ -10,12 +10,12 @@ package testing */ import "base:runtime" -import "core:encoding/ansi" import "core:fmt" import "core:io" import "core:mem" import "core:path/filepath" import "core:strings" +import "core:terminal/ansi" // Definitions of colors for use in the test runner. SGR_RESET :: ansi.CSI + ansi.RESET + ansi.SGR diff --git a/core/testing/runner.odin b/core/testing/runner.odin index db0587370..c81d07109 100644 --- a/core/testing/runner.odin +++ b/core/testing/runner.odin @@ -13,7 +13,6 @@ package testing import "base:intrinsics" import "base:runtime" import "core:bytes" -import "core:encoding/ansi" @require import "core:encoding/base64" @require import "core:encoding/json" import "core:fmt" @@ -25,6 +24,7 @@ import "core:os" import "core:slice" @require import "core:strings" import "core:sync/chan" +import "core:terminal/ansi" import "core:thread" import "core:time" diff --git a/core/testing/signal_handler_libc.odin b/core/testing/signal_handler_libc.odin index 281fbde40..d17a6d6dc 100644 --- a/core/testing/signal_handler_libc.odin +++ b/core/testing/signal_handler_libc.odin @@ -12,9 +12,9 @@ package testing import "base:intrinsics" import "core:c/libc" -import "core:encoding/ansi" -import "core:sync" import "core:os" +import "core:sync" +import "core:terminal/ansi" @(private="file") stop_runner_flag: libc.sig_atomic_t diff --git a/examples/all/all_main.odin b/examples/all/all_main.odin index 97ecfee45..de037f6cd 100644 --- a/examples/all/all_main.odin +++ b/examples/all/all_main.odin @@ -58,7 +58,6 @@ import trace "core:debug/trace" import dynlib "core:dynlib" import net "core:net" -import ansi "core:encoding/ansi" import base32 "core:encoding/base32" import base64 "core:encoding/base64" import cbor "core:encoding/cbor" @@ -130,6 +129,7 @@ import sync "core:sync" import testing "core:testing" import terminal "core:terminal" +import ansi "core:terminal/ansi" import edit "core:text/edit" import i18n "core:text/i18n" @@ -203,7 +203,6 @@ _ :: pe _ :: trace _ :: dynlib _ :: net -_ :: ansi _ :: base32 _ :: base64 _ :: csv @@ -260,6 +259,7 @@ _ :: strings _ :: sync _ :: testing _ :: terminal +_ :: ansi _ :: scanner _ :: i18n _ :: match From 3c40a54dcd9ff8e1b608fac5c91ed0f1d0ed7d00 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Tue, 20 May 2025 15:43:47 -0400 Subject: [PATCH 108/120] Add terminal color detection to logging in `core:testing` --- core/testing/runner.odin | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/core/testing/runner.odin b/core/testing/runner.odin index c81d07109..ff8ca00b9 100644 --- a/core/testing/runner.odin +++ b/core/testing/runner.odin @@ -24,6 +24,7 @@ import "core:os" import "core:slice" @require import "core:strings" import "core:sync/chan" +import "core:terminal" import "core:terminal/ansi" import "core:thread" import "core:time" @@ -70,6 +71,8 @@ get_log_level :: #force_inline proc() -> runtime.Logger_Level { } } +@(private) global_log_colors_disabled: bool + JSON :: struct { total: int, success: int, @@ -129,11 +132,16 @@ run_test_task :: proc(task: thread.Task) { context.assertion_failure_proc = test_assertion_failure_proc + logger_options := Default_Test_Logger_Opts + if global_log_colors_disabled { + logger_options -= {.Terminal_Color} + } + context.logger = { procedure = test_logger_proc, data = &data.t, lowest_level = get_log_level(), - options = Default_Test_Logger_Opts, + options = logger_options, } random_generator_state: runtime.Default_Random_State @@ -211,6 +219,8 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { stdout := io.to_writer(os.stream_from_handle(os.stdout)) stderr := io.to_writer(os.stream_from_handle(os.stderr)) + global_log_colors_disabled = !terminal.color_enabled || !terminal.is_terminal(os.stderr) + // -- Prepare test data. alloc_error: mem.Allocator_Error @@ -442,11 +452,16 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { // digging through the source to divine everywhere it is used for that. shared_log_allocator := context.allocator + logger_options := Default_Test_Logger_Opts - {.Short_File_Path, .Line, .Procedure} + if global_log_colors_disabled { + logger_options -= {.Terminal_Color} + } + context.logger = { procedure = runner_logger_proc, data = &log_messages, lowest_level = get_log_level(), - options = Default_Test_Logger_Opts - {.Short_File_Path, .Line, .Procedure}, + options = logger_options, } run_index: int From 1b407ef20789b1d04d61b0a53ca8c98fe6621db2 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Tue, 20 May 2025 16:17:14 -0400 Subject: [PATCH 109/120] Add animation detection support to test runner --- core/testing/runner.odin | 133 +++++++++++++++----------- core/testing/signal_handler_libc.odin | 8 +- 2 files changed, 80 insertions(+), 61 deletions(-) diff --git a/core/testing/runner.odin b/core/testing/runner.odin index ff8ca00b9..a184eb28c 100644 --- a/core/testing/runner.odin +++ b/core/testing/runner.odin @@ -45,6 +45,7 @@ PER_THREAD_MEMORY : int : #config(ODIN_TEST_THREAD_MEMORY, mem.ROLLBACK_S // The format is: `package.test_name,test_name_only,...` TEST_NAMES : string : #config(ODIN_TEST_NAMES, "") // Show the fancy animated progress report. +// This requires terminal color support, as well as STDOUT to not be redirected to a file. FANCY_OUTPUT : bool : #config(ODIN_TEST_FANCY, true) // Copy failed tests to the clipboard when done. USE_CLIPBOARD : bool : #config(ODIN_TEST_CLIPBOARD, false) @@ -72,6 +73,7 @@ get_log_level :: #force_inline proc() -> runtime.Logger_Level { } @(private) global_log_colors_disabled: bool +@(private) global_ansi_disabled: bool JSON :: struct { total: int, @@ -219,7 +221,12 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { stdout := io.to_writer(os.stream_from_handle(os.stdout)) stderr := io.to_writer(os.stream_from_handle(os.stderr)) + // The animations are only ever shown through STDOUT; + // STDERR is used exclusively for logging regardless of error level. global_log_colors_disabled = !terminal.color_enabled || !terminal.is_terminal(os.stderr) + global_ansi_disabled = !terminal.is_terminal(os.stdout) + + should_show_animations := FANCY_OUTPUT && terminal.color_enabled && !global_ansi_disabled // -- Prepare test data. @@ -278,12 +285,12 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { total_done_count := 0 total_test_count := len(internal_tests) - when !FANCY_OUTPUT { - // This is strictly for updating the window title when the progress - // report is disabled. We're otherwise able to depend on the call to - // `needs_to_redraw`. - last_done_count := -1 - } + + // This is strictly for updating the window title when the progress + // report is disabled. We're otherwise able to depend on the call to + // `needs_to_redraw`. + last_done_count := -1 + if total_test_count == 0 { // Exit early. @@ -352,31 +359,31 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { fmt.assertf(alloc_error == nil, "Error allocating memory for test report: %v", alloc_error) defer destroy_report(&report) - when FANCY_OUTPUT { - // We cannot make use of the ANSI save/restore cursor codes, because they - // work by absolute screen coordinates. This will cause unnecessary - // scrollback if we print at the bottom of someone's terminal. - ansi_redraw_string := fmt.aprintf( - // ANSI for "go up N lines then erase the screen from the cursor forward." - ansi.CSI + "%i" + ansi.CPL + ansi.CSI + ansi.ED + - // We'll combine this with the window title format string, since it - // can be printed at the same time. - "%s", - // 1 extra line for the status bar. - 1 + len(report.packages), OSC_WINDOW_TITLE) - assert(len(ansi_redraw_string) > 0, "Error allocating ANSI redraw string.") - defer delete(ansi_redraw_string) - thread_count_status_string: string = --- - { - PADDING :: PROGRESS_COLUMN_SPACING + PROGRESS_WIDTH + // We cannot make use of the ANSI save/restore cursor codes, because they + // work by absolute screen coordinates. This will cause unnecessary + // scrollback if we print at the bottom of someone's terminal. + ansi_redraw_string := fmt.aprintf( + // ANSI for "go up N lines then erase the screen from the cursor forward." + ansi.CSI + "%i" + ansi.CPL + ansi.CSI + ansi.ED + + // We'll combine this with the window title format string, since it + // can be printed at the same time. + "%s", + // 1 extra line for the status bar. + 1 + len(report.packages), OSC_WINDOW_TITLE) + assert(len(ansi_redraw_string) > 0, "Error allocating ANSI redraw string.") + defer delete(ansi_redraw_string) - unpadded := fmt.tprintf("%i thread%s", thread_count, "" if thread_count == 1 else "s") - thread_count_status_string = fmt.aprintf("%- *[1]s", unpadded, report.pkg_column_len + PADDING) - assert(len(thread_count_status_string) > 0, "Error allocating thread count status string.") - } - defer delete(thread_count_status_string) + thread_count_status_string: string = --- + { + PADDING :: PROGRESS_COLUMN_SPACING + PROGRESS_WIDTH + + unpadded := fmt.tprintf("%i thread%s", thread_count, "" if thread_count == 1 else "s") + thread_count_status_string = fmt.aprintf("%- *[1]s", unpadded, report.pkg_column_len + PADDING) + assert(len(thread_count_status_string) > 0, "Error allocating thread count status string.") } + defer delete(thread_count_status_string) + task_data_slots: []Task_Data = --- task_data_slots, alloc_error = make([]Task_Data, thread_count) @@ -496,11 +503,13 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { setup_signal_handler() - fmt.wprint(stdout, ansi.CSI + ansi.DECTCEM_HIDE) + if !global_ansi_disabled { + fmt.wprint(stdout, ansi.CSI + ansi.DECTCEM_HIDE) + } - when FANCY_OUTPUT { - signals_were_raised := false + signals_were_raised := false + if should_show_animations { redraw_report(stdout, report) draw_status_bar(stdout, thread_count_status_string, total_done_count, total_test_count) } @@ -718,22 +727,22 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { break main_loop } - when FANCY_OUTPUT { - // Because the bounds checking procs send directly to STDERR with - // no way to redirect or handle them, we need to at least try to - // let the user see those messages when using the animated progress - // report. This flag may be set by the block of code below if a - // signal is raised. - // - // It'll be purely by luck if the output is interleaved properly, - // given the nature of non-thread-safe printing. - // - // At worst, if Odin did not print any error for this signal, we'll - // just re-display the progress report. The fatal log error message - // should be enough to clue the user in that something dire has - // occurred. - bypass_progress_overwrite := false - } + + // Because the bounds checking procs send directly to STDERR with + // no way to redirect or handle them, we need to at least try to + // let the user see those messages when using the animated progress + // report. This flag may be set by the block of code below if a + // signal is raised. + // + // It'll be purely by luck if the output is interleaved properly, + // given the nature of non-thread-safe printing. + // + // At worst, if Odin did not print any error for this signal, we'll + // just re-display the progress report. The fatal log error message + // should be enough to clue the user in that something dire has + // occurred. + bypass_progress_overwrite := false + if test_index, reason, ok := should_stop_test(); ok { #no_bounds_check report.all_test_states[test_index] = .Failed @@ -767,7 +776,7 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { log.fatalf("Caught signal to stop test #%i %s.%s for: %v.", test_index, it.pkg, it.name, reason) } - when FANCY_OUTPUT { + if should_show_animations { bypass_progress_overwrite = true signals_were_raised = true } @@ -781,7 +790,7 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { // -- Redraw. - when FANCY_OUTPUT { + if should_show_animations { if len(log_messages) == 0 && !needs_to_redraw(report) { continue main_loop } @@ -791,7 +800,9 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { } } else { if total_done_count != last_done_count { - fmt.wprintf(stdout, OSC_WINDOW_TITLE, total_done_count, total_test_count) + if !global_ansi_disabled { + fmt.wprintf(stdout, OSC_WINDOW_TITLE, total_done_count, total_test_count) + } last_done_count = total_done_count } @@ -816,7 +827,7 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { clear(&log_messages) bytes.buffer_reset(&batch_buffer) - when FANCY_OUTPUT { + if should_show_animations { redraw_report(batch_writer, report) draw_status_bar(batch_writer, thread_count_status_string, total_done_count, total_test_count) fmt.wprint(stdout, bytes.buffer_to_string(&batch_buffer)) @@ -837,7 +848,7 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { finished_in := time.since(start_time) - when !FANCY_OUTPUT { + if !should_show_animations || !terminal.is_terminal(os.stderr) { // One line to space out the results, since we don't have the status // bar in plain mode. fmt.wprintln(batch_writer) @@ -851,24 +862,28 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { if total_done_count != total_test_count { not_run_count := total_test_count - total_done_count + message := " %i %s left undone." if global_log_colors_disabled else " " + SGR_READY + "%i" + SGR_RESET + " %s left undone." fmt.wprintf(batch_writer, - " " + SGR_READY + "%i" + SGR_RESET + " %s left undone.", + message, not_run_count, "test was" if not_run_count == 1 else "tests were") } if total_success_count == total_test_count { + message := " %s successful." if global_log_colors_disabled else " %s " + SGR_SUCCESS + "successful." + SGR_RESET fmt.wprintfln(batch_writer, - " %s " + SGR_SUCCESS + "successful." + SGR_RESET, + message, "The test was" if total_test_count == 1 else "All tests were") } else if total_failure_count > 0 { if total_failure_count == total_test_count { + message := " %s failed." if global_log_colors_disabled else " %s " + SGR_FAILED + "failed." + SGR_RESET fmt.wprintfln(batch_writer, - " %s " + SGR_FAILED + "failed." + SGR_RESET, + message, "The test" if total_test_count == 1 else "All tests") } else { + message := " %i test%s failed." if global_log_colors_disabled else " " + SGR_FAILED + "%i" + SGR_RESET + " test%s failed." fmt.wprintfln(batch_writer, - " " + SGR_FAILED + "%i" + SGR_RESET + " test%s failed.", + message, total_failure_count, "" if total_failure_count == 1 else "s") } @@ -922,9 +937,11 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { } } - fmt.wprint(stdout, ansi.CSI + ansi.DECTCEM_SHOW) + if !global_ansi_disabled { + fmt.wprint(stdout, ansi.CSI + ansi.DECTCEM_SHOW) + } - when FANCY_OUTPUT { + if should_show_animations { if signals_were_raised { fmt.wprintln(batch_writer, ` Signals were raised during this test run. Log messages are likely to have collided with each other. diff --git a/core/testing/signal_handler_libc.odin b/core/testing/signal_handler_libc.odin index d17a6d6dc..f9527e22f 100644 --- a/core/testing/signal_handler_libc.odin +++ b/core/testing/signal_handler_libc.odin @@ -63,9 +63,11 @@ stop_test_callback :: proc "c" (sig: libc.int) { // NOTE(Feoramund): Using these write calls in a signal handler is // undefined behavior in C99 but possibly tolerated in POSIX 2008. // Either way, we may as well try to salvage what we can. - show_cursor := ansi.CSI + ansi.DECTCEM_SHOW - libc.fwrite(raw_data(show_cursor), size_of(byte), len(show_cursor), libc.stdout) - libc.fflush(libc.stdout) + if !global_ansi_disabled { + show_cursor := ansi.CSI + ansi.DECTCEM_SHOW + libc.fwrite(raw_data(show_cursor), size_of(byte), len(show_cursor), libc.stdout) + libc.fflush(libc.stdout) + } // This is an attempt at being compliant by avoiding printf. sigbuf: [8]byte From b6f1821bbabbb711724d309e4c62d4c866d44c67 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Wed, 21 May 2025 05:20:58 -0400 Subject: [PATCH 110/120] Fix terminal detection on Windows --- core/terminal/terminal_windows.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/terminal/terminal_windows.odin b/core/terminal/terminal_windows.odin index caab87cc7..55a3903fe 100644 --- a/core/terminal/terminal_windows.odin +++ b/core/terminal/terminal_windows.odin @@ -4,6 +4,6 @@ import "core:os" import "core:sys/windows" _is_terminal :: proc(handle: os.Handle) -> bool { - mode: windows.DWORD - return bool(windows.GetConsoleMode(windows.HANDLE(handle), &mode)) + is_tty := windows.GetFileType(windows.HANDLE(handle)) == windows.FILE_TYPE_CHAR + return is_tty } From e659df1a3f1b57ee67600cdacf75e672d8cd3d9b Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Wed, 21 May 2025 07:49:08 -0400 Subject: [PATCH 111/120] Restructure `core:terminal` for better Windows support --- core/terminal/internal.odin | 87 +++++++++++++++++++++++++++++ core/terminal/terminal.odin | 78 ++------------------------ core/terminal/terminal_posix.odin | 7 +++ core/terminal/terminal_windows.odin | 51 +++++++++++++++++ core/testing/runner.odin | 8 --- core/testing/runner_windows.odin | 36 ------------ 6 files changed, 150 insertions(+), 117 deletions(-) create mode 100644 core/terminal/internal.odin delete mode 100644 core/testing/runner_windows.odin diff --git a/core/terminal/internal.odin b/core/terminal/internal.odin new file mode 100644 index 000000000..485f6868d --- /dev/null +++ b/core/terminal/internal.odin @@ -0,0 +1,87 @@ +#+private +package terminal + +import "core:os" +import "core:strings" + +// Reference documentation: +// +// - [[ https://no-color.org/ ]] +// - [[ https://github.com/termstandard/colors ]] +// - [[ https://invisible-island.net/ncurses/terminfo.src.html ]] + +get_no_color :: proc() -> bool { + if no_color, ok := os.lookup_env("NO_COLOR"); ok { + defer delete(no_color) + return no_color != "" + } + return false +} + +get_environment_color :: proc() -> Color_Depth { + // `COLORTERM` is non-standard but widespread and unambiguous. + if colorterm, ok := os.lookup_env("COLORTERM"); ok { + defer delete(colorterm) + // These are the only values that are typically advertised that have + // anything to do with color depth. + if colorterm == "truecolor" || colorterm == "24bit" { + return .True_Color + } + } + + if term, ok := os.lookup_env("TERM"); ok { + defer delete(term) + if strings.contains(term, "-truecolor") { + return .True_Color + } + if strings.contains(term, "-256color") { + return .Eight_Bit + } + if strings.contains(term, "-16color") { + return .Four_Bit + } + + // The `terminfo` database, which is stored in binary on *nix + // platforms, has an undocumented format that is not guaranteed to be + // portable, so beyond this point, we can only make safe assumptions. + // + // This section should only be necessary for terminals that do not + // define any of the previous environment values. + // + // Only a small sampling of some common values are checked here. + switch term { + case "ansi": fallthrough + case "konsole": fallthrough + case "putty": fallthrough + case "rxvt": fallthrough + case "rxvt-color": fallthrough + case "screen": fallthrough + case "st": fallthrough + case "tmux": fallthrough + case "vte": fallthrough + case "xterm": fallthrough + case "xterm-color": + return .Three_Bit + } + } + + return .None +} + +@(init) +init_terminal :: proc() { + _init_terminal() + + // We respect `NO_COLOR` specifically as a color-disabler but not as a + // blanket ban on any terminal manipulation codes, hence why this comes + // after `_init_terminal` which will allow Windows to enable Virtual + // Terminal Processing for non-color control sequences. + if !get_no_color() { + color_enabled = color_depth > .None + } +} + +@(fini) +fini_terminal :: proc() { + _fini_terminal() +} diff --git a/core/terminal/terminal.odin b/core/terminal/terminal.odin index fae6f880a..1e5566295 100644 --- a/core/terminal/terminal.odin +++ b/core/terminal/terminal.odin @@ -1,7 +1,6 @@ package terminal import "core:os" -import "core:strings" /* This describes the range of colors that a terminal is capable of supporting. @@ -25,80 +24,13 @@ is_terminal :: proc(handle: os.Handle) -> bool { return _is_terminal(handle) } -/* -Get the color depth support for the terminal. -*/ -@(require_results) -get_color_depth :: proc() -> Color_Depth { - // Reference documentation: - // - // - [[ https://no-color.org/ ]] - // - [[ https://github.com/termstandard/colors ]] - // - [[ https://invisible-island.net/ncurses/terminfo.src.html ]] - - // Respect `NO_COLOR` above all. - if no_color, ok := os.lookup_env("NO_COLOR"); ok { - defer delete(no_color) - if no_color != "" { - return .None - } - } - - // `COLORTERM` is non-standard but widespread and unambiguous. - if colorterm, ok := os.lookup_env("COLORTERM"); ok { - defer delete(colorterm) - // These are the only values that are typically advertised that have - // anything to do with color depth. - if colorterm == "truecolor" || colorterm == "24bit" { - return .True_Color - } - } - - if term, ok := os.lookup_env("TERM"); ok { - defer delete(term) - if strings.contains(term, "-truecolor") { - return .True_Color - } - if strings.contains(term, "-256color") { - return .Eight_Bit - } - if strings.contains(term, "-16color") { - return .Four_Bit - } - - // The `terminfo` database, which is stored in binary on *nix - // platforms, has an undocumented format that is not guaranteed to be - // portable, so beyond this point, we can only make safe assumptions. - // - // This section should only be necessary for terminals that do not - // define any of the previous environment values. - // - // Only a small sampling of some common values are checked here. - switch term { - case "ansi": fallthrough - case "konsole": fallthrough - case "putty": fallthrough - case "rxvt": fallthrough - case "rxvt-color": fallthrough - case "screen": fallthrough - case "st": fallthrough - case "tmux": fallthrough - case "vte": fallthrough - case "xterm": fallthrough - case "xterm-color": - return .Three_Bit - } - } - - return .None -} - /* This is true if the terminal is accepting any form of colored text output. */ color_enabled: bool -@(init, private) -init_terminal_status :: proc() { - color_enabled = get_color_depth() > .None -} +/* +This value reports the color depth support as reported by the terminal at the +start of the program. +*/ +color_depth: Color_Depth diff --git a/core/terminal/terminal_posix.odin b/core/terminal/terminal_posix.odin index adfb6a0da..f578e12c6 100644 --- a/core/terminal/terminal_posix.odin +++ b/core/terminal/terminal_posix.odin @@ -1,3 +1,4 @@ +#+private #+build linux, darwin, netbsd, openbsd, freebsd, haiku package terminal @@ -7,3 +8,9 @@ import "core:sys/posix" _is_terminal :: proc(handle: os.Handle) -> bool { return bool(posix.isatty(posix.FD(handle))) } + +_init_terminal :: proc() { + color_depth = get_environment_color() +} + +_fini_terminal :: proc() { } diff --git a/core/terminal/terminal_windows.odin b/core/terminal/terminal_windows.odin index 55a3903fe..cc28add98 100644 --- a/core/terminal/terminal_windows.odin +++ b/core/terminal/terminal_windows.odin @@ -1,3 +1,4 @@ +#+private package terminal import "core:os" @@ -7,3 +8,53 @@ _is_terminal :: proc(handle: os.Handle) -> bool { is_tty := windows.GetFileType(windows.HANDLE(handle)) == windows.FILE_TYPE_CHAR return is_tty } + +old_modes: [2]struct{ + handle: windows.DWORD, + mode: windows.DWORD, +} = { + {windows.STD_OUTPUT_HANDLE, 0}, + {windows.STD_ERROR_HANDLE, 0}, +} + +@(init) +_init_terminal :: proc() { + vtp_enabled: bool + + for &v in old_modes { + handle := windows.GetStdHandle(v.handle) + if handle == windows.INVALID_HANDLE || handle == nil { + return + } + if windows.GetConsoleMode(handle, &v.mode) { + windows.SetConsoleMode(handle, v.mode | windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING) + + new_mode: windows.DWORD + windows.GetConsoleMode(handle, &new_mode) + + if new_mode & windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 { + vtp_enabled = true + } + } + } + + if vtp_enabled { + // This color depth is available on Windows 10 since build 10586. + color_depth = .Four_Bit + } else { + // The user may be on a non-default terminal emulator. + color_depth = get_environment_color() + } +} + +@(fini) +_fini_terminal :: proc() { + for v in old_modes { + handle := windows.GetStdHandle(v.handle) + if handle == windows.INVALID_HANDLE || handle == nil { + return + } + + windows.SetConsoleMode(handle, v.mode) + } +} diff --git a/core/testing/runner.odin b/core/testing/runner.odin index a184eb28c..56d561d3d 100644 --- a/core/testing/runner.odin +++ b/core/testing/runner.odin @@ -214,10 +214,6 @@ runner :: proc(internal_tests: []Internal_Test) -> bool { } } - when ODIN_OS == .Windows { - console_ansi_init() - } - stdout := io.to_writer(os.stream_from_handle(os.stdout)) stderr := io.to_writer(os.stream_from_handle(os.stderr)) @@ -981,9 +977,5 @@ To partly mitigate this, redirect STDERR to a file or use the -define:ODIN_TEST_ fmt.assertf(err == nil, "Error writing JSON report: %v", err) } - when ODIN_OS == .Windows { - console_ansi_fini() - } - return total_success_count == total_test_count } diff --git a/core/testing/runner_windows.odin b/core/testing/runner_windows.odin deleted file mode 100644 index b35914c72..000000000 --- a/core/testing/runner_windows.odin +++ /dev/null @@ -1,36 +0,0 @@ -#+private -package testing - -import win32 "core:sys/windows" - -old_stdout_mode: u32 -old_stderr_mode: u32 - -console_ansi_init :: proc() { - stdout := win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) - if stdout != win32.INVALID_HANDLE && stdout != nil { - if win32.GetConsoleMode(stdout, &old_stdout_mode) { - win32.SetConsoleMode(stdout, old_stdout_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) - } - } - - stderr := win32.GetStdHandle(win32.STD_ERROR_HANDLE) - if stderr != win32.INVALID_HANDLE && stderr != nil { - if win32.GetConsoleMode(stderr, &old_stderr_mode) { - win32.SetConsoleMode(stderr, old_stderr_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) - } - } -} - -// Restore the cursor on exit -console_ansi_fini :: proc() { - stdout := win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) - if stdout != win32.INVALID_HANDLE && stdout != nil { - win32.SetConsoleMode(stdout, old_stdout_mode) - } - - stderr := win32.GetStdHandle(win32.STD_ERROR_HANDLE) - if stderr != win32.INVALID_HANDLE && stderr != nil { - win32.SetConsoleMode(stderr, old_stderr_mode) - } -} \ No newline at end of file From 899cfe9c3786f8b4807a415d0d13abe9e5e6ad96 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Wed, 21 May 2025 08:40:19 -0400 Subject: [PATCH 112/120] Also use `ENABLE_PROCESSED_OUTPUT` on Windows terminals This is specified to be necessary when using `ENABLE_VIRTUAL_TERMINAL_PROCESSING`. --- core/terminal/terminal_windows.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/terminal/terminal_windows.odin b/core/terminal/terminal_windows.odin index cc28add98..18ec98332 100644 --- a/core/terminal/terminal_windows.odin +++ b/core/terminal/terminal_windows.odin @@ -27,12 +27,12 @@ _init_terminal :: proc() { return } if windows.GetConsoleMode(handle, &v.mode) { - windows.SetConsoleMode(handle, v.mode | windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING) + windows.SetConsoleMode(handle, v.mode | windows.ENABLE_PROCESSED_OUTPUT | windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING) new_mode: windows.DWORD windows.GetConsoleMode(handle, &new_mode) - if new_mode & windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 { + if new_mode & (windows.ENABLE_PROCESSED_OUTPUT | windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING) != 0 { vtp_enabled = true } } From 1662ab10af9187a91a8b26867074a797237aa28a Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Wed, 21 May 2025 09:26:24 -0400 Subject: [PATCH 113/120] Fix off-by-one error in `priority_queue.remove` --- core/container/priority_queue/priority_queue.odin | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/core/container/priority_queue/priority_queue.odin b/core/container/priority_queue/priority_queue.odin index 7387a8d09..c62a821f4 100644 --- a/core/container/priority_queue/priority_queue.odin +++ b/core/container/priority_queue/priority_queue.odin @@ -133,12 +133,10 @@ pop_safe :: proc(pq: ^$Q/Priority_Queue($T), loc := #caller_location) -> (value: remove :: proc(pq: ^$Q/Priority_Queue($T), i: int) -> (value: T, ok: bool) { n := builtin.len(pq.queue) if 0 <= i && i < n { - if n != i { - pq.swap(pq.queue[:], i, n) - _shift_down(pq, i, n) - _shift_up(pq, i) - } - value, ok = builtin.pop_safe(&pq.queue) + pq.swap(pq.queue[:], i, n-1) + _shift_down(pq, i, n-1) + _shift_up(pq, i) + value, ok = builtin.pop(&pq.queue), true } return } From 96fd07e0eec5e75ab746efc9b0fe2d46caa52950 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Wed, 21 May 2025 19:20:58 +0200 Subject: [PATCH 114/120] Fix #5177 - Tweak error messages. --- src/check_expr.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 167052772..8721aab5d 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5461,6 +5461,16 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod } } + if (operand->type && is_type_simd_vector(type_deref(operand->type))) { + String field_name = selector->Ident.token.string; + if (field_name.len == 1) { + error(op_expr, "Extracting an element from a #simd array using .%.*s syntax is disallowed, prefer `simd.extract`", LIT(field_name)); + } else { + error(op_expr, "Extracting elements from a #simd array using .%.*s syntax is disallowed, prefer `swizzle`", LIT(field_name)); + } + return nullptr; + } + if (entity == nullptr && selector->kind == Ast_Ident && operand->type != nullptr && (is_type_array(type_deref(operand->type)) || is_type_simd_vector(type_deref(operand->type)))) { String field_name = selector->Ident.token.string; From 95183e4b9ce7f5cecf652e129ace6b7b15362167 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Wed, 21 May 2025 19:37:09 +0200 Subject: [PATCH 115/120] Remove now unnecessary checks. --- src/check_expr.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 8721aab5d..95c898adf 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5472,7 +5472,7 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod } if (entity == nullptr && selector->kind == Ast_Ident && operand->type != nullptr && - (is_type_array(type_deref(operand->type)) || is_type_simd_vector(type_deref(operand->type)))) { + (is_type_array(type_deref(operand->type)))) { String field_name = selector->Ident.token.string; if (1 < field_name.len && field_name.len <= 4) { u8 swizzles_xyzw[4] = {'x', 'y', 'z', 'w'}; @@ -5527,7 +5527,7 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod Type *original_type = operand->type; Type *array_type = base_type(type_deref(original_type)); - GB_ASSERT(array_type->kind == Type_Array || array_type->kind == Type_SimdVector); + GB_ASSERT(array_type->kind == Type_Array); i64 array_count = get_array_type_count(array_type); @@ -5568,10 +5568,6 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod break; } - if (array_type->kind == Type_SimdVector) { - operand->mode = Addressing_Value; - } - Entity *swizzle_entity = alloc_entity_variable(nullptr, make_token_ident(field_name), operand->type, EntityState_Resolved); add_type_and_value(c, operand->expr, operand->mode, operand->type, operand->value); return swizzle_entity; From c32b7ba593f78469d12a3ffdf333e7fb54116316 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Wed, 21 May 2025 20:24:27 +0200 Subject: [PATCH 116/120] List -subtarget in `odin help build` --- src/main.cpp | 115 +++++++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 50 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 3692e4f06..bc57c677e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2364,20 +2364,20 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-build-mode:")) { print_usage_line(2, "Sets the build mode."); print_usage_line(2, "Available options:"); - print_usage_line(3, "-build-mode:exe Builds as an executable."); - print_usage_line(3, "-build-mode:test Builds as an executable that executes tests."); - print_usage_line(3, "-build-mode:dll Builds as a dynamically linked library."); - print_usage_line(3, "-build-mode:shared Builds as a dynamically linked library."); - print_usage_line(3, "-build-mode:dynamic Builds as a dynamically linked library."); - print_usage_line(3, "-build-mode:lib Builds as a statically linked library."); - print_usage_line(3, "-build-mode:static Builds as a statically linked library."); - print_usage_line(3, "-build-mode:obj Builds as an object file."); - print_usage_line(3, "-build-mode:object Builds as an object file."); - print_usage_line(3, "-build-mode:assembly Builds as an assembly file."); - print_usage_line(3, "-build-mode:assembler Builds as an assembly file."); - print_usage_line(3, "-build-mode:asm Builds as an assembly file."); - print_usage_line(3, "-build-mode:llvm-ir Builds as an LLVM IR file."); - print_usage_line(3, "-build-mode:llvm Builds as an LLVM IR file."); + print_usage_line(3, "-build-mode:exe Builds as an executable."); + print_usage_line(3, "-build-mode:test Builds as an executable that executes tests."); + print_usage_line(3, "-build-mode:dll Builds as a dynamically linked library."); + print_usage_line(3, "-build-mode:shared Builds as a dynamically linked library."); + print_usage_line(3, "-build-mode:dynamic Builds as a dynamically linked library."); + print_usage_line(3, "-build-mode:lib Builds as a statically linked library."); + print_usage_line(3, "-build-mode:static Builds as a statically linked library."); + print_usage_line(3, "-build-mode:obj Builds as an object file."); + print_usage_line(3, "-build-mode:object Builds as an object file."); + print_usage_line(3, "-build-mode:assembly Builds as an assembly file."); + print_usage_line(3, "-build-mode:assembler Builds as an assembly file."); + print_usage_line(3, "-build-mode:asm Builds as an assembly file."); + print_usage_line(3, "-build-mode:llvm-ir Builds as an LLVM IR file."); + print_usage_line(3, "-build-mode:llvm Builds as an LLVM IR file."); } } @@ -2386,16 +2386,16 @@ gb_internal int print_show_help(String const arg0, String command, String option print_usage_line(2, "Defines a library collection used for imports."); print_usage_line(2, "Example: -collection:shared=dir/to/shared"); print_usage_line(2, "Usage in Code:"); - print_usage_line(3, "import \"shared:foo\""); + print_usage_line(3, "import \"shared:foo\""); } if (print_flag("-custom-attribute:")) { print_usage_line(2, "Add a custom attribute which will be ignored if it is unknown."); print_usage_line(2, "This can be used with metaprogramming tools."); print_usage_line(2, "Examples:"); - print_usage_line(3, "-custom-attribute:my_tag"); - print_usage_line(3, "-custom-attribute:my_tag,the_other_thing"); - print_usage_line(3, "-custom-attribute:my_tag -custom-attribute:the_other_thing"); + print_usage_line(3, "-custom-attribute:my_tag"); + print_usage_line(3, "-custom-attribute:my_tag,the_other_thing"); + print_usage_line(3, "-custom-attribute:my_tag -custom-attribute:the_other_thing"); } } @@ -2418,7 +2418,7 @@ gb_internal int print_show_help(String const arg0, String command, String option print_usage_line(2, "Defines a scalar boolean, integer or string as global constant."); print_usage_line(2, "Example: -define:SPAM=123"); print_usage_line(2, "Usage in code:"); - print_usage_line(3, "#config(SPAM, default_value)"); + print_usage_line(3, "#config(SPAM, default_value)"); } } @@ -2453,9 +2453,9 @@ gb_internal int print_show_help(String const arg0, String command, String option if (check) { if (print_flag("-error-pos-style:")) { print_usage_line(2, "Available options:"); - print_usage_line(3, "-error-pos-style:unix file/path:45:3:"); - print_usage_line(3, "-error-pos-style:odin file/path(45:3)"); - print_usage_line(3, "-error-pos-style:default (Defaults to 'odin'.)"); + print_usage_line(3, "-error-pos-style:unix file/path:45:3:"); + print_usage_line(3, "-error-pos-style:odin file/path(45:3)"); + print_usage_line(3, "-error-pos-style:default (Defaults to 'odin'.)"); } if (print_flag("-export-defineables:")) { @@ -2466,8 +2466,8 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-export-dependencies:")) { print_usage_line(2, "Exports dependencies to one of a few formats. Requires `-export-dependencies-file`."); print_usage_line(2, "Available options:"); - print_usage_line(3, "-export-dependencies:make Exports in Makefile format"); - print_usage_line(3, "-export-dependencies:json Exports in JSON format"); + print_usage_line(3, "-export-dependencies:make Exports in Makefile format"); + print_usage_line(3, "-export-dependencies:json Exports in JSON format"); } if (print_flag("-export-dependencies-file:")) { @@ -2478,8 +2478,8 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-export-timings:")) { print_usage_line(2, "Exports timings to one of a few formats. Requires `-show-timings` or `-show-more-timings`."); print_usage_line(2, "Available options:"); - print_usage_line(3, "-export-timings:json Exports compile time stats to JSON."); - print_usage_line(3, "-export-timings:csv Exports compile time stats to CSV."); + print_usage_line(3, "-export-timings:json Exports compile time stats to JSON."); + print_usage_line(3, "-export-timings:csv Exports compile time stats to CSV."); } if (print_flag("-export-timings-file:")) { @@ -2569,9 +2569,9 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-microarch:")) { print_usage_line(2, "Specifies the specific micro-architecture for the build in a string."); print_usage_line(2, "Examples:"); - print_usage_line(3, "-microarch:sandybridge"); - print_usage_line(3, "-microarch:native"); - print_usage_line(3, "-microarch:\"?\" for a list"); + print_usage_line(3, "-microarch:sandybridge"); + print_usage_line(3, "-microarch:native"); + print_usage_line(3, "-microarch:\"?\" for a list"); } } @@ -2628,10 +2628,10 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-o:")) { print_usage_line(2, "Sets the optimization mode for compilation."); print_usage_line(2, "Available options:"); - print_usage_line(3, "-o:none"); - print_usage_line(3, "-o:minimal"); - print_usage_line(3, "-o:size"); - print_usage_line(3, "-o:speed"); + print_usage_line(3, "-o:none"); + print_usage_line(3, "-o:minimal"); + print_usage_line(3, "-o:size"); + print_usage_line(3, "-o:speed"); if (LB_USE_NEW_PASS_SYSTEM) { print_usage_line(3, "-o:aggressive (use this with caution)"); } @@ -2682,10 +2682,10 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-reloc-mode:")) { print_usage_line(2, "Specifies the reloc mode."); print_usage_line(2, "Available options:"); - print_usage_line(3, "-reloc-mode:default"); - print_usage_line(3, "-reloc-mode:static"); - print_usage_line(3, "-reloc-mode:pic"); - print_usage_line(3, "-reloc-mode:dynamic-no-pic"); + print_usage_line(3, "-reloc-mode:default"); + print_usage_line(3, "-reloc-mode:static"); + print_usage_line(3, "-reloc-mode:pic"); + print_usage_line(3, "-reloc-mode:dynamic-no-pic"); } #if defined(GB_SYSTEM_WINDOWS) @@ -2700,9 +2700,9 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-sanitize:")) { print_usage_line(2, "Enables sanitization analysis."); print_usage_line(2, "Available options:"); - print_usage_line(3, "-sanitize:address"); - print_usage_line(3, "-sanitize:memory"); - print_usage_line(3, "-sanitize:thread"); + print_usage_line(3, "-sanitize:address"); + print_usage_line(3, "-sanitize:memory"); + print_usage_line(3, "-sanitize:thread"); print_usage_line(2, "NOTE: This flag can be used multiple times."); } } @@ -2763,17 +2763,32 @@ gb_internal int print_show_help(String const arg0, String command, String option print_usage_line(2, "[Windows only]"); print_usage_line(2, "Defines the subsystem for the application."); print_usage_line(2, "Available options:"); - print_usage_line(3, "-subsystem:console"); - print_usage_line(3, "-subsystem:windows"); + print_usage_line(3, "-subsystem:console"); + print_usage_line(3, "-subsystem:windows"); } #endif + } + if (build) { + if (print_flag("-subtarget")) { + print_usage_line(2, "[Darwin and Linux only]"); + print_usage_line(2, "Available subtargets:"); + String prefix = str_lit("-subtarget:"); + for (u32 i = 1; i < Subtarget_COUNT; i++) { + String name = subtarget_strings[i]; + String help_string = concatenate_strings(temporary_allocator(), prefix, name); + print_usage_line(3, (const char *)help_string.text); + } + } + } + + if (run_or_build) { if (print_flag("-target-features:")) { print_usage_line(2, "Specifies CPU features to enable on top of the enabled features implied by -microarch."); print_usage_line(2, "Examples:"); - print_usage_line(3, "-target-features:atomics"); - print_usage_line(3, "-target-features:\"sse2,aes\""); - print_usage_line(3, "-target-features:\"?\" for a list"); + print_usage_line(3, "-target-features:atomics"); + print_usage_line(3, "-target-features:\"sse2,aes\""); + print_usage_line(3, "-target-features:\"?\" for a list"); } } @@ -2810,11 +2825,11 @@ gb_internal int print_show_help(String const arg0, String command, String option if (print_flag("-vet")) { print_usage_line(2, "Does extra checks on the code."); print_usage_line(2, "Extra checks include:"); - print_usage_line(3, "-vet-unused"); - print_usage_line(3, "-vet-unused-variables"); - print_usage_line(3, "-vet-unused-imports"); - print_usage_line(3, "-vet-shadowing"); - print_usage_line(3, "-vet-using-stmt"); + print_usage_line(3, "-vet-unused"); + print_usage_line(3, "-vet-unused-variables"); + print_usage_line(3, "-vet-unused-imports"); + print_usage_line(3, "-vet-shadowing"); + print_usage_line(3, "-vet-using-stmt"); } if (print_flag("-vet-cast")) { From f8bbeb54d4a6ce1e2c17cec68bd6fbeb5e628121 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Wed, 21 May 2025 20:28:21 +0200 Subject: [PATCH 117/120] Slight tweak. --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index bc57c677e..90f2aad7a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2770,7 +2770,7 @@ gb_internal int print_show_help(String const arg0, String command, String option } if (build) { - if (print_flag("-subtarget")) { + if (print_flag("-subtarget:")) { print_usage_line(2, "[Darwin and Linux only]"); print_usage_line(2, "Available subtargets:"); String prefix = str_lit("-subtarget:"); From e35e1dcc7b4814a063c94b9bb02f1e371ae251a5 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Thu, 22 May 2025 08:08:53 -0400 Subject: [PATCH 118/120] Only trim `.odin` from build filenames --- src/build_settings.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 8364bbfbe..b3bbf726b 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -2209,11 +2209,34 @@ gb_internal bool init_build_paths(String init_filename) { while (output_name.len > 0 && (output_name[output_name.len-1] == '/' || output_name[output_name.len-1] == '\\')) { output_name.len -= 1; } + // Only trim the extension if it's an Odin source file. + // This lets people build folders with extensions or files beginning with dots. + if (path_extension(output_name) == ".odin" && !path_is_directory(output_name)) { + output_name = remove_extension_from_path(output_name); + } output_name = remove_directory_from_path(output_name); - output_name = remove_extension_from_path(output_name); output_name = copy_string(ha, string_trim_whitespace(output_name)); - output_path = path_from_string(ha, output_name); - + // This is `path_from_string` without the extension trimming. + Path res = {}; + if (output_name.len > 0) { + String fullpath = path_to_full_path(ha, output_name); + defer (gb_free(ha, fullpath.text)); + + res.basename = directory_from_path(fullpath); + res.basename = copy_string(ha, res.basename); + + if (path_is_directory(fullpath)) { + if (res.basename.len > 0 && res.basename.text[res.basename.len - 1] == '/') { + res.basename.len--; + } + } else { + isize name_start = (res.basename.len > 0) ? res.basename.len + 1 : res.basename.len; + res.name = substring(fullpath, name_start, fullpath.len); + res.name = copy_string(ha, res.name); + } + } + output_path = res; + // Note(Dragos): This is a fix for empty filenames // Turn the trailing folder into the file name if (output_path.name.len == 0) { From 713360a792ea54211624f7ac18e68c4c4a16aeb1 Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Sat, 17 May 2025 18:15:08 -0400 Subject: [PATCH 119/120] Keep shared libraries from calling main program's startup/cleanup procs on Linux --- src/llvm_backend.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 7de147058..395238753 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1907,6 +1907,10 @@ gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProc lb_add_attribute_to_proc(p->module, p->value, "optnone"); lb_add_attribute_to_proc(p->module, p->value, "noinline"); + // Make sure shared libraries call their own runtime startup on Linux. + LLVMSetVisibility(p->value, LLVMHiddenVisibility); + LLVMSetLinkage(p->value, LLVMWeakAnyLinkage); + lb_begin_procedure_body(p); lb_setup_type_info_data(main_module); @@ -2016,6 +2020,10 @@ gb_internal lbProcedure *lb_create_cleanup_runtime(lbModule *main_module) { // C lb_add_attribute_to_proc(p->module, p->value, "optnone"); lb_add_attribute_to_proc(p->module, p->value, "noinline"); + // Make sure shared libraries call their own runtime cleanup on Linux. + LLVMSetVisibility(p->value, LLVMHiddenVisibility); + LLVMSetLinkage(p->value, LLVMWeakAnyLinkage); + lb_begin_procedure_body(p); CheckerInfo *info = main_module->gen->info; From affced2d02090762dff8360d9357bfbbc8e18938 Mon Sep 17 00:00:00 2001 From: Hector Date: Thu, 22 May 2025 15:35:09 +0100 Subject: [PATCH 120/120] Added Semaphore API to the SDL3 vendor bindings --- vendor/sdl3/sdl3_mutex.odin | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/vendor/sdl3/sdl3_mutex.odin b/vendor/sdl3/sdl3_mutex.odin index ada8006bc..8067473f3 100644 --- a/vendor/sdl3/sdl3_mutex.odin +++ b/vendor/sdl3/sdl3_mutex.odin @@ -1,8 +1,8 @@ package sdl3 -Mutex :: struct {} -RWLock :: struct {} - +Mutex :: struct {} +RWLock :: struct {} +Semaphore :: struct {} @(default_calling_convention="c", link_prefix="SDL_", require_results) foreign lib { @@ -19,4 +19,12 @@ foreign lib { TryLockRWLockForWriting :: proc(rwlock: ^RWLock) -> bool --- UnlockRWLock :: proc(rwlock: ^RWLock) --- DestroyRWLock :: proc(rwlock: ^RWLock) --- -} \ No newline at end of file + + CreateSemaphore :: proc(initial_value: Uint32) -> ^Semaphore --- + DestroySemaphore :: proc(sem: ^Semaphore) --- + GetSemaphoreValue :: proc(sem: ^Semaphore) -> Uint32 --- + SignalSemaphore :: proc(sem: ^Semaphore) --- + TryWaitSemaphore :: proc(sem: ^Semaphore) -> bool --- + WaitSemaphore :: proc(sem: ^Semaphore) --- + WaitSemaphoreTimeout :: proc(sem: ^Semaphore, timeout_ms: Sint32) --- +}