Skip to content

Commit 3aeb9f0

Browse files
committed
rename TraitItemKind::Method -> Fn
1 parent 98c7ed6 commit 3aeb9f0

File tree

31 files changed

+67
-70
lines changed

31 files changed

+67
-70
lines changed

src/librustc/hir/map/blocks.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl MaybeFnLike for hir::ImplItem<'_> {
6060
impl MaybeFnLike for hir::TraitItem<'_> {
6161
fn is_fn_like(&self) -> bool {
6262
match self.kind {
63-
hir::TraitItemKind::Method(_, hir::TraitMethod::Provided(_)) => true,
63+
hir::TraitItemKind::Fn(_, hir::TraitMethod::Provided(_)) => true,
6464
_ => false,
6565
}
6666
}
@@ -239,7 +239,7 @@ impl<'a> FnLikeNode<'a> {
239239
_ => bug!("item FnLikeNode that is not fn-like"),
240240
},
241241
Node::TraitItem(ti) => match ti.kind {
242-
hir::TraitItemKind::Method(ref sig, hir::TraitMethod::Provided(body)) => {
242+
hir::TraitItemKind::Fn(ref sig, hir::TraitMethod::Provided(body)) => {
243243
method(ti.hir_id, ti.ident, sig, None, body, ti.span, &ti.attrs)
244244
}
245245
_ => bug!("trait method FnLikeNode that is not fn-like"),

src/librustc/hir/map/mod.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ impl<'hir> Entry<'hir> {
5151
},
5252

5353
Node::TraitItem(ref item) => match item.kind {
54-
TraitItemKind::Method(ref sig, _) => Some(&sig.decl),
54+
TraitItemKind::Fn(ref sig, _) => Some(&sig.decl),
5555
_ => None,
5656
},
5757

@@ -77,7 +77,7 @@ impl<'hir> Entry<'hir> {
7777
},
7878

7979
Node::TraitItem(item) => match &item.kind {
80-
TraitItemKind::Method(sig, _) => Some(sig),
80+
TraitItemKind::Fn(sig, _) => Some(sig),
8181
_ => None,
8282
},
8383

@@ -101,7 +101,7 @@ impl<'hir> Entry<'hir> {
101101

102102
Node::TraitItem(item) => match item.kind {
103103
TraitItemKind::Const(_, Some(body))
104-
| TraitItemKind::Method(_, TraitMethod::Provided(body)) => Some(body),
104+
| TraitItemKind::Fn(_, TraitMethod::Provided(body)) => Some(body),
105105
_ => None,
106106
},
107107

@@ -326,7 +326,7 @@ impl<'hir> Map<'hir> {
326326
},
327327
Node::TraitItem(item) => match item.kind {
328328
TraitItemKind::Const(..) => DefKind::AssocConst,
329-
TraitItemKind::Method(..) => DefKind::AssocFn,
329+
TraitItemKind::Fn(..) => DefKind::AssocFn,
330330
TraitItemKind::Type(..) => DefKind::AssocTy,
331331
},
332332
Node::ImplItem(item) => match item.kind {
@@ -473,7 +473,7 @@ impl<'hir> Map<'hir> {
473473
| Node::AnonConst(_) => BodyOwnerKind::Const,
474474
Node::Ctor(..)
475475
| Node::Item(&Item { kind: ItemKind::Fn(..), .. })
476-
| Node::TraitItem(&TraitItem { kind: TraitItemKind::Method(..), .. })
476+
| Node::TraitItem(&TraitItem { kind: TraitItemKind::Fn(..), .. })
477477
| Node::ImplItem(&ImplItem { kind: ImplItemKind::Method(..), .. }) => BodyOwnerKind::Fn,
478478
Node::Item(&Item { kind: ItemKind::Static(_, m, _), .. }) => BodyOwnerKind::Static(m),
479479
Node::Expr(&Expr { kind: ExprKind::Closure(..), .. }) => BodyOwnerKind::Closure,
@@ -801,7 +801,7 @@ impl<'hir> Map<'hir> {
801801
_ => false,
802802
},
803803
Node::TraitItem(ti) => match ti.kind {
804-
TraitItemKind::Method(..) => true,
804+
TraitItemKind::Fn(..) => true,
805805
_ => false,
806806
},
807807
Node::ImplItem(ii) => match ii.kind {
@@ -1312,7 +1312,7 @@ fn hir_id_to_string(map: &Map<'_>, id: HirId, include_id: bool) -> String {
13121312
Some(Node::TraitItem(ti)) => {
13131313
let kind = match ti.kind {
13141314
TraitItemKind::Const(..) => "assoc constant",
1315-
TraitItemKind::Method(..) => "trait method",
1315+
TraitItemKind::Fn(..) => "trait method",
13161316
TraitItemKind::Type(..) => "assoc type",
13171317
};
13181318

src/librustc_ast_lowering/item.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -767,13 +767,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
767767
let names = self.lower_fn_params_to_names(&sig.decl);
768768
let (generics, sig) =
769769
self.lower_method_sig(generics, sig, trait_item_def_id, false, None);
770-
(generics, hir::TraitItemKind::Method(sig, hir::TraitMethod::Required(names)))
770+
(generics, hir::TraitItemKind::Fn(sig, hir::TraitMethod::Required(names)))
771771
}
772772
AssocItemKind::Fn(_, ref sig, ref generics, Some(ref body)) => {
773773
let body_id = self.lower_fn_body_block(i.span, &sig.decl, Some(body));
774774
let (generics, sig) =
775775
self.lower_method_sig(generics, sig, trait_item_def_id, false, None);
776-
(generics, hir::TraitItemKind::Method(sig, hir::TraitMethod::Provided(body_id)))
776+
(generics, hir::TraitItemKind::Fn(sig, hir::TraitMethod::Provided(body_id)))
777777
}
778778
AssocItemKind::TyAlias(_, ref generics, ref bounds, ref default) => {
779779
let ty = default.as_ref().map(|x| self.lower_ty(x, ImplTraitContext::disallowed()));

src/librustc_hir/hir.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1863,8 +1863,8 @@ pub enum TraitMethod<'hir> {
18631863
pub enum TraitItemKind<'hir> {
18641864
/// An associated constant with an optional value (otherwise `impl`s must contain a value).
18651865
Const(&'hir Ty<'hir>, Option<BodyId>),
1866-
/// A method with an optional body.
1867-
Method(FnSig<'hir>, TraitMethod<'hir>),
1866+
/// An associated function with an optional body.
1867+
Fn(FnSig<'hir>, TraitMethod<'hir>),
18681868
/// An associated type with (possibly empty) bounds and optional concrete
18691869
/// type.
18701870
Type(GenericBounds<'hir>, Option<&'hir Ty<'hir>>),
@@ -2699,7 +2699,7 @@ impl Node<'_> {
26992699

27002700
pub fn fn_decl(&self) -> Option<&FnDecl<'_>> {
27012701
match self {
2702-
Node::TraitItem(TraitItem { kind: TraitItemKind::Method(fn_sig, _), .. })
2702+
Node::TraitItem(TraitItem { kind: TraitItemKind::Fn(fn_sig, _), .. })
27032703
| Node::ImplItem(ImplItem { kind: ImplItemKind::Method(fn_sig, _), .. })
27042704
| Node::Item(Item { kind: ItemKind::Fn(fn_sig, _, _), .. }) => Some(fn_sig.decl),
27052705
Node::ForeignItem(ForeignItem { kind: ForeignItemKind::Fn(fn_decl, _, _), .. }) => {

src/librustc_hir/intravisit.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -911,14 +911,14 @@ pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v Trai
911911
visitor.visit_ty(ty);
912912
walk_list!(visitor, visit_nested_body, default);
913913
}
914-
TraitItemKind::Method(ref sig, TraitMethod::Required(param_names)) => {
914+
TraitItemKind::Fn(ref sig, TraitMethod::Required(param_names)) => {
915915
visitor.visit_id(trait_item.hir_id);
916916
visitor.visit_fn_decl(&sig.decl);
917917
for &param_name in param_names {
918918
visitor.visit_ident(param_name);
919919
}
920920
}
921-
TraitItemKind::Method(ref sig, TraitMethod::Provided(body_id)) => {
921+
TraitItemKind::Fn(ref sig, TraitMethod::Provided(body_id)) => {
922922
visitor.visit_fn(
923923
FnKind::Method(trait_item.ident, sig, None, &trait_item.attrs),
924924
&sig.decl,

src/librustc_hir/print.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -886,13 +886,13 @@ impl<'a> State<'a> {
886886
Spanned { span: rustc_span::DUMMY_SP, node: hir::VisibilityKind::Inherited };
887887
self.print_associated_const(ti.ident, &ty, default, &vis);
888888
}
889-
hir::TraitItemKind::Method(ref sig, hir::TraitMethod::Required(ref arg_names)) => {
889+
hir::TraitItemKind::Fn(ref sig, hir::TraitMethod::Required(ref arg_names)) => {
890890
let vis =
891891
Spanned { span: rustc_span::DUMMY_SP, node: hir::VisibilityKind::Inherited };
892892
self.print_method_sig(ti.ident, sig, &ti.generics, &vis, arg_names, None);
893893
self.s.word(";");
894894
}
895-
hir::TraitItemKind::Method(ref sig, hir::TraitMethod::Provided(body)) => {
895+
hir::TraitItemKind::Fn(ref sig, hir::TraitMethod::Provided(body)) => {
896896
let vis =
897897
Spanned { span: rustc_span::DUMMY_SP, node: hir::VisibilityKind::Inherited };
898898
self.head("");

src/librustc_hir/target.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ impl Target {
105105
pub fn from_trait_item(trait_item: &TraitItem<'_>) -> Target {
106106
match trait_item.kind {
107107
TraitItemKind::Const(..) => Target::AssocConst,
108-
TraitItemKind::Method(_, hir::TraitMethod::Required(_)) => {
108+
TraitItemKind::Fn(_, hir::TraitMethod::Required(_)) => {
109109
Target::Method(MethodKind::Trait { body: false })
110110
}
111-
TraitItemKind::Method(_, hir::TraitMethod::Provided(_)) => {
111+
TraitItemKind::Fn(_, hir::TraitMethod::Provided(_)) => {
112112
Target::Method(MethodKind::Trait { body: true })
113113
}
114114
TraitItemKind::Type(..) => Target::AssocTy,

src/librustc_incremental/persist/dirty_clean.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ impl DirtyCleanVisitor<'tcx> {
328328
}
329329
}
330330
HirNode::TraitItem(item) => match item.kind {
331-
TraitItemKind::Method(..) => ("Node::TraitItem", LABELS_FN_IN_TRAIT),
331+
TraitItemKind::Fn(..) => ("Node::TraitItem", LABELS_FN_IN_TRAIT),
332332
TraitItemKind::Const(..) => ("NodeTraitConst", LABELS_CONST_IN_TRAIT),
333333
TraitItemKind::Type(..) => ("NodeTraitType", LABELS_CONST_IN_TRAIT),
334334
},

src/librustc_infer/infer/error_reporting/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ fn item_scope_tag(item: &hir::Item<'_>) -> &'static str {
269269

270270
fn trait_item_scope_tag(item: &hir::TraitItem<'_>) -> &'static str {
271271
match item.kind {
272-
hir::TraitItemKind::Method(..) => "method body",
272+
hir::TraitItemKind::Fn(..) => "method body",
273273
hir::TraitItemKind::Const(..) | hir::TraitItemKind::Type(..) => "associated item",
274274
}
275275
}

src/librustc_infer/infer/error_reporting/nice_region_error/find_anon_type.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
3333
let fndecl = match self.tcx().hir().get(hir_id) {
3434
Node::Item(&hir::Item { kind: hir::ItemKind::Fn(ref m, ..), .. })
3535
| Node::TraitItem(&hir::TraitItem {
36-
kind: hir::TraitItemKind::Method(ref m, ..),
36+
kind: hir::TraitItemKind::Fn(ref m, ..),
3737
..
3838
})
3939
| Node::ImplItem(&hir::ImplItem {

src/librustc_infer/traits/error_reporting/on_unimplemented.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
7070
})
7171
}
7272
hir::Node::TraitItem(hir::TraitItem {
73-
kind: hir::TraitItemKind::Method(_, hir::TraitMethod::Provided(body_id)),
73+
kind: hir::TraitItemKind::Fn(_, hir::TraitMethod::Provided(body_id)),
7474
..
7575
}) => self.describe_generator(*body_id).or_else(|| Some("a trait method")),
7676
hir::Node::ImplItem(hir::ImplItem {

src/librustc_infer/traits/error_reporting/suggestions.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
6262
match node {
6363
hir::Node::TraitItem(hir::TraitItem {
6464
generics,
65-
kind: hir::TraitItemKind::Method(..),
65+
kind: hir::TraitItemKind::Fn(..),
6666
..
6767
}) if param_ty && self_ty == self.tcx.types.self_param => {
6868
// Restricting `Self` for a single method.
@@ -73,7 +73,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
7373
hir::Node::Item(hir::Item { kind: hir::ItemKind::Fn(_, generics, _), .. })
7474
| hir::Node::TraitItem(hir::TraitItem {
7575
generics,
76-
kind: hir::TraitItemKind::Method(..),
76+
kind: hir::TraitItemKind::Fn(..),
7777
..
7878
})
7979
| hir::Node::ImplItem(hir::ImplItem {
@@ -807,7 +807,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
807807
})
808808
| Node::TraitItem(&hir::TraitItem {
809809
span,
810-
kind: hir::TraitItemKind::Method(ref sig, _),
810+
kind: hir::TraitItemKind::Fn(ref sig, _),
811811
..
812812
}) => (
813813
self.tcx.sess.source_map().def_span(span),

src/librustc_lint/builtin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingDoc {
465465

466466
let desc = match trait_item.kind {
467467
hir::TraitItemKind::Const(..) => "an associated constant",
468-
hir::TraitItemKind::Method(..) => "a trait method",
468+
hir::TraitItemKind::Fn(..) => "a trait method",
469469
hir::TraitItemKind::Type(..) => "an associated type",
470470
};
471471

src/librustc_lint/nonstandard_style.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonSnakeCase {
343343
}
344344

345345
fn check_trait_item(&mut self, cx: &LateContext<'_, '_>, item: &hir::TraitItem<'_>) {
346-
if let hir::TraitItemKind::Method(_, hir::TraitMethod::Required(pnames)) = item.kind {
346+
if let hir::TraitItemKind::Fn(_, hir::TraitMethod::Required(pnames)) = item.kind {
347347
self.check_snake_case(cx, "trait method", &item.ident);
348348
for param_name in pnames {
349349
self.check_snake_case(cx, "variable", param_name);

src/librustc_metadata/rmeta/encoder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,7 @@ impl EncodeContext<'tcx> {
805805
)
806806
}
807807
ty::AssocKind::Method => {
808-
let fn_data = if let hir::TraitItemKind::Method(m_sig, m) = &ast_item.kind {
808+
let fn_data = if let hir::TraitItemKind::Fn(m_sig, m) = &ast_item.kind {
809809
let param_names = match *m {
810810
hir::TraitMethod::Required(ref names) => {
811811
self.encode_fn_param_names(names)

src/librustc_mir/borrow_check/diagnostics/mutability_errors.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
478478
}))
479479
| Some(hir::Node::TraitItem(hir::TraitItem {
480480
ident,
481-
kind: hir::TraitItemKind::Method(sig, _),
481+
kind: hir::TraitItemKind::Fn(sig, _),
482482
..
483483
}))
484484
| Some(hir::Node::ImplItem(hir::ImplItem {
@@ -520,7 +520,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
520520
hir::Node::Item(hir::Item { ident, kind: hir::ItemKind::Fn(sig, ..), .. })
521521
| hir::Node::TraitItem(hir::TraitItem {
522522
ident,
523-
kind: hir::TraitItemKind::Method(sig, _),
523+
kind: hir::TraitItemKind::Fn(sig, _),
524524
..
525525
})
526526
| hir::Node::ImplItem(hir::ImplItem {

src/librustc_mir_build/build/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fn mir_build(tcx: TyCtxt<'_>, def_id: DefId) -> BodyAndCache<'_> {
4444
})
4545
| Node::TraitItem(hir::TraitItem {
4646
kind:
47-
hir::TraitItemKind::Method(hir::FnSig { decl, .. }, hir::TraitMethod::Provided(body_id)),
47+
hir::TraitItemKind::Fn(hir::FnSig { decl, .. }, hir::TraitMethod::Provided(body_id)),
4848
..
4949
}) => (*body_id, decl.output.span()),
5050
Node::Item(hir::Item { kind: hir::ItemKind::Static(ty, _, body_id), .. })

src/librustc_passes/dead.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ impl<'v, 'k, 'tcx> ItemLikeVisitor<'v> for LifeSeeder<'k, 'tcx> {
391391
let trait_item = self.krate.trait_item(trait_item_ref.id);
392392
match trait_item.kind {
393393
hir::TraitItemKind::Const(_, Some(_))
394-
| hir::TraitItemKind::Method(_, hir::TraitMethod::Provided(_)) => {
394+
| hir::TraitItemKind::Fn(_, hir::TraitMethod::Provided(_)) => {
395395
if has_allow_dead_code_or_lang_attr(
396396
self.tcx,
397397
trait_item.hir_id,
@@ -682,11 +682,11 @@ impl Visitor<'tcx> for DeadVisitor<'tcx> {
682682
fn visit_trait_item(&mut self, trait_item: &'tcx hir::TraitItem<'tcx>) {
683683
match trait_item.kind {
684684
hir::TraitItemKind::Const(_, Some(body_id))
685-
| hir::TraitItemKind::Method(_, hir::TraitMethod::Provided(body_id)) => {
685+
| hir::TraitItemKind::Fn(_, hir::TraitMethod::Provided(body_id)) => {
686686
self.visit_nested_body(body_id)
687687
}
688688
hir::TraitItemKind::Const(_, None)
689-
| hir::TraitItemKind::Method(_, hir::TraitMethod::Required(_))
689+
| hir::TraitItemKind::Fn(_, hir::TraitMethod::Required(_))
690690
| hir::TraitItemKind::Type(..) => {}
691691
}
692692
}

src/librustc_passes/reachable.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> {
162162
},
163163
Some(Node::TraitItem(trait_method)) => match trait_method.kind {
164164
hir::TraitItemKind::Const(_, ref default) => default.is_some(),
165-
hir::TraitItemKind::Method(_, hir::TraitMethod::Provided(_)) => true,
166-
hir::TraitItemKind::Method(_, hir::TraitMethod::Required(_))
165+
hir::TraitItemKind::Fn(_, hir::TraitMethod::Provided(_)) => true,
166+
hir::TraitItemKind::Fn(_, hir::TraitMethod::Required(_))
167167
| hir::TraitItemKind::Type(..) => false,
168168
},
169169
Some(Node::ImplItem(impl_item)) => {
@@ -278,11 +278,11 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> {
278278
Node::TraitItem(trait_method) => {
279279
match trait_method.kind {
280280
hir::TraitItemKind::Const(_, None)
281-
| hir::TraitItemKind::Method(_, hir::TraitMethod::Required(_)) => {
281+
| hir::TraitItemKind::Fn(_, hir::TraitMethod::Required(_)) => {
282282
// Keep going, nothing to get exported
283283
}
284284
hir::TraitItemKind::Const(_, Some(body_id))
285-
| hir::TraitItemKind::Method(_, hir::TraitMethod::Provided(body_id)) => {
285+
| hir::TraitItemKind::Fn(_, hir::TraitMethod::Provided(body_id)) => {
286286
self.visit_nested_body(body_id);
287287
}
288288
hir::TraitItemKind::Type(..) => {}

src/librustc_resolve/late/lifetimes.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
713713
use self::hir::TraitItemKind::*;
714714
self.missing_named_lifetime_spots.push((&trait_item.generics).into());
715715
match trait_item.kind {
716-
Method(ref sig, _) => {
716+
Fn(ref sig, _) => {
717717
let tcx = self.tcx;
718718
self.visit_early_late(
719719
Some(tcx.hir().get_parent_item(trait_item.hir_id)),
@@ -1816,8 +1816,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
18161816
match self.tcx.hir().get(fn_id) {
18171817
Node::Item(&hir::Item { kind: hir::ItemKind::Fn(..), .. })
18181818
| Node::TraitItem(&hir::TraitItem {
1819-
kind: hir::TraitItemKind::Method(..),
1820-
..
1819+
kind: hir::TraitItemKind::Fn(..), ..
18211820
})
18221821
| Node::ImplItem(&hir::ImplItem {
18231822
kind: hir::ImplItemKind::Method(..), ..
@@ -2093,9 +2092,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
20932092
// `fn` definitions and methods.
20942093
Node::Item(&hir::Item { kind: hir::ItemKind::Fn(.., body), .. }) => Some(body),
20952094

2096-
Node::TraitItem(&hir::TraitItem {
2097-
kind: hir::TraitItemKind::Method(_, ref m), ..
2098-
}) => {
2095+
Node::TraitItem(&hir::TraitItem { kind: hir::TraitItemKind::Fn(_, ref m), .. }) => {
20992096
if let hir::ItemKind::Trait(.., ref trait_items) =
21002097
self.tcx.hir().expect_item(self.tcx.hir().get_parent_item(parent)).kind
21012098
{

src/librustc_traits/lowering/environment.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ crate fn environment(tcx: TyCtxt<'_>, def_id: DefId) -> Environment<'_> {
185185

186186
let node_kind = match node {
187187
Node::TraitItem(item) => match item.kind {
188-
TraitItemKind::Method(..) => NodeKind::Fn,
188+
TraitItemKind::Fn(..) => NodeKind::Fn,
189189
_ => NodeKind::Other,
190190
},
191191

0 commit comments

Comments
 (0)