Skip to content

Commit 883f870

Browse files
Remove BorrowKind glob, make names longer
1 parent be4b026 commit 883f870

File tree

68 files changed

+289
-288
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+289
-288
lines changed

compiler/rustc_borrowck/src/diagnostics/mutability_errors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
816816
) {
817817
match captured_place.info.capture_kind {
818818
ty::UpvarCapture::ByRef(
819-
ty::BorrowKind::MutBorrow | ty::BorrowKind::UniqueImmBorrow,
819+
ty::BorrowKind::Mutable | ty::BorrowKind::UniqueImmutable,
820820
) => {
821821
capture_reason = format!("mutable borrow of `{upvar}`");
822822
}

compiler/rustc_hir_typeck/src/expr_use_visitor.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,12 @@ use rustc_middle::hir::place::ProjectionKind;
2121
pub use rustc_middle::hir::place::{Place, PlaceBase, PlaceWithHirId, Projection};
2222
use rustc_middle::mir::FakeReadCause;
2323
use rustc_middle::ty::{
24-
self, AdtKind, Ty, TyCtxt, TypeFoldable, TypeVisitableExt as _, adjustment,
24+
self, AdtKind, BorrowKind, Ty, TyCtxt, TypeFoldable, TypeVisitableExt as _, adjustment,
2525
};
2626
use rustc_middle::{bug, span_bug};
2727
use rustc_span::{ErrorGuaranteed, Span};
2828
use rustc_trait_selection::infer::InferCtxtExt;
2929
use tracing::{debug, trace};
30-
use ty::BorrowKind::ImmBorrow;
3130

3231
use crate::fn_ctxt::FnCtxt;
3332

@@ -63,7 +62,7 @@ pub trait Delegate<'tcx> {
6362
fn copy(&mut self, place_with_id: &PlaceWithHirId<'tcx>, diag_expr_id: HirId) {
6463
// In most cases, copying data from `x` is equivalent to doing `*&x`, so by default
6564
// we treat a copy of `x` as a borrow of `x`.
66-
self.borrow(place_with_id, diag_expr_id, ty::BorrowKind::ImmBorrow)
65+
self.borrow(place_with_id, diag_expr_id, ty::BorrowKind::Immutable)
6766
}
6867

6968
/// The path at `assignee_place` is being assigned to.
@@ -387,7 +386,7 @@ impl<'tcx, Cx: TypeInformationCtxt<'tcx>, D: Delegate<'tcx>> ExprUseVisitor<'tcx
387386
}
388387

389388
hir::ExprKind::Let(hir::LetExpr { pat, init, .. }) => {
390-
self.walk_local(init, pat, None, || self.borrow_expr(init, ty::ImmBorrow))?;
389+
self.walk_local(init, pat, None, || self.borrow_expr(init, BorrowKind::Immutable))?;
391390
}
392391

393392
hir::ExprKind::Match(discr, arms, _) => {
@@ -626,7 +625,7 @@ impl<'tcx, Cx: TypeInformationCtxt<'tcx>, D: Delegate<'tcx>> ExprUseVisitor<'tcx
626625
}
627626

628627
if needs_to_be_read {
629-
self.borrow_expr(discr, ty::ImmBorrow)?;
628+
self.borrow_expr(discr, BorrowKind::Immutable)?;
630629
} else {
631630
let closure_def_id = match discr_place.place.base {
632631
PlaceBase::Upvar(upvar_id) => Some(upvar_id.closure_expr_id),
@@ -785,8 +784,8 @@ impl<'tcx, Cx: TypeInformationCtxt<'tcx>, D: Delegate<'tcx>> ExprUseVisitor<'tcx
785784
// Reborrowing a Pin is like a combinations of a deref and a borrow, so we do
786785
// both.
787786
let bk = match mutbl {
788-
ty::Mutability::Not => ty::BorrowKind::ImmBorrow,
789-
ty::Mutability::Mut => ty::BorrowKind::MutBorrow,
787+
ty::Mutability::Not => ty::BorrowKind::Immutable,
788+
ty::Mutability::Mut => ty::BorrowKind::Mutable,
790789
};
791790
self.delegate.borrow_mut().borrow(&place_with_id, place_with_id.hir_id, bk);
792791
}
@@ -909,7 +908,11 @@ impl<'tcx, Cx: TypeInformationCtxt<'tcx>, D: Delegate<'tcx>> ExprUseVisitor<'tcx
909908
// binding when lowering pattern guards to ensure that the guard does not
910909
// modify the scrutinee.
911910
if has_guard {
912-
self.delegate.borrow_mut().borrow(place, discr_place.hir_id, ImmBorrow);
911+
self.delegate.borrow_mut().borrow(
912+
place,
913+
discr_place.hir_id,
914+
BorrowKind::Immutable,
915+
);
913916
}
914917

915918
// It is also a borrow or copy/move of the value being matched.

compiler/rustc_hir_typeck/src/upvar.rs

+17-17
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ use rustc_middle::hir::place::{Place, PlaceBase, PlaceWithHirId, Projection, Pro
4444
use rustc_middle::mir::FakeReadCause;
4545
use rustc_middle::traits::ObligationCauseCode;
4646
use rustc_middle::ty::{
47-
self, ClosureSizeProfileData, Ty, TyCtxt, TypeVisitableExt as _, TypeckResults, UpvarArgs,
48-
UpvarCapture,
47+
self, BorrowKind, ClosureSizeProfileData, Ty, TyCtxt, TypeVisitableExt as _, TypeckResults,
48+
UpvarArgs, UpvarCapture,
4949
};
5050
use rustc_middle::{bug, span_bug};
5151
use rustc_session::lint;
@@ -646,7 +646,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
646646
},
647647

648648
ty::UpvarCapture::ByRef(
649-
ty::BorrowKind::MutBorrow | ty::BorrowKind::UniqueImmBorrow,
649+
ty::BorrowKind::Mutable | ty::BorrowKind::UniqueImmutable,
650650
) => {
651651
match closure_kind {
652652
ty::ClosureKind::Fn => {
@@ -1681,7 +1681,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
16811681
ty::UpvarCapture::ByValue
16821682
}
16831683
hir::CaptureBy::Value { .. } | hir::CaptureBy::Ref => {
1684-
ty::UpvarCapture::ByRef(ty::ImmBorrow)
1684+
ty::UpvarCapture::ByRef(BorrowKind::Immutable)
16851685
}
16861686
}
16871687
}
@@ -1869,7 +1869,7 @@ fn should_reborrow_from_env_of_parent_coroutine_closure<'tcx>(
18691869
Some(Projection { kind: ProjectionKind::Deref, .. })
18701870
))
18711871
// (2.)
1872-
|| matches!(child_capture.info.capture_kind, UpvarCapture::ByRef(ty::BorrowKind::MutBorrow))
1872+
|| matches!(child_capture.info.capture_kind, UpvarCapture::ByRef(ty::BorrowKind::Mutable))
18731873
}
18741874

