@@ -29,10 +29,10 @@ use syntax::ast::{AttrVec, Attribute, FloatTy, IntTy, Label, LitKind, StrStyle,
29
29
pub use syntax:: ast:: { BorrowKind , ImplPolarity , IsAuto } ;
30
30
pub use syntax:: ast:: { CaptureBy , Constness , Movability , Mutability , Unsafety } ;
31
31
use syntax:: attr:: { InlineAttr , OptimizeAttr } ;
32
- use syntax:: source_map:: Spanned ;
33
- use syntax:: symbol:: { kw, Symbol } ;
34
32
use syntax:: tokenstream:: TokenStream ;
35
33
use syntax:: util:: parser:: ExprPrecedence ;
34
+ use syntax_pos:: source_map:: { SourceMap , Spanned } ;
35
+ use syntax_pos:: symbol:: { kw, sym, Symbol } ;
36
36
use syntax_pos:: { MultiSpan , Span , DUMMY_SP } ;
37
37
38
38
/// HIR doesn't commit to a concrete storage type and has its own alias for a vector.
@@ -1566,9 +1566,7 @@ impl fmt::Debug for Expr {
1566
1566
1567
1567
/// Checks if the specified expression is a built-in range literal.
1568
1568
/// (See: `LoweringContext::lower_expr()`).
1569
- pub fn is_range_literal ( sess : & Session , expr : & hir:: Expr ) -> bool {
1570
- use hir:: { Path , QPath , ExprKind , TyKind } ;
1571
-
1569
+ pub fn is_range_literal ( sm : & SourceMap , expr : & Expr ) -> bool {
1572
1570
// Returns whether the given path represents a (desugared) range,
1573
1571
// either in std or core, i.e. has either a `::std::ops::Range` or
1574
1572
// `::core::ops::Range` prefix.
@@ -1586,11 +1584,10 @@ pub fn is_range_literal(sess: &Session, expr: &hir::Expr) -> bool {
1586
1584
1587
1585
// Check whether a span corresponding to a range expression is a
1588
1586
// range literal, rather than an explicit struct or `new()` call.
1589
- fn is_lit ( sess : & Session , span : & Span ) -> bool {
1590
- let source_map = sess. source_map ( ) ;
1591
- let end_point = source_map. end_point ( * span) ;
1587
+ fn is_lit ( sm : & SourceMap , span : & Span ) -> bool {
1588
+ let end_point = sm. end_point ( * span) ;
1592
1589
1593
- if let Ok ( end_string) = source_map . span_to_snippet ( end_point) {
1590
+ if let Ok ( end_string) = sm . span_to_snippet ( end_point) {
1594
1591
!( end_string. ends_with ( "}" ) || end_string. ends_with ( ")" ) )
1595
1592
} else {
1596
1593
false
@@ -1601,21 +1598,21 @@ pub fn is_range_literal(sess: &Session, expr: &hir::Expr) -> bool {
1601
1598
// All built-in range literals but `..=` and `..` desugar to `Struct`s.
1602
1599
ExprKind :: Struct ( ref qpath, _, _) => {
1603
1600
if let QPath :: Resolved ( None , ref path) = * * qpath {
1604
- return is_range_path ( & path) && is_lit ( sess , & expr. span ) ;
1601
+ return is_range_path ( & path) && is_lit ( sm , & expr. span ) ;
1605
1602
}
1606
1603
}
1607
1604
1608
1605
// `..` desugars to its struct path.
1609
1606
ExprKind :: Path ( QPath :: Resolved ( None , ref path) ) => {
1610
- return is_range_path ( & path) && is_lit ( sess , & expr. span ) ;
1607
+ return is_range_path ( & path) && is_lit ( sm , & expr. span ) ;
1611
1608
}
1612
1609
1613
1610
// `..=` desugars into `::std::ops::RangeInclusive::new(...)`.
1614
1611
ExprKind :: Call ( ref func, _) => {
1615
1612
if let ExprKind :: Path ( QPath :: TypeRelative ( ref ty, ref segment) ) = func. kind {
1616
1613
if let TyKind :: Path ( QPath :: Resolved ( None , ref path) ) = ty. kind {
1617
1614
let new_call = segment. ident . name == sym:: new;
1618
- return is_range_path ( & path) && is_lit ( sess , & expr. span ) && new_call;
1615
+ return is_range_path ( & path) && is_lit ( sm , & expr. span ) && new_call;
1619
1616
}
1620
1617
}
1621
1618
}
0 commit comments