From 751063b4b07f7194631c01c9b04ad1df49d4de2d Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Thu, 12 Mar 2026 23:35:18 -0700 Subject: [PATCH] Fix addon files not loading: use @hasDecl instead of @hasField @hasField only works on struct fields, not module declarations. build_options is a module, so @hasField always returned false, silently skipping all addon file embedding and registration. --- src/addons.zig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/addons.zig b/src/addons.zig index 30fcf93..67a07e8 100644 --- a/src/addons.zig +++ b/src/addons.zig @@ -200,25 +200,25 @@ fn appendAssetPrefixes(result: anytype, start_idx: usize, comptime paths: []cons /// Check if a module has an addon (addon_name build option exists and is non-empty). fn hasAddon(comptime name: []const u8) bool { - if (!@hasField(build_options, name ++ "_addon_name")) return false; + if (!@hasDecl(build_options, name ++ "_addon_name")) return false; return @field(build_options, name ++ "_addon_name").len > 0; } /// Get addon file paths for a module (empty if no addon or no files). fn getAddonFiles(comptime name: []const u8) []const []const u8 { - if (!@hasField(build_options, name ++ "_addon_files")) return &.{}; + if (!@hasDecl(build_options, name ++ "_addon_files")) return &.{}; return @field(build_options, name ++ "_addon_files"); } /// Get asset file paths for a module (empty if no assets). fn getAssetFiles(comptime name: []const u8) []const []const u8 { - if (!@hasField(build_options, name ++ "_asset_files")) return &.{}; + if (!@hasDecl(build_options, name ++ "_asset_files")) return &.{}; return @field(build_options, name ++ "_asset_files"); } /// Get hidden flag for a module. fn isHidden(comptime name: []const u8) bool { - if (!@hasField(build_options, name ++ "_addon_hidden")) return false; + if (!@hasDecl(build_options, name ++ "_addon_hidden")) return false; return @field(build_options, name ++ "_addon_hidden"); }