Def::Variant(_, id) | Def::Enum(id) | Def::TyAlias(id) | Def::AssociatedTy(_, id) |
Def::TyParam(id) | Def::Struct(id) | Def::Union(id) | Def::Trait(id) |
Def::Method(id) | Def::Const(id) | Def::AssociatedConst(id) |
- Def::Local(id, _) | Def::Upvar(id, _, _, _) => {
+ Def::Local(id, _) | Def::Upvar(id, ..) => {
id
}
impl<'a> FnKind<'a> {
pub fn attrs(&self) -> &'a [Attribute] {
match *self {
- FnKind::ItemFn(_, _, _, _, _, _, attrs) => attrs,
- FnKind::Method(_, _, _, attrs) => attrs,
+ FnKind::ItemFn(.., attrs) => attrs,
+ FnKind::Method(.., attrs) => attrs,
FnKind::Closure(attrs) => attrs,
}
}
pub fn walk_fn_kind<'v, V: Visitor<'v>>(visitor: &mut V, function_kind: FnKind<'v>) {
match function_kind {
- FnKind::ItemFn(_, generics, _, _, _, _, _) => {
+ FnKind::ItemFn(_, generics, ..) => {
visitor.visit_generics(generics);
}
FnKind::Method(_, sig, _, _) => {
_ => false
}
}
- PatKind::Vec(_, _, _) => true,
+ PatKind::Vec(..) => true,
_ => false
}
}
let method_id_opt = match tcx.map.find(parent) {
Some(node) => match node {
ast_map::NodeItem(item) => match item.node {
- hir::ItemFn(_, _, _, _, ref gen, _) => {
+ hir::ItemFn(.., ref gen, _) => {
taken.extend_from_slice(&gen.lifetimes);
None
},
if let Some(node) = tcx.map.find(parent) {
match node {
ast_map::NodeItem(item) => match item.node {
- hir::ItemImpl(_, _, ref gen, _, _, _) => {
+ hir::ItemImpl(_, _, ref gen, ..) => {
taken.extend_from_slice(&gen.lifetimes);
}
_ => ()
&TypeOrigin::RelateOutputImplTypes(_) => {
"trait type parameters matches those specified on the impl"
}
- &TypeOrigin::MatchExpressionArm(_, _, _) => "match arms have compatible types",
+ &TypeOrigin::MatchExpressionArm(..) => "match arms have compatible types",
&TypeOrigin::IfExpression(_) => "if and else have compatible types",
&TypeOrigin::IfExpressionWithNoElse(_) => "if missing an else returns ()",
&TypeOrigin::RangeExpression(_) => "start and end of range have compatible types",
#![feature(conservative_impl_trait)]
#![feature(const_fn)]
#![feature(core_intrinsics)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(enumset)]
#![feature(libc)]
#![feature(nonzero)]
self.worklist.extend(enum_def.variants.iter()
.map(|variant| variant.node.data.id()));
}
- hir::ItemTrait(_, _, _, ref trait_items) => {
+ hir::ItemTrait(.., ref trait_items) => {
for trait_item in trait_items {
match trait_item.node {
hir::ConstTraitItem(_, Some(_)) |
}
}
}
- hir::ItemImpl(_, _, _, ref opt_trait, _, ref impl_items) => {
+ hir::ItemImpl(.., ref opt_trait, _, ref impl_items) => {
for impl_item in impl_items {
if opt_trait.is_some() ||
has_allow_dead_code_or_lang_attr(&impl_item.attrs) {
block: &'v hir::Block, span: Span, id: ast::NodeId) {
let (is_item_fn, is_unsafe_fn) = match fn_kind {
- FnKind::ItemFn(_, _, unsafety, _, _, _, _) =>
+ FnKind::ItemFn(_, _, unsafety, ..) =>
(true, unsafety == hir::Unsafety::Unsafe),
FnKind::Method(_, sig, _, _) =>
(true, sig.unsafety == hir::Unsafety::Unsafe),
fn visit_expr(&mut self, expr: &hir::Expr) {
match expr.node {
- hir::ExprMethodCall(_, _, _) => {
+ hir::ExprMethodCall(..) => {
let method_call = MethodCall::expr(expr.id);
let base_type = self.tcx.tables.borrow().method_map[&method_call].ty;
debug!("effect: method call case, base type is {:?}",
self.consume_expr(&count);
}
- hir::ExprClosure(_, _, _, fn_decl_span) => {
+ hir::ExprClosure(.., fn_decl_span) => {
self.walk_captures(expr, fn_decl_span)
}
}
match item.node {
- hir::ItemImpl(_, _, ref generics, _, _, _) |
- hir::ItemFn(_, _, _, _, ref generics, _) => {
+ hir::ItemImpl(_, _, ref generics, ..) |
+ hir::ItemFn(.., ref generics, _) => {
generics_require_inlining(generics)
}
_ => false,
// does too.
let impl_node_id = self.tcx.map.as_local_node_id(impl_did).unwrap();
match self.tcx.map.expect_item(impl_node_id).node {
- hir::ItemImpl(_, _, ref generics, _, _, _) => {
+ hir::ItemImpl(_, _, ref generics, ..) => {
generics_require_inlining(generics)
}
_ => false
// If we are building an executable, only explicitly extern
// types need to be exported.
if let ast_map::NodeItem(item) = *node {
- let reachable = if let hir::ItemFn(_, _, _, abi, _, _) = item.node {
+ let reachable = if let hir::ItemFn(.., abi, _, _) = item.node {
abi != Abi::Rust
} else {
false
match *node {
ast_map::NodeItem(item) => {
match item.node {
- hir::ItemFn(_, _, _, _, _, ref search_block) => {
+ hir::ItemFn(.., ref search_block) => {
if item_might_be_inlined(&item) {
intravisit::walk_block(self, &search_block)
}
// inherently and their children are already in the
// worklist, as determined by the privacy pass
hir::ItemExternCrate(_) | hir::ItemUse(_) |
- hir::ItemTy(..) | hir::ItemStatic(_, _, _) |
+ hir::ItemTy(..) | hir::ItemStatic(..) |
hir::ItemMod(..) | hir::ItemForeignMod(..) |
hir::ItemImpl(..) | hir::ItemTrait(..) |
hir::ItemStruct(..) | hir::ItemEnum(..) |
impl<'a, 'v> Visitor<'v> for CollectPrivateImplItemsVisitor<'a> {
fn visit_item(&mut self, item: &hir::Item) {
// We need only trait impls here, not inherent impls, and only non-exported ones
- if let hir::ItemImpl(_, _, _, Some(_), _, ref impl_items) = item.node {
+ if let hir::ItemImpl(.., Some(_), _, ref impl_items) = item.node {
if !self.access_levels.is_reachable(item.id) {
for impl_item in impl_items {
self.worklist.push(impl_item.id);
hir::ItemStruct(_, ref generics) |
hir::ItemUnion(_, ref generics) |
hir::ItemTrait(_, ref generics, _, _) |
- hir::ItemImpl(_, _, ref generics, _, _, _) => {
+ hir::ItemImpl(_, _, ref generics, ..) => {
// These kinds of items have only early bound lifetime parameters.
let lifetimes = &generics.lifetimes;
let start = if let hir::ItemTrait(..) = item.node {
fn visit_fn(&mut self, fk: FnKind<'v>, decl: &'v hir::FnDecl,
b: &'v hir::Block, s: Span, fn_id: ast::NodeId) {
match fk {
- FnKind::ItemFn(_, generics, _, _, _, _, _) => {
+ FnKind::ItemFn(_, generics, ..) => {
self.visit_early_late(fn_id,decl, generics, |this| {
this.add_scope_and_walk_fn(fk, decl, b, s, fn_id)
})
fn_id: ast::NodeId) {
match fk {
- FnKind::ItemFn(_, generics, _, _, _, _, _) => {
+ FnKind::ItemFn(_, generics, ..) => {
intravisit::walk_fn_decl(self, fd);
self.visit_generics(generics);
}
}
match parent.node {
hir::ItemTrait(_, ref generics, _, _) |
- hir::ItemImpl(_, _, ref generics, _, _, _) => {
+ hir::ItemImpl(_, _, ref generics, ..) => {
start += generics.lifetimes.len() + generics.ty_params.len();
}
_ => {}
// they don't have their own stability. They still can be annotated as unstable
// and propagate this unstability to children, but this annotation is completely
// optional. They inherit stability from their parents when unannotated.
- hir::ItemImpl(_, _, _, None, _, _) | hir::ItemForeignMod(..) => {
+ hir::ItemImpl(.., None, _, _) | hir::ItemForeignMod(..) => {
self.in_trait_impl = false;
kind = AnnotationKind::Container;
}
- hir::ItemImpl(_, _, _, Some(_), _, _) => {
+ hir::ItemImpl(.., Some(_), _, _) => {
self.in_trait_impl = true;
}
hir::ItemStruct(ref sd, _) => {
// For implementations of traits, check the stability of each item
// individually as it's possible to have a stable trait with unstable
// items.
- hir::ItemImpl(_, _, _, Some(ref t), _, ref impl_items) => {
+ hir::ItemImpl(.., Some(ref t), _, ref impl_items) => {
let trait_did = tcx.expect_def(t.ref_id).def_id();
let trait_items = tcx.trait_items(trait_did);
}
Some(ast_map::NodeItem(item)) => {
match item.node {
- hir::ItemFn(_, _, _, _, _, ref body) => {
+ hir::ItemFn(.., ref body) => {
// We assume this is a function.
let fn_def_id = tcx.map.local_def_id(id);
pub fn provided_trait_methods(self, id: DefId) -> Vec<Rc<Method<'gcx>>> {
if let Some(id) = self.map.as_local_node_id(id) {
- if let ItemTrait(_, _, _, ref ms) = self.map.expect_item(id).node {
+ if let ItemTrait(.., ref ms) = self.map.expect_item(id).node {
ms.iter().filter_map(|ti| {
if let hir::MethodTraitItem(_, Some(_)) = ti.node {
match self.impl_or_trait_item(self.map.local_def_id(ti.id)) {
pub fn associated_consts(self, id: DefId) -> Vec<Rc<AssociatedConst<'gcx>>> {
if let Some(id) = self.map.as_local_node_id(id) {
match self.map.expect_item(id).node {
- ItemTrait(_, _, _, ref tis) => {
+ ItemTrait(.., ref tis) => {
tis.iter().filter_map(|ti| {
if let hir::ConstTraitItem(_, _) = ti.node {
match self.impl_or_trait_item(self.map.local_def_id(ti.id)) {
}
}).collect()
}
- ItemImpl(_, _, _, _, _, ref iis) => {
+ ItemImpl(.., ref iis) => {
iis.iter().filter_map(|ii| {
if let hir::ImplItemKind::Const(_, _) = ii.node {
match self.impl_or_trait_item(self.map.local_def_id(ii.id)) {
match self.map.find(id) {
Some(ast_map::NodeItem(item)) => {
match item.node {
- hir::ItemImpl(_, polarity, _, _, _, _) => Some(polarity),
+ hir::ItemImpl(_, polarity, ..) => Some(polarity),
_ => None
}
}
id: ast::NodeId,
attributes: &[ast::Attribute]) {
match fk {
- FnKind::ItemFn(name, _, _, _, _, _, _) |
- FnKind::Method(name, _, _, _) => {
+ FnKind::ItemFn(name, ..) |
+ FnKind::Method(name, ..) => {
debug!("borrowck_mir({}) UNIMPLEMENTED", name);
}
FnKind::Closure(_) => {
move_data::Captured =>
(match self.tcx.map.expect_expr(the_move.id).node {
- hir::ExprClosure(_, _, _, fn_decl_span) => fn_decl_span,
+ hir::ExprClosure(.., fn_decl_span) => fn_decl_span,
ref r => bug!("Captured({}) maps to non-closure: {:?}",
the_move.id, r),
}, " (into closure)"),
#![allow(non_camel_case_types)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(quote)]
#![feature(rustc_diagnostic_macros)]
#![feature(rustc_private)]
};
match fn_like.kind() {
- FnKind::ItemFn(_, _, _, hir::Constness::Const, _, _, _) => {
+ FnKind::ItemFn(_, _, _, hir::Constness::Const, ..) => {
Some(fn_like)
}
FnKind::Method(_, m, _, _) => {
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
html_root_url = "https://doc.rust-lang.org/nightly/")]
-
+#![feature(dotdot_in_tuple_patterns)]
#![feature(rustc_private)]
#![feature(staged_api)]
#![feature(rustc_diagnostic_macros)]
fk: FnKind, _: &hir::FnDecl,
_: &hir::Block, span: Span, id: ast::NodeId) {
match fk {
- FnKind::Method(name, _, _, _) => match method_context(cx, id, span) {
+ FnKind::Method(name, ..) => match method_context(cx, id, span) {
MethodLateContext::PlainImpl => {
self.check_snake_case(cx, "method", &name.as_str(), Some(span))
},
},
_ => (),
},
- FnKind::ItemFn(name, _, _, _, _, _, _) => {
+ FnKind::ItemFn(name, ..) => {
self.check_snake_case(cx, "function", &name.as_str(), Some(span))
},
FnKind::Closure(_) => (),
fn check_item(&mut self, cx: &LateContext, it: &hir::Item) {
match it.node {
- hir::ItemTrait(hir::Unsafety::Unsafe, _, _, _) =>
+ hir::ItemTrait(hir::Unsafety::Unsafe, ..) =>
cx.span_lint(UNSAFE_CODE, it.span, "declaration of an `unsafe` trait"),
- hir::ItemImpl(hir::Unsafety::Unsafe, _, _, _, _, _) =>
+ hir::ItemImpl(hir::Unsafety::Unsafe, ..) =>
cx.span_lint(UNSAFE_CODE, it.span, "implementation of an `unsafe` trait"),
_ => return,
fn check_fn(&mut self, cx: &LateContext, fk: FnKind, _: &hir::FnDecl,
_: &hir::Block, span: Span, _: ast::NodeId) {
match fk {
- FnKind::ItemFn(_, _, hir::Unsafety::Unsafe, _, _, _, _) =>
+ FnKind::ItemFn(_, _, hir::Unsafety::Unsafe, ..) =>
cx.span_lint(UNSAFE_CODE, span, "declaration of an `unsafe` function"),
FnKind::Method(_, sig, _, _) => {
hir::ItemEnum(..) => "an enum",
hir::ItemStruct(..) => "a struct",
hir::ItemUnion(..) => "a union",
- hir::ItemTrait(_, _, _, ref items) => {
+ hir::ItemTrait(.., ref items) => {
// Issue #11592, traits are always considered exported, even when private.
if it.vis == hir::Visibility::Inherited {
self.private_traits.insert(it.id);
"a trait"
},
hir::ItemTy(..) => "a type alias",
- hir::ItemImpl(_, _, _, Some(ref trait_ref), _, ref impl_items) => {
+ hir::ItemImpl(.., Some(ref trait_ref), _, ref impl_items) => {
// If the trait is private, add the impl items to private_traits so they don't get
// reported for missing docs.
let real_trait = cx.tcx.expect_def(trait_ref.ref_id).def_id();
impl LateLintPass for InvalidNoMangleItems {
fn check_item(&mut self, cx: &LateContext, it: &hir::Item) {
match it.node {
- hir::ItemFn(_, _, _, _, ref generics, _) => {
+ hir::ItemFn(.., ref generics, _) => {
if attr::contains_name(&it.attrs, "no_mangle") {
if !cx.access_levels.is_reachable(it.id) {
let msg = format!("function {} is marked #[no_mangle], but not exported",
#![cfg_attr(test, feature(test))]
#![feature(box_patterns)]
#![feature(box_syntax)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(quote)]
#![feature(rustc_diagnostic_macros)]
#![feature(rustc_private)]
let trait_ref = tcx.impl_trait_ref(ecx.tcx.map.local_def_id(item.id)).unwrap();
encode_trait_ref(self.rbml_w, ecx, trait_ref, tag_item_trait_ref);
}
- hir::ItemImpl(unsafety, polarity, _, _, _, _) => {
+ hir::ItemImpl(unsafety, polarity, ..) => {
// We need to encode information about the default methods we
// have inherited, so we drive self based on the impl structure.
let impl_items = tcx.impl_items.borrow();
encode_stability(self.rbml_w, stab);
encode_deprecation(self.rbml_w, depr);
}
- hir::ItemTrait(_, _, _, _) => {
+ hir::ItemTrait(..) => {
encode_def_id_and_key(ecx, self.rbml_w, def_id);
encode_family(self.rbml_w, 'I');
encode_item_variances(self.rbml_w, ecx, item.id);
hir::ItemUnion(..) => {
self.encode_addl_union_info(def_id);
}
- hir::ItemImpl(_, _, _, _, _, ref ast_items) => {
+ hir::ItemImpl(.., ref ast_items) => {
self.encode_addl_impl_info(def_id, item.id, ast_items);
}
- hir::ItemTrait(_, _, _, ref trait_items) => {
+ hir::ItemTrait(.., ref trait_items) => {
self.encode_addl_trait_info(def_id, trait_items);
}
}
#![cfg_attr(not(stage0), deny(warnings))]
#![feature(box_patterns)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(enumset)]
#![feature(question_mark)]
#![feature(quote)]
MirSource::Fn(id) => {
let fn_like = FnLikeNode::from_node(infcx.tcx.map.get(id));
match fn_like.map(|f| f.kind()) {
- Some(FnKind::ItemFn(_, _, _, c, _, _, _)) => c,
+ Some(FnKind::ItemFn(_, _, _, c, ..)) => c,
Some(FnKind::Method(_, m, _, _)) => m.constness,
_ => hir::Constness::NotConst
}
#![feature(associated_consts)]
#![feature(box_patterns)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(rustc_diagnostic_macros)]
#![feature(rustc_private)]
#![feature(staged_api)]
if let Some(node_id) = tcx.map.as_local_node_id(def_id) {
let fn_like = FnLikeNode::from_node(tcx.map.get(node_id));
match fn_like.map(|f| f.kind()) {
- Some(FnKind::ItemFn(_, _, _, c, _, _, _)) => {
+ Some(FnKind::ItemFn(_, _, _, c, ..)) => {
c == hir::Constness::Const
}
Some(FnKind::Method(_, m, _, _)) => {
match expr.node {
ExprKind::While(_, _, Some(ident)) |
ExprKind::Loop(_, Some(ident)) |
- ExprKind::WhileLet(_, _, _, Some(ident)) |
- ExprKind::ForLoop(_, _, _, Some(ident)) |
+ ExprKind::WhileLet(.., Some(ident)) |
+ ExprKind::ForLoop(.., Some(ident)) |
ExprKind::Break(Some(ident)) |
ExprKind::Continue(Some(ident)) => {
self.check_label(ident.node, ident.span, expr.id);
.span_err(path.span, "type or lifetime parameters in import path");
}
}
- ItemKind::Impl(_, _, _, Some(..), _, ref impl_items) => {
+ ItemKind::Impl(.., Some(..), _, ref impl_items) => {
self.invalid_visibility(&item.vis, item.span, None);
for impl_item in impl_items {
self.invalid_visibility(&impl_item.vis, impl_item.span, None);
}
}
}
- ItemKind::Impl(_, _, _, None, _, _) => {
+ ItemKind::Impl(.., None, _, _) => {
self.invalid_visibility(&item.vis,
item.span,
Some("place qualifiers on individual impl items instead"));
}
}
}
- ItemKind::Trait(_, _, _, ref trait_items) => {
+ ItemKind::Trait(.., ref trait_items) => {
for trait_item in trait_items {
if let TraitItemKind::Method(ref sig, _) = trait_item.node {
self.check_trait_fn_not_const(sig.constness);
}
let mode = match fk {
- FnKind::ItemFn(_, _, _, hir::Constness::Const, _, _, _)
+ FnKind::ItemFn(_, _, _, hir::Constness::Const, ..)
=> Mode::ConstFn,
FnKind::Method(_, m, _, _) => {
if m.constness == hir::Constness::Const {
html_root_url = "https://doc.rust-lang.org/nightly/")]
#![cfg_attr(not(stage0), deny(warnings))]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(rustc_diagnostic_macros)]
#![feature(staged_api)]
#![feature(rustc_private)]
html_root_url = "https://doc.rust-lang.org/nightly/")]
#![cfg_attr(not(stage0), deny(warnings))]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(rustc_diagnostic_macros)]
#![feature(rustc_private)]
#![feature(staged_api)]
fn visit_item(&mut self, item: &hir::Item) {
let inherited_item_level = match item.node {
// Impls inherit level from their types and traits
- hir::ItemImpl(_, _, _, None, ref ty, _) => {
+ hir::ItemImpl(.., None, ref ty, _) => {
self.ty_level(&ty)
}
- hir::ItemImpl(_, _, _, Some(ref trait_ref), ref ty, _) => {
+ hir::ItemImpl(.., Some(ref trait_ref), ref ty, _) => {
cmp::min(self.ty_level(&ty), self.trait_level(trait_ref))
}
hir::ItemDefaultImpl(_, ref trait_ref) => {
}
}
}
- hir::ItemImpl(_, _, _, None, _, ref impl_items) => {
+ hir::ItemImpl(.., None, _, ref impl_items) => {
for impl_item in impl_items {
if impl_item.vis == hir::Public {
self.update(impl_item.id, item_level);
}
}
}
- hir::ItemImpl(_, _, _, Some(_), _, ref impl_items) => {
+ hir::ItemImpl(.., Some(_), _, ref impl_items) => {
for impl_item in impl_items {
self.update(impl_item.id, item_level);
}
}
- hir::ItemTrait(_, _, _, ref trait_items) => {
+ hir::ItemTrait(.., ref trait_items) => {
for trait_item in trait_items {
self.update(trait_item.id, item_level);
}
hir::ItemUse(..) => {}
// Visit everything
hir::ItemConst(..) | hir::ItemStatic(..) | hir::ItemFn(..) |
- hir::ItemTrait(..) | hir::ItemTy(..) | hir::ItemImpl(_, _, _, Some(..), _, _) => {
+ hir::ItemTrait(..) | hir::ItemTy(..) | hir::ItemImpl(.., Some(..), _, _) => {
if item_level.is_some() {
self.reach().visit_item(item);
}
let def = Def::Const(self.definitions.local_def_id(item.id));
self.define(parent, name, ValueNS, (def, sp, vis));
}
- ItemKind::Fn(_, _, _, _, _, _) => {
+ ItemKind::Fn(..) => {
let def = Def::Fn(self.definitions.local_def_id(item.id));
self.define(parent, name, ValueNS, (def, sp, vis));
}
ItemKind::DefaultImpl(_, _) | ItemKind::Impl(..) => {}
- ItemKind::Trait(_, _, _, ref items) => {
+ ItemKind::Trait(.., ref items) => {
let def_id = self.definitions.local_def_id(item.id);
// Add all the items within to a new module.
#![feature(associated_consts)]
#![feature(borrow_state)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(rustc_diagnostic_macros)]
#![feature(rustc_private)]
#![feature(staged_api)]
_: Span,
node_id: NodeId) {
let rib_kind = match function_kind {
- FnKind::ItemFn(_, generics, _, _, _, _) => {
+ FnKind::ItemFn(_, generics, ..) => {
self.visit_generics(generics);
ItemRibKind
}
ItemKind::Ty(_, ref generics) |
ItemKind::Struct(_, ref generics) |
ItemKind::Union(_, ref generics) |
- ItemKind::Fn(_, _, _, _, ref generics, _) => {
+ ItemKind::Fn(.., ref generics, _) => {
self.with_type_parameter_rib(HasTypeParameters(generics, ItemRibKind),
|this| visit::walk_item(this, item));
}
}.lower(self.tcx));
}
}
- Fn(ref decl, _, _, _, ref ty_params, ref body) =>
+ Fn(ref decl, .., ref ty_params, ref body) =>
self.process_fn(item, &decl, ty_params, &body),
Static(ref typ, _, ref expr) =>
self.process_static_or_const_item(item, typ, expr),
#![cfg_attr(not(stage0), deny(warnings))]
#![feature(custom_attribute)]
+#![feature(dotdot_in_tuple_patterns)]
#![allow(unused_attributes)]
#![feature(rustc_private)]
#![feature(staged_api)]
pub fn get_item_data(&self, item: &ast::Item) -> Option<Data> {
match item.node {
- ast::ItemKind::Fn(ref decl, _, _, _, ref generics, _) => {
+ ast::ItemKind::Fn(ref decl, .., ref generics, _) => {
let qualname = format!("::{}", self.tcx.node_path_str(item.id));
let sub_span = self.span_utils.sub_span_after_keyword(item.span, keywords::Fn);
filter!(self.span_utils, sub_span, item.span, None);
variants: def.variants.iter().map(|v| v.node.data.id()).collect(),
}))
}
- ast::ItemKind::Impl(_, _, _, ref trait_ref, ref typ, _) => {
+ ast::ItemKind::Impl(.., ref trait_ref, ref typ, _) => {
let mut type_data = None;
let sub_span;
Some(impl_id) => match self.tcx.map.get_if_local(impl_id) {
Some(NodeItem(item)) => {
match item.node {
- hir::ItemImpl(_, _, _, _, ref ty, _) => {
+ hir::ItemImpl(.., ref ty, _) => {
let mut result = String::from("<");
result.push_str(&rustc::hir::print::ty_to_string(&ty));
// const items only generate translation items if they are
// actually used somewhere. Just declaring them is insufficient.
}
- hir::ItemFn(_, _, _, _, ref generics, _) => {
+ hir::ItemFn(.., ref generics, _) => {
if !generics.is_type_parameterized() {
let def_id = self.scx.tcx().map.local_def_id(item.id);
let parent_node_id = hir_map.get_parent_node(ii.id);
let is_impl_generic = match hir_map.expect_item(parent_node_id) {
&hir::Item {
- node: hir::ItemImpl(_, _, ref generics, _, _, _),
+ node: hir::ItemImpl(_, _, ref generics, ..),
..
} => {
generics.is_type_parameterized()
#![feature(box_syntax)]
#![feature(const_fn)]
#![feature(custom_attribute)]
+#![feature(dotdot_in_tuple_patterns)]
#![allow(unused_attributes)]
#![feature(libc)]
#![feature(quote)]
// `ty::trait_items` used below requires information generated
// by type collection, which may be in progress at this point.
match tcx.map.expect_item(trait_id).node {
- hir::ItemTrait(_, _, _, ref trait_items) => {
+ hir::ItemTrait(.., ref trait_items) => {
let item = trait_items.iter()
.find(|i| i.name == assoc_name)
.expect("missing associated type");
it.id);
}
hir::ItemFn(..) => {} // entirely within check_item_body
- hir::ItemImpl(_, _, _, _, _, ref impl_items) => {
+ hir::ItemImpl(.., ref impl_items) => {
debug!("ItemImpl {} with id {}", it.name, it.id);
let impl_def_id = ccx.tcx.map.local_def_id(it.id);
match ccx.tcx.impl_trait_ref(impl_def_id) {
ccx.tcx.item_path_str(ccx.tcx.map.local_def_id(it.id)));
let _indenter = indenter();
match it.node {
- hir::ItemFn(ref decl, _, _, _, _, ref body) => {
+ hir::ItemFn(ref decl, .., ref body) => {
check_bare_fn(ccx, &decl, &body, it.id);
}
- hir::ItemImpl(_, _, _, _, _, ref impl_items) => {
+ hir::ItemImpl(.., ref impl_items) => {
debug!("ItemImpl {} with id {}", it.name, it.id);
for impl_item in impl_items {
}
}
}
- hir::ItemTrait(_, _, _, ref trait_items) => {
+ hir::ItemTrait(.., ref trait_items) => {
for trait_item in trait_items {
match trait_item.node {
hir::ConstTraitItem(_, Some(ref expr)) => {
}
}
}
- hir::ItemFn(_, _, _, _, _, ref body) => {
+ hir::ItemFn(.., ref body) => {
self.check_item_fn(item, body);
}
hir::ItemStatic(..) => {
self.check_variances_for_type_defn(item, ast_generics);
}
- hir::ItemTrait(_, _, _, ref items) => {
+ hir::ItemTrait(.., ref items) => {
self.check_trait(item, items);
}
_ => {}
// Converts an implementation in the AST to a vector of items.
fn create_impl_from_item(&self, item: &Item) -> Vec<ImplOrTraitItemId> {
match item.node {
- ItemImpl(_, _, _, _, _, ref impl_items) => {
+ ItemImpl(.., ref impl_items) => {
impl_items.iter().map(|impl_item| {
let impl_def_id = self.crate_context.tcx.map.local_def_id(impl_item.id);
match impl_item.node {
match tcx.map.find(impl_node_id) {
Some(hir_map::NodeItem(item)) => {
let span = match item.node {
- ItemImpl(_, _, _, _, ref ty, _) => {
+ ItemImpl(.., ref ty, _) => {
ty.span
},
_ => item.span
}
Err(CopyImplementationError::InfrigingVariant(name)) => {
let item = tcx.map.expect_item(impl_node_id);
- let span = if let ItemImpl(_, _, _, Some(ref tr), _, _) = item.node {
+ let span = if let ItemImpl(.., Some(ref tr), _, _) = item.node {
tr.path.span
} else {
span
}
Err(CopyImplementationError::NotAnAdt) => {
let item = tcx.map.expect_item(impl_node_id);
- let span = if let ItemImpl(_, _, _, _, ref ty, _) = item.node {
+ let span = if let ItemImpl(.., ref ty, _) = item.node {
ty.span
} else {
span
return;
} else if diff_fields.len() > 1 {
let item = tcx.map.expect_item(impl_node_id);
- let span = if let ItemImpl(_, _, _, Some(ref t), _, _) = item.node {
+ let span = if let ItemImpl(.., Some(ref t), _, _) = item.node {
t.path.span
} else {
tcx.map.span(impl_node_id)
fn check_item(&self, item: &hir::Item) {
let def_id = self.tcx.map.local_def_id(item.id);
match item.node {
- hir::ItemImpl(_, _, _, None, ref ty, _) => {
+ hir::ItemImpl(.., None, ref ty, _) => {
// For inherent impls, self type must be a nominal type
// defined in this crate.
debug!("coherence2::orphan check: inherent impl {}",
}
}
}
- hir::ItemImpl(_, _, _, Some(_), _, _) => {
+ hir::ItemImpl(.., Some(_), _, _) => {
// "Trait" impl
debug!("coherence2::orphan check: trait impl {}",
self.tcx.map.node_to_string(item.id));
err.emit();
}
}
- hir::ItemImpl(_, _, _, Some(_), _, _) => {
+ hir::ItemImpl(.., Some(_), _, _) => {
let impl_def_id = self.tcx.map.local_def_id(item.id);
let trait_ref = self.tcx.impl_trait_ref(impl_def_id).unwrap();
let trait_def_id = trait_ref.def_id;
hir::ItemDefaultImpl(unsafety, _) => {
self.check_unsafety_coherence(item, unsafety, hir::ImplPolarity::Positive);
}
- hir::ItemImpl(unsafety, polarity, _, _, _, _) => {
+ hir::ItemImpl(unsafety, polarity, ..) => {
self.check_unsafety_coherence(item, unsafety, polarity);
}
_ => { }
enforce_impl_lifetimes_are_constrained(ccx, generics, def_id, impl_items);
},
- hir::ItemTrait(_, _, _, ref trait_items) => {
+ hir::ItemTrait(.., ref trait_items) => {
let trait_def = trait_def_of_item(ccx, it);
let def_id = trait_def.trait_ref.def_id;
let _: Result<(), ErrorReported> = // any error is already reported, can ignore
};
let trait_items = match item.node {
- hir::ItemTrait(_, _, _, ref trait_items) => trait_items,
+ hir::ItemTrait(.., ref trait_items) => trait_items,
_ => bug!("trait_node_id {} is not a trait", trait_node_id)
};
NodeItem(item) => {
match item.node {
- ItemFn(_, _, _, _, ref generics, _) |
- ItemImpl(_, _, ref generics, _, _, _) => generics,
+ ItemFn(.., ref generics, _) |
+ ItemImpl(_, _, ref generics, ..) => generics,
ItemTy(_, ref generics) |
ItemEnum(_, ref generics) |
let no_generics = hir::Generics::empty();
let generics = match it.node {
- hir::ItemFn(_, _, _, _, ref generics, _) |
+ hir::ItemFn(.., ref generics, _) |
hir::ItemTy(_, ref generics) |
hir::ItemEnum(_, ref generics) |
hir::ItemStruct(_, ref generics) |
#![feature(box_patterns)]
#![feature(box_syntax)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(quote)]
#![feature(rustc_diagnostic_macros)]
#![feature(rustc_private)]
match tcx.map.find(main_id) {
Some(hir_map::NodeItem(it)) => {
match it.node {
- hir::ItemFn(_, _, _, _, ref generics, _) => {
+ hir::ItemFn(.., ref generics, _) => {
if generics.is_parameterized() {
struct_span_err!(ccx.tcx.sess, generics.span, E0131,
"main function is not allowed to have type parameters")
match tcx.map.find(start_id) {
Some(hir_map::NodeItem(it)) => {
match it.node {
- hir::ItemFn(_,_,_,_,ref ps,_)
+ hir::ItemFn(..,ref ps,_)
if ps.is_parameterized() => {
struct_span_err!(tcx.sess, ps.span, E0132,
"start function is not allowed to have type parameters")
#![feature(const_fn)]
#![feature(core_float)]
#![feature(core_intrinsics)]
+#![feature(dotdot_in_tuple_patterns)]
#![feature(dropck_parametricity)]
#![feature(float_extras)]
#![feature(float_from_str_radix)]
const ERROR_INVALID_PARAMETER: i32 = 87;
match (self.read, self.write, self.append, self.access_mode) {
- (_, _, _, Some(mode)) => Ok(mode),
+ (.., Some(mode)) => Ok(mode),
(true, false, false, None) => Ok(c::GENERIC_READ),
(false, true, false, None) => Ok(c::GENERIC_WRITE),
(true, true, false, None) => Ok(c::GENERIC_READ | c::GENERIC_WRITE),
PatKind::Wild |
PatKind::Lit(_) |
PatKind::Range(_, _) |
- PatKind::Ident(_, _, _) |
+ PatKind::Ident(..) |
PatKind::Path(..) |
PatKind::Mac(_) => {
true
// force-host
+#![feature(dotdot_in_tuple_patterns)]
#![feature(plugin_registrar, quote, rustc_private)]
extern crate syntax;
Annotatable::ImplItem(_) => {
quote_item!(cx, impl X { fn foo(&self) -> i32 { 42 } }).unwrap().and_then(|i| {
match i.node {
- ItemKind::Impl(_, _, _, _, _, mut items) => {
+ ItemKind::Impl(.., mut items) => {
Annotatable::ImplItem(P(items.pop().expect("impl method not found")))
}
_ => unreachable!("impl parsed to something other than impl")
Annotatable::TraitItem(_) => {
quote_item!(cx, trait X { fn foo(&self) -> i32 { 0 } }).unwrap().and_then(|i| {
match i.node {
- ItemKind::Trait(_, _, _, mut items) => {
+ ItemKind::Trait(.., mut items) => {
Annotatable::TraitItem(P(items.pop().expect("trait method not found")))
}
_ => unreachable!("trait parsed to something other than trait")
// force-host
+#![feature(dotdot_in_tuple_patterns)]
#![feature(plugin_registrar, quote, rustc_private)]
extern crate syntax;
Annotatable::ImplItem(_it) => vec![
quote_item!(cx, impl X { fn foo(&self) -> i32 { 42 } }).unwrap().and_then(|i| {
match i.node {
- ItemKind::Impl(_, _, _, _, _, mut items) => {
+ ItemKind::Impl(.., mut items) => {
Annotatable::ImplItem(P(items.pop().expect("impl method not found")))
}
_ => unreachable!("impl parsed to something other than impl")
Annotatable::TraitItem(_it) => vec![
quote_item!(cx, trait X { fn foo(&self) -> i32 { 0 } }).unwrap().and_then(|i| {
match i.node {
- ItemKind::Trait(_, _, _, mut items) => {
+ ItemKind::Trait(.., mut items) => {
Annotatable::TraitItem(P(items.pop().expect("trait method not found")))
}
_ => unreachable!("trait parsed to something other than trait")
push: &mut FnMut(Annotatable)) {
let (orig_fn_name, ret_type) = match *it {
Annotatable::Item(ref item) => match item.node {
- ItemKind::Fn(ref decl, _, _, _, _, _) => {
+ ItemKind::Fn(ref decl, ..) => {
(item.ident, &decl.output)
}
_ => cx.span_fatal(item.span, "Only functions with return types can be annotated.")