]> git.lizzy.rs Git - rust.git/commitdiff
Remove AngleBracketedArgs impl
authorvarkor <github@varkor.com>
Sat, 26 May 2018 22:54:48 +0000 (23:54 +0100)
committervarkor <github@varkor.com>
Wed, 20 Jun 2018 11:21:08 +0000 (12:21 +0100)
src/librustc/hir/lowering.rs
src/librustc_driver/pretty.rs
src/librustc_passes/ast_validation.rs
src/librustc_save_analysis/dump_visitor.rs
src/libsyntax/ast.rs

index 67afe58912992f3a8852a1df7aae8ba550294e4a..830481d4f73610a98b09a52b4c9cb5cae48d2868 100644 (file)
@@ -1754,12 +1754,16 @@ fn lower_angle_bracketed_parameter_data(
         itctx: ImplTraitContext,
     ) -> (hir::GenericArgs, bool) {
         let &AngleBracketedArgs { ref args, ref bindings, .. } = data;
+        let has_types = args.iter().any(|arg| match arg {
+            GenericArgAST::Type(_) => true,
+            _ => false,
+        });
         (hir::GenericArgs {
             args: args.iter().map(|a| self.lower_generic_arg(a, itctx)).collect(),
             bindings: bindings.iter().map(|b| self.lower_ty_binding(b, itctx)).collect(),
             parenthesized: false,
         },
-        data.types().count() == 0 && param_mode == ParamMode::Optional)
+        has_types && param_mode == ParamMode::Optional)
     }
 
     fn lower_parenthesized_parameter_data(
index 0ea2832bf80d9ad181d035a4e56e09d48bd66798..14003f0fd37191c76035b1ae8cf8095ca72b73a4 100644 (file)
@@ -679,12 +679,18 @@ fn involves_impl_trait(ty: &ast::Ty) -> bool {
                     ast::TyKind::Path(_, ref path) => path.segments.iter().any(|seg| {
                         match seg.args.as_ref().map(|generic_arg| &**generic_arg) {
                             None => false,
-                            Some(&ast::GenericArgs::AngleBracketed(ref data)) =>
-                                any_involves_impl_trait(data.types().into_iter()) ||
-                                any_involves_impl_trait(data.bindings.iter().map(|b| &b.ty)),
-                            Some(&ast::GenericArgs::Parenthesized(ref data)) =>
+                            Some(&ast::GenericArgs::AngleBracketed(ref data)) => {
+                                let types = data.args.iter().filter_map(|arg| match arg {
+                                    ast::GenericArgAST::Type(ty) => Some(ty),
+                                    _ => None,
+                                });
+                                any_involves_impl_trait(types.into_iter()) ||
+                                any_involves_impl_trait(data.bindings.iter().map(|b| &b.ty))
+                            },
+                            Some(&ast::GenericArgs::Parenthesized(ref data)) => {
                                 any_involves_impl_trait(data.inputs.iter()) ||
-                                any_involves_impl_trait(data.output.iter()),
+                                any_involves_impl_trait(data.output.iter())
+                            }
                         }
                     }),
                     _ => false,
index 9a1dfbd931a3c0d2652395fcf3dde34bcf7625d5..a6ef83671a55e51885228b83d9e4d1d2b4637daf 100644 (file)
@@ -515,21 +515,24 @@ fn visit_ty(&mut self, t: &'a Ty) {
     }
     fn visit_generic_args(&mut self, _: Span, generic_args: &'a GenericArgs) {
         match *generic_args {
-            GenericArgs::AngleBracketed(ref generic_args) => {
-                for type_ in generic_args.types() {
-                    self.visit_ty(type_);
+            GenericArgs::AngleBracketed(ref data) => {
+                for arg in &data.args {
+                    match arg {
+                        GenericArgAST::Type(ty) => self.visit_ty(ty),
+                        _ => {}
+                    }
                 }
-                for type_binding in &generic_args.bindings {
+                for type_binding in &data.bindings {
                     // Type bindings such as `Item=impl Debug` in `Iterator<Item=Debug>`
                     // are allowed to contain nested `impl Trait`.
                     self.with_impl_trait(None, |this| visit::walk_ty(this, &type_binding.ty));
                 }
             }
-            GenericArgs::Parenthesized(ref generic_args) => {
-                for type_ in &generic_args.inputs {
+            GenericArgs::Parenthesized(ref data) => {
+                for type_ in &data.inputs {
                     self.visit_ty(type_);
                 }
-                if let Some(ref type_) = generic_args.output {
+                if let Some(ref type_) = data.output {
                     // `-> Foo` syntax is essentially an associated type binding,
                     // so it is also allowed to contain nested `impl Trait`.
                     self.with_impl_trait(None, |this| visit::walk_ty(this, type_));
index 94552e08a8cea7c4e0667f862fbb309869cc6cb7..5faa3559c76aac6d25560ecb88a34a412baa8d1f 100644 (file)
@@ -825,9 +825,14 @@ fn process_path(&mut self, id: NodeId, path: &'l ast::Path) {
         for seg in &path.segments {
             if let Some(ref generic_args) = seg.args {
                 match **generic_args {
-                    ast::GenericArgs::AngleBracketed(ref data) => for t in data.types() {
-                        self.visit_ty(t);
-                    },
+                    ast::GenericArgs::AngleBracketed(ref data) => {
+                        for arg in &data.args {
+                            match arg {
+                                ast::GenericArgAST::Type(ty) => self.visit_ty(ty),
+                                _ => {}
+                            }
+                        }
+                    }
                     ast::GenericArgs::Parenthesized(ref data) => {
                         for t in &data.inputs {
                             self.visit_ty(t);
@@ -910,8 +915,11 @@ fn process_method_call(
         // Explicit types in the turbo-fish.
         if let Some(ref generic_args) = seg.args {
             if let ast::GenericArgs::AngleBracketed(ref data) = **generic_args {
-                for t in data.types() {
-                    self.visit_ty(t);
+                for arg in &data.args {
+                    match arg {
+                        ast::GenericArgAST::Type(ty) => self.visit_ty(ty),
+                        _ => {}
+                    }
                 }
             }
         }
index 715e4d233dfbdf36b2976f701da61bf54bdcf382..c2626c70a42736f8b9b13db6ed2a4b8890f8df44 100644 (file)
@@ -178,28 +178,6 @@ pub struct AngleBracketedArgs {
     pub bindings: Vec<TypeBinding>,
 }
 
-impl AngleBracketedArgs {
-    pub fn lifetimes(&self) -> impl DoubleEndedIterator<Item = &Lifetime> {
-        self.args.iter().filter_map(|arg| {
-            if let GenericArgAST::Lifetime(lt) = arg {
-                Some(lt)
-            } else {
-                None
-            }
-        })
-    }
-
-    pub fn types(&self) -> impl DoubleEndedIterator<Item = &P<Ty>> {
-        self.args.iter().filter_map(|arg| {
-            if let GenericArgAST::Type(ty) = arg {
-                Some(ty)
-            } else {
-                None
-            }
-        })
-    }
-}
-
 impl Into<Option<P<GenericArgs>>> for AngleBracketedArgs {
     fn into(self) -> Option<P<GenericArgs>> {
         Some(P(GenericArgs::AngleBracketed(self)))