18751875
/// Truncate the capture so that the place being borrowed is in accordance with RFC 1240,
@@ -1984,7 +1984,7 @@ impl<'tcx> euv::Delegate<'tcx> for InferBorrowKind<'tcx> {
19841984

19851985
// We need to restrict Fake Read precision to avoid fake reading unsafe code,
19861986
// such as deref of a raw pointer.
1987-
let dummy_capture_kind = ty::UpvarCapture::ByRef(ty::BorrowKind::ImmBorrow);
1987+
let dummy_capture_kind = ty::UpvarCapture::ByRef(ty::BorrowKind::Immutable);
19881988

19891989
let (place, _) = restrict_capture_precision(place.place.clone(), dummy_capture_kind);
19901990

@@ -2025,7 +2025,7 @@ impl<'tcx> euv::Delegate<'tcx> for InferBorrowKind<'tcx> {
20252025

20262026
// Raw pointers don't inherit mutability
20272027
if place_with_id.place.deref_tys().any(Ty::is_unsafe_ptr) {
2028-
capture_kind = ty::UpvarCapture::ByRef(ty::BorrowKind::ImmBorrow);
2028+
capture_kind = ty::UpvarCapture::ByRef(ty::BorrowKind::Immutable);
20292029
}
20302030

20312031
self.capture_information.push((place, ty::CaptureInfo {
@@ -2037,7 +2037,7 @@ impl<'tcx> euv::Delegate<'tcx> for InferBorrowKind<'tcx> {
20372037

20382038
#[instrument(skip(self), level = "debug")]
20392039
fn mutate(&mut self, assignee_place: &PlaceWithHirId<'tcx>, diag_expr_id: HirId) {
2040-
self.borrow(assignee_place, diag_expr_id, ty::BorrowKind::MutBorrow);
2040+
self.borrow(assignee_place, diag_expr_id, ty::BorrowKind::Mutable);
20412041
}
20422042
}
20432043

@@ -2331,16 +2331,16 @@ fn determine_capture_info(
23312331
(ty::UpvarCapture::ByRef(ref_a), ty::UpvarCapture::ByRef(ref_b)) => {
23322332
match (ref_a, ref_b) {
23332333
// Take LHS:
2334-
(ty::UniqueImmBorrow | ty::MutBorrow, ty::ImmBorrow)
2335-
| (ty::MutBorrow, ty::UniqueImmBorrow) => capture_info_a,
2334+
(BorrowKind::UniqueImmutable | BorrowKind::Mutable, BorrowKind::Immutable)
2335+
| (BorrowKind::Mutable, BorrowKind::UniqueImmutable) => capture_info_a,
23362336

23372337
// Take RHS:
2338-
(ty::ImmBorrow, ty::UniqueImmBorrow | ty::MutBorrow)
2339-
| (ty::UniqueImmBorrow, ty::MutBorrow) => capture_info_b,
2338+
(BorrowKind::Immutable, BorrowKind::UniqueImmutable | BorrowKind::Mutable)
2339+
| (BorrowKind::UniqueImmutable, BorrowKind::Mutable) => capture_info_b,
23402340

2341-
(ty::ImmBorrow, ty::ImmBorrow)
2342-
| (ty::UniqueImmBorrow, ty::UniqueImmBorrow)
2343-
| (ty::MutBorrow, ty::MutBorrow) => {
2341+
(BorrowKind::Immutable, BorrowKind::Immutable)
2342+
| (BorrowKind::UniqueImmutable, BorrowKind::UniqueImmutable)
2343+
| (BorrowKind::Mutable, BorrowKind::Mutable) => {
23442344
bug!("Expected unequal capture kinds");
23452345
}
23462346
}
@@ -2367,12 +2367,12 @@ fn truncate_place_to_len_and_update_capture_kind<'tcx>(
23672367
// Note that if the place contained Deref of a raw pointer it would've not been MutBorrow, so
23682368
// we don't need to worry about that case here.
23692369
match curr_mode {
2370-
ty::UpvarCapture::ByRef(ty::BorrowKind::MutBorrow) => {
2370+
ty::UpvarCapture::ByRef(ty::BorrowKind::Mutable) => {
23712371
for i in len..place.projections.len() {
23722372
if place.projections[i].kind == ProjectionKind::Deref
23732373
&& is_mut_ref(place.ty_before_projection(i))
23742374
{
2375-
*curr_mode = ty::UpvarCapture::ByRef(ty::BorrowKind::UniqueImmBorrow);
2375+
*curr_mode = ty::UpvarCapture::ByRef(ty::BorrowKind::UniqueImmutable);
23762376
break;
23772377
}
23782378
}

compiler/rustc_middle/src/ty/closure.rs

+8-9
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use rustc_span::def_id::LocalDefIdMap;
1010
use rustc_span::symbol::Ident;
1111
use rustc_span::{Span, Symbol};
1212

13-
use self::BorrowKind::*;
1413
use super::TyCtxt;
1514
use crate::hir::place::{
1615
Place as HirPlace, PlaceBase as HirPlaceBase, ProjectionKind as HirProjectionKind,
@@ -334,7 +333,7 @@ pub fn place_to_string_for_capture<'tcx>(tcx: TyCtxt<'tcx>, place: &HirPlace<'tc
334333
#[derive(TypeFoldable, TypeVisitable)]
335334
pub enum BorrowKind {
336335
/// Data must be immutable and is aliasable.
337-
ImmBorrow,
336+
Immutable,
338337

339338
/// Data must be immutable but not aliasable. This kind of borrow
340339
/// cannot currently be expressed by the user and is used only in
@@ -382,17 +381,17 @@ pub enum BorrowKind {
382381
/// borrow, it's just used when translating closures.
383382
///
384383
/// FIXME: Rename this to indicate the borrow is actually not immutable.
385-
UniqueImmBorrow,
384+
UniqueImmutable,
386385

387386
/// Data is mutable and not aliasable.
388-
MutBorrow,
387+
Mutable,
389388
}
390389

391390
impl BorrowKind {
392391
pub fn from_mutbl(m: hir::Mutability) -> BorrowKind {
393392
match m {
394-
hir::Mutability::Mut => MutBorrow,
395-
hir::Mutability::Not => ImmBorrow,
393+
hir::Mutability::Mut => BorrowKind::Mutable,
394+
hir::Mutability::Not => BorrowKind::Immutable,
396395
}
397396
}
398397

@@ -402,13 +401,13 @@ impl BorrowKind {
402401
/// question.
403402
pub fn to_mutbl_lossy(self) -> hir::Mutability {
404403
match self {
405-
MutBorrow => hir::Mutability::Mut,
406-
ImmBorrow => hir::Mutability::Not,
404+
BorrowKind::Mutable => hir::Mutability::Mut,
405+
BorrowKind::Immutable => hir::Mutability::Not,
407406

408407
// We have no type corresponding to a unique imm borrow, so
409408
// use `&mut`. It gives all the capabilities of a `&uniq`
410409
// and hence is a safe "over approximation".
411-
UniqueImmBorrow => hir::Mutability::Mut,
410+
BorrowKind::UniqueImmutable => hir::Mutability::Mut,
412411
}
413412
}
414413
}

compiler/rustc_middle/src/ty/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ use tracing::{debug, instrument};
5555
pub use vtable::*;
5656
use {rustc_ast as ast, rustc_attr as attr, rustc_hir as hir};
5757

58-
pub use self::BorrowKind::*;
5958
pub use self::closure::{
6059
BorrowKind, CAPTURE_STRUCT_LOCAL, CaptureInfo, CapturedPlace, ClosureTypeInfo,
6160
MinCaptureInformationMap, MinCaptureList, RootVariableMinCaptureList, UpvarCapture, UpvarId,

compiler/rustc_mir_build/src/thir/cx/expr.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1185,11 +1185,11 @@ impl<'tcx> Cx<'tcx> {
11851185
ty::UpvarCapture::ByValue => captured_place_expr,
11861186
ty::UpvarCapture::ByRef(upvar_borrow) => {
11871187
let borrow_kind = match upvar_borrow {
1188-
ty::BorrowKind::ImmBorrow => BorrowKind::Shared,
1189-
ty::BorrowKind::UniqueImmBorrow => {
1188+
ty::BorrowKind::Immutable => BorrowKind::Shared,
1189+
ty::BorrowKind::UniqueImmutable => {
11901190
BorrowKind::Mut { kind: mir::MutBorrowKind::ClosureCapture }
11911191
}
1192-
ty::BorrowKind::MutBorrow => {
1192+
ty::BorrowKind::Mutable => {
11931193
BorrowKind::Mut { kind: mir::MutBorrowKind::Default }
11941194
}
11951195
};

src/tools/clippy/clippy_lints/src/loops/mut_range_bound.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ impl<'tcx> Delegate<'tcx> for MutatePairDelegate<'_, 'tcx> {
8080
fn consume(&mut self, _: &PlaceWithHirId<'tcx>, _: HirId) {}
8181

8282
fn borrow(&mut self, cmt: &PlaceWithHirId<'tcx>, diag_expr_id: HirId, bk: ty::BorrowKind) {
83-
if bk == ty::BorrowKind::MutBorrow {
83+
if bk == ty::BorrowKind::Mutable {
8484
if let PlaceBase::Local(id) = cmt.place.base {
8585
if Some(id) == self.hir_id_low && !BreakAfterExprVisitor::is_found(self.cx, diag_expr_id) {
8686
self.span_low = Some(self.cx.tcx.hir().span(diag_expr_id));

src/tools/clippy/clippy_lints/src/needless_pass_by_ref_mut.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -417,16 +417,16 @@ impl<'tcx> euv::Delegate<'tcx> for MutablyUsedVariablesCtxt<'tcx> {
417417
// a closure, it'll return this variant whereas if you have just an index access, it'll
418418
// return `ImmBorrow`. So if there is "Unique" and it's a mutable reference, we add it
419419
// to the mutably used variables set.
420-
if borrow == ty::BorrowKind::MutBorrow
421-
|| (borrow == ty::BorrowKind::UniqueImmBorrow && base_ty.ref_mutability() == Some(Mutability::Mut))
420+
if borrow == ty::BorrowKind::Mutable
421+
|| (borrow == ty::BorrowKind::UniqueImmutable && base_ty.ref_mutability() == Some(Mutability::Mut))
422422
{
423423
self.add_mutably_used_var(*vid);
424424
} else if self.is_in_unsafe_block(id) {
425425
// If we are in an unsafe block, any operation on this variable must not be warned
426426
// upon!
427427
self.add_mutably_used_var(*vid);
428428
}
429-
} else if borrow == ty::ImmBorrow {
429+
} else if borrow == ty::BorrowKind::Immutable {
430430
// If there is an `async block`, it'll contain a call to a closure which we need to
431431
// go into to ensure all "mutate" checks are found.
432432
if let Node::Expr(Expr {

src/tools/clippy/clippy_lints/src/operators/assign_op_pattern.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ fn imm_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> HirIdSet {
102102
struct S(HirIdSet);
103103
impl Delegate<'_> for S {
104104
fn borrow(&mut self, place: &PlaceWithHirId<'_>, _: HirId, kind: BorrowKind) {
105-
if matches!(kind, BorrowKind::ImmBorrow | BorrowKind::UniqueImmBorrow) {
105+
if matches!(kind, BorrowKind::Immutable | BorrowKind::UniqueImmutable) {
106106
self.0.insert(match place.place.base {
107107
PlaceBase::Local(id) => id,
108108
PlaceBase::Upvar(id) => id.var_path.hir_id,
@@ -127,7 +127,7 @@ fn mut_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> HirIdSet {
127127
struct S(HirIdSet);
128128
impl Delegate<'_> for S {
129129
fn borrow(&mut self, place: &PlaceWithHirId<'_>, _: HirId, kind: BorrowKind) {
130-
if matches!(kind, BorrowKind::MutBorrow) {
130+
if matches!(kind, BorrowKind::Mutable) {
131131
self.0.insert(match place.place.base {
132132
PlaceBase::Local(id) => id,
133133
PlaceBase::Upvar(id) => id.var_path.hir_id,

src/tools/clippy/clippy_lints/src/unwrap.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ fn is_option_as_mut_use(tcx: TyCtxt<'_>, expr_id: HirId) -> bool {
217217

218218
impl<'tcx> Delegate<'tcx> for MutationVisitor<'tcx> {
219219
fn borrow(&mut self, cat: &PlaceWithHirId<'tcx>, diag_expr_id: HirId, bk: ty::BorrowKind) {
220-
if let ty::BorrowKind::MutBorrow = bk
220+
if let ty::BorrowKind::Mutable = bk
221221
&& is_potentially_local_place(self.local_id, &cat.place)
222222
&& !is_option_as_mut_use(self.tcx, diag_expr_id)
223223
{

src/tools/clippy/clippy_utils/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1209,8 +1209,8 @@ pub fn can_move_expr_to_closure<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'
12091209
let capture = match capture.info.capture_kind {
12101210
UpvarCapture::ByValue => CaptureKind::Value,
12111211
UpvarCapture::ByRef(kind) => match kind {
1212-
BorrowKind::ImmBorrow => CaptureKind::Ref(Mutability::Not),
1213-
BorrowKind::UniqueImmBorrow | BorrowKind::MutBorrow => {
1212+
BorrowKind::Immutable => CaptureKind::Ref(Mutability::Not),
1213+
BorrowKind::UniqueImmutable | BorrowKind::Mutable => {
12141214
CaptureKind::Ref(Mutability::Mut)
12151215
},
12161216
},

src/tools/clippy/clippy_utils/src/usage.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl<'tcx> Delegate<'tcx> for MutVarsDelegate {
6767
fn consume(&mut self, _: &PlaceWithHirId<'tcx>, _: HirId) {}
6868

6969
fn borrow(&mut self, cmt: &PlaceWithHirId<'tcx>, _: HirId, bk: ty::BorrowKind) {
70-
if bk == ty::BorrowKind::MutBorrow {
70+
if bk == ty::BorrowKind::Mutable {
7171
self.update(cmt);
7272
}
7373
}

tests/ui/closures/2229_closure_analysis/arrays-completely-captured.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ fn main() {
1313
//~^ ERROR: First Pass analysis includes:
1414
//~| ERROR: Min Capture analysis includes:
1515
m[0] += 10;
16-
//~^ NOTE: Capturing m[] -> MutBorrow
17-
//~| NOTE: Min Capture m[] -> MutBorrow
16+
//~^ NOTE: Capturing m[] -> Mutable
17+
//~| NOTE: Min Capture m[] -> Mutable
1818
m[1] += 40;
19-
//~^ NOTE: Capturing m[] -> MutBorrow
19+
//~^ NOTE: Capturing m[] -> Mutable
2020
};
2121

2222
c();

tests/ui/closures/2229_closure_analysis/arrays-completely-captured.stderr

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ LL | |
2020
LL | | };
2121
| |_____^
2222
|
23-
note: Capturing m[] -> MutBorrow
23+
note: Capturing m[] -> Mutable
2424
--> $DIR/arrays-completely-captured.rs:15:9
2525
|
2626
LL | m[0] += 10;
2727
| ^
28-
note: Capturing m[] -> MutBorrow
28+
note: Capturing m[] -> Mutable
2929
--> $DIR/arrays-completely-captured.rs:18:9
3030
|
3131
LL | m[1] += 40;
@@ -43,7 +43,7 @@ LL | |
4343
LL | | };
4444
| |_____^
4545
|
46-
note: Min Capture m[] -> MutBorrow
46+
note: Min Capture m[] -> Mutable
4747
--> $DIR/arrays-completely-captured.rs:15:9
4848
|
4949
LL | m[0] += 10;

tests/ui/closures/2229_closure_analysis/by_value.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ fn big_box() {
2626
//~^ NOTE: Capturing t[(0, 0),Deref,(0, 0)] -> ByValue
2727
//~| NOTE: Min Capture t[(0, 0)] -> ByValue
2828
println!("{} {:?}", t.1, p);
29-
//~^ NOTE: Capturing t[(1, 0)] -> ImmBorrow
30-
//~| NOTE: Min Capture t[(1, 0)] -> ImmBorrow
29+
//~^ NOTE: Capturing t[(1, 0)] -> Immutable
30+
//~| NOTE: Min Capture t[(1, 0)] -> Immutable
3131
};
3232

3333
c();

0 commit comments

Comments
 (0)