]> git.lizzy.rs Git - rust.git/commitdiff
adding macro, cleaning up code
authorgaurikholkar <f2013002@goa.bits-pilani.ac.in>
Wed, 23 Aug 2017 19:48:20 +0000 (01:18 +0530)
committergaurikholkar <f2013002@goa.bits-pilani.ac.in>
Wed, 23 Aug 2017 19:59:13 +0000 (01:29 +0530)
src/librustc/infer/error_reporting/anon_anon_conflict.rs
src/librustc/infer/error_reporting/mod.rs
src/librustc/infer/error_reporting/util.rs

index 08be7587cb4448244a78954b7acc426572131ff4..c80ce3c96f1a98a3d44870719fd5edffcd028f4e 100644 (file)
@@ -46,22 +46,17 @@ pub fn try_report_anon_anon_conflict(&self, error: &RegionResolutionError<'tcx>)
         };
 
         // Determine whether the sub and sup consist of both anonymous (elided) regions.
-        let (ty_sup, ty_sub, scope_def_id_sup, scope_def_id_sub, bregion_sup, bregion_sub) =
-            if let (Some(anon_reg_sup), Some(anon_reg_sub)) =
-                (self.is_suitable_anonymous_region(sup), self.is_suitable_anonymous_region(sub)) {
-                let (def_id_sup, br_sup, def_id_sub, br_sub) = (anon_reg_sup.def_id,
-                                                                anon_reg_sup.boundregion,
-                                                                anon_reg_sub.def_id,
-                                                                anon_reg_sub.boundregion);
-                if let (Some(anonarg_sup), Some(anonarg_sub)) =
-                    (self.find_anon_type(sup, &br_sup), self.find_anon_type(sub, &br_sub)) {
-                    (anonarg_sup, anonarg_sub, def_id_sup, def_id_sub, br_sup, br_sub)
-                } else {
-                    return false;
-                }
-            } else {
-                return false;
-            };
+        let anon_reg_sup = or_false!(self.is_suitable_anonymous_region(sup));
+
+        let anon_reg_sub = or_false!(self.is_suitable_anonymous_region(sub));
+        let scope_def_id_sup = anon_reg_sup.def_id;
+        let bregion_sup = anon_reg_sup.boundregion;
+        let scope_def_id_sub = anon_reg_sub.def_id;
+        let bregion_sub = anon_reg_sub.boundregion;
+
+        let ty_sup = or_false!(self.find_anon_type(sup, &bregion_sup));
+
+        let ty_sub = or_false!(self.find_anon_type(sub, &bregion_sub));
 
         let (main_label, label1, label2) = if let (Some(sup_arg), Some(sub_arg)) =
             (self.find_arg_with_anonymous_region(sup, sup),
@@ -105,7 +100,6 @@ pub fn try_report_anon_anon_conflict(&self, error: &RegionResolutionError<'tcx>)
             return false;
         };
 
-
         struct_span_err!(self.tcx.sess, span, E0623, "lifetime mismatch")
             .span_label(ty_sup.span, main_label)
             .span_label(ty_sub.span, format!(""))
index 9f70b4834ddc5d71b0700be42671d9e584a3678f..195609992f75765345201d3cee4efd0c6b7e71fe 100644 (file)
 mod note;
 
 mod need_type_info;
-mod util;
+
 mod named_anon_conflict;
+#[macro_use]
+mod util;
 mod anon_anon_conflict;
 
 impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
index 3d5dcf37c48c17fb38666112edb1d7089d46b3dc..635d0e8eb275f29f8eb41ee3416a99b89bbe6be0 100644 (file)
 use hir::def_id::DefId;
 use hir::map as hir_map;
 
+macro_rules! or_false {
+     ($v:expr) => {
+          match $v {
+               Some(v) => v,
+               None => return false,
+          }
+     }
+}
+
 // The struct contains the information about the anonymous region
 // we are searching for.
 pub struct AnonymousArgInfo<'tcx> {
@@ -59,7 +68,6 @@ pub fn find_arg_with_anonymous_region(&self,
                                           -> Option<AnonymousArgInfo> {
 
         if let ty::ReFree(ref free_region) = *anon_region {
-
             let id = free_region.scope;
             let hir = &self.tcx.hir;
             if let Some(node_id) = hir.as_local_node_id(id) {