diff --git a/src/sema.zig b/src/sema.zig index a7184e7..ecc967d 100644 --- a/src/sema.zig +++ b/src/sema.zig @@ -690,7 +690,20 @@ pub const Analyzer = struct { try self.analyzeNode(val); } }, - .enum_decl, .struct_decl, .union_decl, .array_type_expr, .slice_type_expr, .array_literal, .parameterized_type_expr, .index_expr, .slice_expr, .insert_expr, .ufcs_alias => {}, + .struct_decl => |sd| { + // Analyse method bodies (each in its own scope) so identifiers + // used inside them are recorded as references. + for (sd.methods) |mnode| { + if (mnode.data == .fn_decl) { + const m = mnode.data.fn_decl; + try self.pushScope(); + try self.analyzeParams(m.params); + try self.analyzeNode(m.body); + self.popScope(); + } + } + }, + .enum_decl, .union_decl, .array_type_expr, .slice_type_expr, .array_literal, .parameterized_type_expr, .index_expr, .slice_expr, .insert_expr, .ufcs_alias => {}, .namespace_decl => |ns| { try self.pushScope(); for (ns.decls) |d| {