Skip to content

Commit 13dbb9c

Browse files
committed
fmt + opt
1 parent d5624b3 commit 13dbb9c

File tree

32 files changed

+334
-184
lines changed

32 files changed

+334
-184
lines changed

crates/dotnet-cli/tests/feature_config_tests.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ fn test_single_threaded_stub_thread_manager() {
1919
let _shared = Arc::new(state::SharedGlobalState::new(loader));
2020

2121
// Thread manager should provide a consistent thread ID (always 1)
22-
assert_eq!(dotnet_utils::sync::get_current_thread_id(), dotnet_utils::ArenaId(1));
22+
assert_eq!(
23+
dotnet_utils::sync::get_current_thread_id(),
24+
dotnet_utils::ArenaId(1)
25+
);
2326
}
2427

2528
#[test]
@@ -115,7 +118,9 @@ fn test_multithreaded_gc_arena_handle() {
115118

116119
// Register and unregister the arena
117120
shared.gc_coordinator.register_arena(handle.clone());
118-
shared.gc_coordinator.unregister_arena(dotnet_utils::ArenaId(1));
121+
shared
122+
.gc_coordinator
123+
.unregister_arena(dotnet_utils::ArenaId(1));
119124
}
120125

121126
#[test]

crates/dotnet-cli/tests/integration.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -584,8 +584,12 @@ fn test_gc_coordinator_multi_arena_tracking() {
584584
assert!(!shared.gc_coordinator.has_command(dotnet_utils::ArenaId(2)));
585585

586586
// Unregister
587-
shared.gc_coordinator.unregister_arena(dotnet_utils::ArenaId(1));
588-
shared.gc_coordinator.unregister_arena(dotnet_utils::ArenaId(2));
587+
shared
588+
.gc_coordinator
589+
.unregister_arena(dotnet_utils::ArenaId(1));
590+
shared
591+
.gc_coordinator
592+
.unregister_arena(dotnet_utils::ArenaId(2));
589593

590594
// After unregister, commands should not be available
591595
assert!(!shared.gc_coordinator.has_command(dotnet_utils::ArenaId(1)));
@@ -649,8 +653,12 @@ fn test_cross_arena_reference_tracking() {
649653
dotnet_utils::gc::record_cross_arena_ref(dotnet_utils::ArenaId(2), ptr2.as_ptr() as usize);
650654

651655
// The fact that we can record cross-arena refs without panicking demonstrates the system works
652-
shared.gc_coordinator.unregister_arena(dotnet_utils::ArenaId(1));
653-
shared.gc_coordinator.unregister_arena(dotnet_utils::ArenaId(2));
656+
shared
657+
.gc_coordinator
658+
.unregister_arena(dotnet_utils::ArenaId(1));
659+
shared
660+
.gc_coordinator
661+
.unregister_arena(dotnet_utils::ArenaId(2));
654662
dotnet_utils::gc::unregister_arena(dotnet_utils::ArenaId(1));
655663
dotnet_utils::gc::unregister_arena(dotnet_utils::ArenaId(2));
656664
}
@@ -679,5 +687,7 @@ fn test_allocation_pressure_triggers_collection() {
679687
// The coordinator tracks allocation pressure
680688
println!("Should collect after 100 allocations: {}", should_collect);
681689

682-
shared.gc_coordinator.unregister_arena(dotnet_utils::ArenaId(1));
690+
shared
691+
.gc_coordinator
692+
.unregister_arena(dotnet_utils::ArenaId(1));
683693
}

crates/dotnet-types/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,6 @@ impl TypeDescription {
201201
}
202202
}
203203

