Skip to content

Commit 99afeee

Browse files
jgarzikclaude
andcommitted
cc: replace manual Default impls with #[derive(Default)]
Replace boilerplate new()/impl Default with #[derive(Default)] for Module, Pseudo, PseudoId, PseudoKind, TranslationUnit, SymbolInfo, and CrossRef. Use .or_default() instead of .or_insert_with(T::new). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1e4ee4e commit 99afeee

File tree

7 files changed

+43
-93
lines changed

7 files changed

+43
-93
lines changed

cc/arch/mapping.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,7 +1838,7 @@ mod tests {
18381838
fn test_run_mapping_empty() {
18391839
let target = Target::new(Arch::X86_64, Os::Linux);
18401840
let types = TypeTable::new(&target);
1841-
let mut module = Module::new();
1841+
let mut module = Module::default();
18421842

18431843
run_mapping(&mut module, &types, &target);
18441844
}
@@ -1848,7 +1848,7 @@ mod tests {
18481848
let target = Target::new(Arch::X86_64, Os::Linux);
18491849
let types = TypeTable::new(&target);
18501850

1851-
let mut module = Module::new();
1851+
let mut module = Module::default();
18521852
module.add_function(make_test_func(&types));
18531853
module.add_function(make_test_func(&types));
18541854

@@ -1860,7 +1860,7 @@ mod tests {
18601860
let target = Target::new(Arch::X86_64, Os::Linux);
18611861
let types = TypeTable::new(&target);
18621862

1863-
let mut module = Module::new();
1863+
let mut module = Module::default();
18641864
module.add_function(make_test_func(&types));
18651865

18661866
run_mapping(&mut module, &types, &target);
@@ -1879,7 +1879,7 @@ mod tests {
18791879

18801880
for target in &targets {
18811881
let types = TypeTable::new(target);
1882-
let mut module = Module::new();
1882+
let mut module = Module::default();
18831883
module.add_function(make_test_func(&types));
18841884
run_mapping(&mut module, &types, target);
18851885
}
@@ -1890,7 +1890,7 @@ mod tests {
18901890
let target = Target::new(Arch::X86_64, Os::Linux);
18911891
let types = TypeTable::new(&target);
18921892

1893-
let mut module = Module::new();
1893+
let mut module = Module::default();
18941894
module.add_function(make_test_func(&types));
18951895
let orig_insn_count = module.functions[0].blocks[0].insns.len();
18961896

@@ -1905,7 +1905,7 @@ mod tests {
19051905
let target = Target::new(Arch::Aarch64, Os::Linux);
19061906
let types = TypeTable::new(&target);
19071907

1908-
let mut module = Module::new();
1908+
let mut module = Module::default();
19091909
module.add_function(make_test_func(&types));
19101910
let orig_insn_count = module.functions[0].blocks[0].insns.len();
19111911

@@ -1943,7 +1943,7 @@ mod tests {
19431943
func.add_block(bb);
19441944
func.entry = BasicBlockId(0);
19451945

1946-
let mut module = Module::new();
1946+
let mut module = Module::default();
19471947
module.add_function(func);
19481948
run_mapping(&mut module, &types, &target);
19491949

@@ -1984,7 +1984,7 @@ mod tests {
19841984
func.add_block(bb);
19851985
func.entry = BasicBlockId(0);
19861986

1987-
let mut module = Module::new();
1987+
let mut module = Module::default();
19881988
module.add_function(func);
19891989
run_mapping(&mut module, &types, &target);
19901990

cc/cxref.rs

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -77,20 +77,14 @@ struct SymbolRef {
7777
}
7878

7979
/// Information about a symbol across files
80-
#[derive(Debug, Clone)]
80+
#[derive(Debug, Clone, Default)]
8181
struct SymbolInfo {
8282
/// References organized by file, then by function scope
8383
/// Map: file -> Map: function (or empty for global) -> refs
8484
refs: BTreeMap<String, BTreeMap<String, BTreeSet<SymbolRef>>>,
8585
}
8686

8787
impl SymbolInfo {
88-
fn new() -> Self {
89-
Self {
90-
refs: BTreeMap::new(),
91-
}
92-
}
93-
9488
fn add_ref(&mut self, file: &str, function: &str, line: u32, is_definition: bool) {
9589
self.refs
9690
.entry(file.to_string())
@@ -105,6 +99,7 @@ impl SymbolInfo {
10599
}
106100

107101
/// Cross-reference table
102+
#[derive(Default)]
108103
struct CrossRef {
109104
/// All symbols: name -> info
110105
symbols: BTreeMap<String, SymbolInfo>,
@@ -115,14 +110,6 @@ struct CrossRef {
115110
}
116111

117112
impl CrossRef {
118-
fn new() -> Self {
119-
Self {
120-
symbols: BTreeMap::new(),
121-
current_file: String::new(),
122-
current_function: String::new(),
123-
}
124-
}
125-
126113
fn set_file(&mut self, file: &str) {
127114
self.current_file = file.to_string();
128115
}
@@ -132,17 +119,21 @@ impl CrossRef {
132119
}
133120

134121
fn add_definition(&mut self, name: &str, line: u32) {
135-
self.symbols
136-
.entry(name.to_string())
137-
.or_insert_with(SymbolInfo::new)
138-
.add_ref(&self.current_file, &self.current_function, line, true);
122+
self.symbols.entry(name.to_string()).or_default().add_ref(
123+
&self.current_file,
124+
&self.current_function,
125+
line,
126+
true,
127+
);
139128
}
140129

141130
fn add_reference(&mut self, name: &str, line: u32) {
142-
self.symbols
143-
.entry(name.to_string())
144-
.or_insert_with(SymbolInfo::new)
145-
.add_ref(&self.current_file, &self.current_function, line, false);
131+
self.symbols.entry(name.to_string()).or_default().add_ref(
132+
&self.current_file,
133+
&self.current_function,
134+
line,
135+
false,
136+
);
146137
}
147138
}
148139

@@ -561,7 +552,7 @@ fn main() -> ExitCode {
561552
}
562553

563554
// Build cross-reference
564-
let mut xref = CrossRef::new();
555+
let mut xref = CrossRef::default();
565556
let mut streams = StreamTable::new();
566557

567558
for file in &args.files {
@@ -586,7 +577,7 @@ fn main() -> ExitCode {
586577
// In non-combined mode, print and reset after each file
587578
if !args.combined {
588579
print_xref(&xref, args.width, args.silent, &mut *output_file);
589-
xref = CrossRef::new();
580+
xref = CrossRef::default();
590581
}
591582
}
592583
_ => {

cc/ir/inline.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,7 @@ mod tests {
12391239
#[test]
12401240
fn test_analyze_simple_function() {
12411241
let func = make_simple_func("test", true);
1242-
let mut module = Module::new();
1242+
let mut module = Module::default();
12431243
module.functions.push(func);
12441244

12451245
let call_counts = build_call_count_map(&module);
@@ -1337,7 +1337,7 @@ mod tests {
13371337
#[test]
13381338
fn test_address_taken_function_not_removed() {
13391339
let types = TypeTable::new(&Target::host());
1340-
let mut module = Module::new();
1340+
let mut module = Module::default();
13411341

13421342
// Create a static function "handler" that would be removed if not address-taken
13431343
let mut handler = Function::new("handler", types.int_id);
@@ -1404,7 +1404,7 @@ mod tests {
14041404
// are NOT removed by dead function elimination.
14051405
// This tests the fix for: static const struct { func_ptr fn; } = { my_func };
14061406
let types = TypeTable::new(&Target::host());
1407-
let mut module = Module::new();
1407+
let mut module = Module::default();
14081408

14091409
// Create a static function "callback" with no direct callers
14101410
let mut callback = Function::new("callback", types.int_id);
@@ -1463,7 +1463,7 @@ mod tests {
14631463
fn test_global_struct_initializer_func_ref_preserved() {
14641464
// Test function refs inside struct initializers in globals
14651465
let types = TypeTable::new(&Target::host());
1466-
let mut module = Module::new();
1466+
let mut module = Module::default();
14671467

14681468
// Create static function "my_handler"
14691469
let mut handler = Function::new("my_handler", types.int_id);
@@ -1516,7 +1516,7 @@ mod tests {
15161516
fn test_global_array_initializer_func_ref_preserved() {
15171517
// Test function refs inside array initializers in globals
15181518
let types = TypeTable::new(&Target::host());
1519-
let mut module = Module::new();
1519+
let mut module = Module::default();
15201520

15211521
// Create static function "arr_func"
15221522
let mut func = Function::new("arr_func", types.int_id);

cc/ir/linearize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ impl<'a> Linearizer<'a> {
214214
target: &'a Target,
215215
) -> Self {
216216
Self {
217-
module: Module::new(),
217+
module: Module::default(),
218218
current_func: None,
219219
current_bb: None,
220220
next_pseudo: 0,

cc/ir/mod.rs

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ impl fmt::Display for MemoryOrder {
453453
// ============================================================================
454454

455455
/// Unique ID for a pseudo (virtual register)
456-
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
456+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
457457
pub struct PseudoId(pub u32);
458458

459459
impl fmt::Display for PseudoId {
@@ -463,9 +463,10 @@ impl fmt::Display for PseudoId {
463463
}
464464

465465
/// Type of pseudo value
466-
#[derive(Debug, Clone, PartialEq)]
466+
#[derive(Debug, Clone, PartialEq, Default)]
467467
pub enum PseudoKind {
468468
/// Void (no value)
469+
#[default]
469470
Void,
470471
/// Undefined value
471472
Undef,
@@ -484,7 +485,7 @@ pub enum PseudoKind {
484485
}
485486

486487
/// A pseudo (virtual register or value) in SSA form
487-
#[derive(Debug, Clone)]
488+
#[derive(Debug, Clone, Default)]
488489
pub struct Pseudo {
489490
pub id: PseudoId,
490491
pub kind: PseudoKind,
@@ -498,16 +499,6 @@ impl PartialEq for Pseudo {
498499
}
499500
}
500501

501-
impl Default for Pseudo {
502-
fn default() -> Self {
503-
Self {
504-
id: PseudoId(0),
505-
kind: PseudoKind::Void,
506-
name: None,
507-
}
508-
}
509-
}
510-
511502
impl Pseudo {
512503
/// Create an undefined pseudo
513504
pub fn undef(id: PseudoId) -> Self {
@@ -1722,7 +1713,7 @@ impl GlobalDef {
17221713
// ============================================================================
17231714

17241715
/// A module containing multiple functions
1725-
#[derive(Debug, Clone)]
1716+
#[derive(Debug, Clone, Default)]
17261717
pub struct Module {
17271718
/// Functions
17281719
pub functions: Vec<Function>,
@@ -1749,22 +1740,6 @@ pub struct Module {
17491740
}
17501741

17511742
impl Module {
1752-
/// Create a new module
1753-
pub fn new() -> Self {
1754-
Self {
1755-
functions: Vec::new(),
1756-
globals: Vec::new(),
1757-
strings: Vec::new(),
1758-
wide_strings: Vec::new(),
1759-
debug: false,
1760-
source_files: Vec::new(),
1761-
extern_symbols: HashSet::new(),
1762-
extern_tls_symbols: HashSet::new(),
1763-
comp_dir: None,
1764-
source_name: None,
1765-
}
1766-
}
1767-
17681743
/// Add a function
17691744
pub fn add_function(&mut self, func: Function) {
17701745
self.functions.push(func);
@@ -1857,12 +1832,6 @@ impl Module {
18571832
}
18581833
}
18591834

1860-
impl Default for Module {
1861-
fn default() -> Self {
1862-
Self::new()
1863-
}
1864-
}
1865-
18661835
impl fmt::Display for Module {
18671836
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18681837
// Globals
@@ -2060,7 +2029,7 @@ mod tests {
20602029
#[test]
20612030
fn test_module() {
20622031
let types = TypeTable::new(&Target::host());
2063-
let mut module = Module::new();
2032+
let mut module = Module::default();
20642033

20652034
module.add_global("counter", types.int_id, Initializer::Int(0));
20662035

@@ -2073,7 +2042,7 @@ mod tests {
20732042

20742043
#[test]
20752044
fn test_module_extern_symbols() {
2076-
let mut module = Module::new();
2045+
let mut module = Module::default();
20772046

20782047
// New module should have empty extern_symbols
20792048
assert!(module.extern_symbols.is_empty());
@@ -2181,7 +2150,7 @@ mod tests {
21812150
#[test]
21822151
fn test_add_global_aligned_tentative_definition() {
21832152
let types = TypeTable::new(&Target::host());
2184-
let mut module = Module::new();
2153+
let mut module = Module::default();
21852154

21862155
// Add a tentative definition (no initializer)
21872156
module.add_global_aligned("x", types.int_id, Initializer::None, None, false);
@@ -2198,7 +2167,7 @@ mod tests {
21982167
#[test]
21992168
fn test_add_global_aligned_non_tentative_not_replaced() {
22002169
let types = TypeTable::new(&Target::host());
2201-
let mut module = Module::new();
2170+
let mut module = Module::default();
22022171

22032172
// Add a real definition (with initializer)
22042173
module.add_global_aligned("x", types.int_id, Initializer::Int(10), None, false);
@@ -2212,7 +2181,7 @@ mod tests {
22122181
#[test]
22132182
fn test_add_global_tls_aligned_tentative_definition() {
22142183
let types = TypeTable::new(&Target::host());
2215-
let mut module = Module::new();
2184+
let mut module = Module::default();
22162185

22172186
// Add a TLS tentative definition
22182187
module.add_global_tls_aligned("tls_var", types.int_id, Initializer::None, None, false);

cc/parse/ast.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,27 +1032,17 @@ pub enum ExternalDecl {
10321032
}
10331033

10341034
/// A translation unit (entire source file)
1035-
#[derive(Debug, Clone)]
1035+
#[derive(Debug, Clone, Default)]
10361036
pub struct TranslationUnit {
10371037
pub items: Vec<ExternalDecl>,
10381038
}
10391039

10401040
impl TranslationUnit {
1041-
pub fn new() -> Self {
1042-
TranslationUnit { items: Vec::new() }
1043-
}
1044-
10451041
pub fn add(&mut self, item: ExternalDecl) {
10461042
self.items.push(item);
10471043
}
10481044
}
10491045

1050-
impl Default for TranslationUnit {
1051-
fn default() -> Self {
1052-
Self::new()
1053-
}
1054-
}
1055-
10561046
// ============================================================================
10571047
// Tests
10581048
// ============================================================================
@@ -1311,7 +1301,7 @@ mod tests {
13111301
let x_sym = symbols
13121302
.declare(Symbol::variable(x_name, types.int_id, 0))
13131303
.unwrap();
1314-
let mut tu = TranslationUnit::new();
1304+
let mut tu = TranslationUnit::default();
13151305

13161306
// Add a declaration
13171307
let decl = Declaration::simple(x_sym, types.int_id, None);

0 commit comments

Comments
 (0)