]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_typeck/rscope.rs
rustc_typeck: pass all lifetimes through AstConv::opt_ast_region_to_region.
[rust.git] / src / librustc_typeck / rscope.rs
index 839eb8be9ace8c093ccaa115e4a174acab0e0fc4..2ad1a7c3d685f07f2797358c75a2e3e89e0c762f 100644 (file)
@@ -41,7 +41,7 @@ pub struct ElisionFailureInfo {
 /// can return `Err(())` to indicate that this is not a scope in which
 /// regions can legally be omitted.
 pub trait RegionScope {
-    fn anon_region(&self, span: Span)
+    fn anon_region(&self, span: Span, def: Option<&ty::RegionParameterDef>)
                     -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>>;
 
     /// If an object omits any explicit lifetime bound, and none can
@@ -115,9 +115,9 @@ fn object_lifetime_default(&self, span: Span) -> Option<ty::Region> {
         self.base_scope.object_lifetime_default(span)
     }
 
-    fn anon_region(&self, span: Span)
+    fn anon_region(&self, span: Span, def: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>> {
-        self.base_scope.anon_region(span)
+        self.base_scope.anon_region(span, def)
     }
 
     fn base_object_lifetime_default(&self, span: Span) -> ty::Region {
@@ -135,7 +135,7 @@ fn anon_type_scope(&self) -> Option<AnonTypeScope> {
 pub struct ExplicitRscope;
 
 impl RegionScope for ExplicitRscope {
-    fn anon_region(&self, _span: Span)
+    fn anon_region(&self, _span: Span, _: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>> {
         Err(None)
     }
@@ -159,7 +159,7 @@ pub fn new(v: Option<Vec<ElisionFailureInfo>>) -> UnelidableRscope {
 }
 
 impl RegionScope for UnelidableRscope {
-    fn anon_region(&self, _span: Span)
+    fn anon_region(&self, _span: Span, _: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>> {
         Err(self.0.clone())
     }
@@ -199,7 +199,7 @@ fn base_object_lifetime_default(&self, _span: Span) -> ty::Region {
         ty::ReStatic
     }
 
-    fn anon_region(&self, _span: Span)
+    fn anon_region(&self, _span: Span, _: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>>
     {
         Ok(self.default)
@@ -221,7 +221,7 @@ pub fn new(tcx: &'a ty::TyCtxt<'a, 'gcx, 'tcx>) -> Self {
 }
 
 impl<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> RegionScope for StaticRscope<'a, 'gcx, 'tcx> {
-    fn anon_region(&self, span: Span)
+    fn anon_region(&self, span: Span, _: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>> {
         if !self.tcx.sess.features.borrow().static_in_const {
             self.tcx
@@ -269,7 +269,7 @@ fn base_object_lifetime_default(&self, _span: Span) -> ty::Region {
         ty::ReStatic
     }
 
-    fn anon_region(&self, _: Span)
+    fn anon_region(&self, _: Span, _: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>>
     {
         let idx = self.anon_bindings.get();
@@ -315,10 +315,10 @@ fn base_object_lifetime_default(&self, span: Span) -> ty::Region {
         self.base_scope.base_object_lifetime_default(span)
     }
 
-    fn anon_region(&self, span: Span)
+    fn anon_region(&self, span: Span, def: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>>
     {
-        self.base_scope.anon_region(span)
+        self.base_scope.anon_region(span, def)
     }
 
     fn anon_type_scope(&self) -> Option<AnonTypeScope> {
@@ -348,10 +348,10 @@ fn base_object_lifetime_default(&self, span: Span) -> ty::Region {
         ty::fold::shift_region(self.base_scope.base_object_lifetime_default(span), 1)
     }
 
-    fn anon_region(&self, span: Span)
+    fn anon_region(&self, span: Span, def: Option<&ty::RegionParameterDef>)
                    -> Result<ty::Region, Option<Vec<ElisionFailureInfo>>>
     {
-        self.base_scope.anon_region(span).map(|r| ty::fold::shift_region(r, 1))
+        self.base_scope.anon_region(span, def).map(|r| ty::fold::shift_region(r, 1))
     }
 
     fn anon_type_scope(&self) -> Option<AnonTypeScope> {