204-
205204
#[cfg(test)]
206205
mod tests {
207206
use super::*;

crates/dotnet-utils/src/atomic.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
use crate::sync::Ordering;
1+
use crate::{is_ptr_aligned_to_field, sync::Ordering};
2+
use std::ptr;
3+
24
#[cfg(feature = "multithreading")]
3-
use std::sync::atomic::{AtomicU16, AtomicU32, AtomicU64, AtomicU8};
5+
use std::sync::atomic::{AtomicU8, AtomicU16, AtomicU32, AtomicU64};
46

5-
use crate::is_ptr_aligned_to_field;
67
#[cfg(feature = "memory-validation")]
7-
use std::cell::RefCell;
8-
#[cfg(feature = "memory-validation")]
9-
use std::collections::HashSet;
10-
use std::ptr;
8+
use std::{cell::RefCell, collections::HashSet};
119

1210
#[cfg(feature = "memory-validation")]
1311
thread_local! {
@@ -51,7 +49,9 @@ fn validate_ordering(ordering: Ordering, is_load: bool) {
5149
}
5250

5351
if ordering == Ordering::Relaxed {
54-
tracing::warn!("Relaxed ordering used for atomic access. Ensure this is intentional (e.g., not for a .NET volatile field).");
52+
tracing::warn!(
53+
"Relaxed ordering used for atomic access. Ensure this is intentional (e.g., not for a .NET volatile field)."
54+
);
5555
}
5656
}
5757

crates/dotnet-utils/src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub mod gc;
1212
pub mod newtypes;
1313
pub mod sync;
1414

15-
pub use newtypes::{ArenaId, ByteOffset, FieldIndex, LocalIndex, ArgumentIndex, StackSlotIndex};
15+
pub use newtypes::{ArenaId, ArgumentIndex, ByteOffset, FieldIndex, LocalIndex, StackSlotIndex};
1616

1717
pub struct DebugStr(pub String);
1818

@@ -35,7 +35,10 @@ pub fn is_ptr_aligned_to_field(ptr: *const u8, field_size: usize) -> bool {
3535
#[cfg(feature = "memory-validation")]
3636
pub fn validate_alignment(ptr: *const u8, align: usize) {
3737
if !(ptr as usize).is_multiple_of(align) {
38-
panic!("Alignment violation: pointer {:p} is not aligned to {}", ptr, align);
38+
panic!(
39+
"Alignment violation: pointer {:p} is not aligned to {}",
40+
ptr, align
41+
);
3942
}
4043
}
4144

crates/dotnet-utils/src/newtypes.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
use std::ops::{Add, Sub, AddAssign, SubAssign, Mul};
2-
use std::fmt::{self, Display, Formatter};
31
use gc_arena::Collect;
2+
use std::{
3+
fmt::{self, Display, Formatter},
4+
ops::{Add, AddAssign, Mul, Sub, SubAssign},
5+
};
46

57
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Collect)]
68
#[collect(require_static)]

crates/dotnet-value/src/atomic_tests.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ mod tests {
108108
type TestRoot = Rootable![()];
109109
let arena = Arena::<TestRoot>::new(|_mc| ());
110110
#[cfg(feature = "multithreaded-gc")]
111-
let arena_handle = Box::leak(Box::new(dotnet_utils::gc::ArenaHandle::new(dotnet_utils::ArenaId(0))));
111+
let arena_handle = Box::leak(Box::new(dotnet_utils::gc::ArenaHandle::new(
112+
dotnet_utils::ArenaId(0),
113+
)));
112114
arena.mutate(|gc, _root| {
113115
let storage = HeapStorage::Boxed(ValueType::Int32(42));
114116
let gc_handle = dotnet_utils::gc::GCHandle::new(
@@ -148,15 +150,17 @@ mod tests {
148150
});
149151
}
150152
#[test]
151-
#[cfg_attr(feature = "memory-validation", should_panic(expected = "Alignment violation"))]
153+
#[cfg_attr(
154+
feature = "memory-validation",
155+
should_panic(expected = "Alignment violation")
156+
)]
152157
fn test_misaligned_load() {
153158
let data = [0u8; 16];
154159
let ptr = unsafe { data.as_ptr().add(1) };
155160
unsafe {
156161
StackValue::load_atomic(ptr, LoadType::Int32, AtomicOrdering::Relaxed);
157162
}
158163
}
159-
160164
struct ThreadSafeBox([u8; 8]);
161165
unsafe impl Sync for ThreadSafeBox {}
162166
unsafe impl Send for ThreadSafeBox {}

crates/dotnet-value/src/layout.rs

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ impl From<Scalar> for LayoutManager {
4444
}
4545

4646
impl LayoutManager {
47-
pub fn visit_managed_ptrs(&self, offset: crate::ByteOffset, visitor: &mut dyn FnMut(crate::ByteOffset)) {
47+
pub fn visit_managed_ptrs(
48+
&self,
49+
offset: crate::ByteOffset,
50+
visitor: &mut dyn FnMut(crate::ByteOffset),
51+
) {
4852
match self {
4953
Self::Scalar(Scalar::ManagedPtr) => visitor(offset),
5054
Self::Field(flm) => {
@@ -57,8 +61,12 @@ impl LayoutManager {
5761
Self::Array(alm) => {
5862
let elem_size = alm.element_layout.size();
5963
for i in 0..alm.length {
60-
alm.element_layout
61-
.visit_managed_ptrs(offset.checked_add(elem_size.checked_mul(i).unwrap()).unwrap(), visitor);
64+
alm.element_layout.visit_managed_ptrs(
65+
offset
66+
.checked_add(elem_size.checked_mul(i).unwrap())
67+
.unwrap(),
68+
visitor,
69+
);
6270
}
6371
}
6472
_ => {}
@@ -125,7 +133,8 @@ impl LayoutManager {
125133
LayoutManager::Array(a) => {
126134
let elem_size = a.element_layout.size();
127135
for i in 0..a.length {
128-
a.element_layout.trace(&storage[elem_size.as_usize() * i..], cc);
136+
a.element_layout
137+
.trace(&storage[elem_size.as_usize() * i..], cc);
129138
}
130139
}
131140
_ => {}
@@ -152,16 +161,23 @@ impl LayoutManager {
152161
}
153162
LayoutManager::Field(f) => {
154163
for field in f.fields.values() {
155-
field
156-
.layout
157-
.resurrect(&storage[field.position.as_usize()..], fc, visited, depth);
164+
field.layout.resurrect(
165+
&storage[field.position.as_usize()..],
166+
fc,
167+
visited,
168+
depth,
169+
);
158170
}
159171
}
160172
LayoutManager::Array(a) => {
161173
let elem_size = a.element_layout.size();
162174
for i in 0..a.length {
163-
a.element_layout
164-
.resurrect(&storage[elem_size.as_usize() * i..], fc, visited, depth);
175+
a.element_layout.resurrect(
176+
&storage[elem_size.as_usize() * i..],
177+
fc,
178+
visited,
179+
depth,
180+
);
165181
}
166182
}
167183
_ => {}
@@ -253,7 +269,11 @@ impl HasLayout for FieldLayoutManager {
253269
}
254270

255271
impl FieldLayoutManager {
256-
pub fn visit_managed_ptrs(&self, offset: crate::ByteOffset, visitor: &mut dyn FnMut(crate::ByteOffset)) {
272+
pub fn visit_managed_ptrs(
273+
&self,
274+
offset: crate::ByteOffset,
275+
visitor: &mut dyn FnMut(crate::ByteOffset),
276+
) {
257277
for field in self.fields.values() {
258278
field
259279
.layout
@@ -319,8 +339,12 @@ impl ArrayLayoutManager {
319339
) {
320340
let elem_size = self.element_layout.size();
321341
for i in 0..self.length {
322-
self.element_layout
323-
.resurrect(&storage[(elem_size * i).as_usize()..], fc, visited, depth);
342+
self.element_layout.resurrect(
343+
&storage[(elem_size * i).as_usize()..],
344+
fc,
345+
visited,
346+
depth,
347+
);
324348
}
325349
}
326350
}

crates/dotnet-value/src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,18 @@ pub mod layout;
3535
pub mod object;
3636
#[cfg(test)]
3737
mod object_tests;
38-
#[cfg(test)]
39-
mod validation_tests;
4038
pub mod pointer;
4139
pub mod storage;
4240
pub mod string;
41+
#[cfg(test)]
42+
mod validation_tests;
4343

44+
pub use dotnet_utils::{
45+
ArenaId, ArgumentIndex, ByteOffset, FieldIndex, LocalIndex, StackSlotIndex,
46+
};
4447
pub use object::{HeapStorage, Object, ObjectRef};
4548
pub use pointer::{ManagedPtr, UnmanagedPtr};
4649
pub use string::CLRString;
47-
pub use dotnet_utils::{ArenaId, ByteOffset, FieldIndex, LocalIndex, ArgumentIndex, StackSlotIndex};
4850

4951
#[cfg(feature = "multithreaded-gc")]
5052
use object::ObjectPtr;

crates/dotnet-value/src/object.rs

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
use crate::{
2-
StackValue,
2+
ArenaId, StackValue,
33
layout::{ArrayLayoutManager, HasLayout, LayoutManager, Scalar},
44
pointer::ManagedPtr,
55
storage::FieldStorage,
66
string::CLRString,
7-
ArenaId,
87
};
98
use dotnet_types::{TypeDescription, generics::ConcreteType};
109
use dotnet_utils::{
@@ -200,7 +199,9 @@ impl<'gc> ObjectRef<'gc> {
200199
depth: usize,
201200
) {
202201
if depth > 1000 {
203-
panic!("Resurrection depth exceeded (possible infinite recursion in custom finalizers or corrupt graph)");
202+
panic!(
203+
"Resurrection depth exceeded (possible infinite recursion in custom finalizers or corrupt graph)"
204+
);
204205
}
205206
if let Some(handle) = self.0 {
206207
let ptr = Gc::as_ptr(handle) as usize;
@@ -663,13 +664,19 @@ unsafe impl Collect for Vector<'_> {
663664
match element.as_ref() {
664665
LayoutManager::Scalar(Scalar::ObjectRef) => {
665666
for i in 0..self.layout.length {
666-
unsafe { ObjectRef::read_unchecked(&self.storage[(element.size() * i).as_usize()..]) }
667-
.trace(cc);
667+
unsafe {
668+
ObjectRef::read_unchecked(&self.storage[(element.size() * i).as_usize()..])
669+
}
670+
.trace(cc);
668671
}
669672
}
670673
_ => {
671674
for i in 0..self.layout.length {
672-
LayoutManager::trace(element, &self.storage[(element.size() * i).as_usize()..], cc);
675+
LayoutManager::trace(
676+
element,
677+
&self.storage[(element.size() * i).as_usize()..],
678+
cc,
679+
);
673680
}
674681
}
675682
}
@@ -749,29 +756,31 @@ impl Debug for Vector<'_> {
749756
"vector of {:?} (length {})",
750757
self.element, self.layout.length
751758
))
752-
.chain(self.storage.chunks(self.layout.element_layout.size().as_usize()).map(
753-
match self.layout.element_layout.as_ref() {
754-
LayoutManager::Scalar(Scalar::ObjectRef) => |chunk: &[u8]| {
755-
format!("{:?}", unsafe { ObjectRef::read_unchecked(chunk) })
756-
},
757-
LayoutManager::Scalar(Scalar::ManagedPtr) => {
758-
|chunk: &[u8]| {
759-
// ManagedPtr is now printed via its Debug impl if we could read it.
760-
// But read_unchecked returns ObjectRef.
761-
// We need ManagedPtr::read_from_bytes.
762-
// For now just print bytes to avoid issues.
759+
.chain(
760+
self.storage
761+
.chunks(self.layout.element_layout.size().as_usize())
762+
.map(match self.layout.element_layout.as_ref() {
763+
LayoutManager::Scalar(Scalar::ObjectRef) => |chunk: &[u8]| {
764+
format!("{:?}", unsafe { ObjectRef::read_unchecked(chunk) })
765+
},
766+
LayoutManager::Scalar(Scalar::ManagedPtr) => {
767+
|chunk: &[u8]| {
768+
// ManagedPtr is now printed via its Debug impl if we could read it.
769+
// But read_unchecked returns ObjectRef.
770+
// We need ManagedPtr::read_from_bytes.
771+
// For now just print bytes to avoid issues.
772+
let bytes: Vec<_> =
773+
chunk.iter().map(|b| format!("{:02x}", b)).collect();
774+
format!("ptr({})", bytes.join(" "))
775+
}
776+
}
777+
_ => |chunk: &[u8]| {
763778
let bytes: Vec<_> =
764779
chunk.iter().map(|b| format!("{:02x}", b)).collect();
765-
format!("ptr({})", bytes.join(" "))
766-
}
767-
}
768-
_ => |chunk: &[u8]| {
769-
let bytes: Vec<_> =
770-
chunk.iter().map(|b| format!("{:02x}", b)).collect();
771-
bytes.join(" ")
772-
},
773-
},
774-
))
780+
bytes.join(" ")
781+
},
782+
}),
783+
)
775784
.map(DebugStr),
776785
)
777786
.finish()

0 commit comments

Comments
 (0)