@@ -24,9 +24,10 @@ use syntax::ast::{AttrVec, Attribute, Label, LitKind, StrStyle, FloatTy, IntTy,
24
24
pub use syntax:: ast:: { Mutability , Constness , Unsafety , Movability , CaptureBy } ;
25
25
pub use syntax:: ast:: { IsAuto , ImplPolarity , BorrowKind } ;
26
26
use syntax:: attr:: { InlineAttr , OptimizeAttr } ;
27
- use syntax:: symbol:: { Symbol , kw} ;
28
27
use syntax:: tokenstream:: TokenStream ;
29
28
use syntax:: util:: parser:: ExprPrecedence ;
29
+ use syntax_pos:: symbol:: { Symbol , kw, sym} ;
30
+ use syntax_pos:: source_map:: SourceMap ;
30
31
use rustc_target:: spec:: abi:: Abi ;
31
32
use rustc_data_structures:: sync:: { par_for_each_in, Send , Sync } ;
32
33
use rustc_macros:: HashStable ;
@@ -1597,9 +1598,7 @@ impl fmt::Debug for Expr {
1597
1598
1598
1599
/// Checks if the specified expression is a built-in range literal.
1599
1600
/// (See: `LoweringContext::lower_expr()`).
1600
- pub fn is_range_literal ( sess : & Session , expr : & hir:: Expr ) -> bool {
1601
- use hir:: { Path , QPath , ExprKind , TyKind } ;
1602
-
1601
+ pub fn is_range_literal ( sm : & SourceMap , expr : & Expr ) -> bool {
1603
1602
// Returns whether the given path represents a (desugared) range,
1604
1603
// either in std or core, i.e. has either a `::std::ops::Range` or
1605
1604
// `::core::ops::Range` prefix.
@@ -1617,11 +1616,10 @@ pub fn is_range_literal(sess: &Session, expr: &hir::Expr) -> bool {
1617
1616
1618
1617
// Check whether a span corresponding to a range expression is a
1619
1618
// range literal, rather than an explicit struct or `new()` call.
1620
- fn is_lit ( sess : & Session , span : & Span ) -> bool {
1621
- let source_map = sess. source_map ( ) ;
1622
- let end_point = source_map. end_point ( * span) ;
1619
+ fn is_lit ( sm : & SourceMap , span : & Span ) -> bool {
1620
+ let end_point = sm. end_point ( * span) ;
1623
1621
1624
- if let Ok ( end_string) = source_map . span_to_snippet ( end_point) {
1622
+ if let Ok ( end_string) = sm . span_to_snippet ( end_point) {
1625
1623
!( end_string. ends_with ( "}" ) || end_string. ends_with ( ")" ) )
1626
1624
} else {
1627
1625
false
@@ -1632,21 +1630,21 @@ pub fn is_range_literal(sess: &Session, expr: &hir::Expr) -> bool {
1632
1630
// All built-in range literals but `..=` and `..` desugar to `Struct`s.
1633
1631
ExprKind :: Struct ( ref qpath, _, _) => {
1634
1632
if let QPath :: Resolved ( None , ref path) = * * qpath {
1635
- return is_range_path ( & path) && is_lit ( sess , & expr. span ) ;
1633
+ return is_range_path ( & path) && is_lit ( sm , & expr. span ) ;
1636
1634
}
1637
1635
}
1638
1636
1639
1637
// `..` desugars to its struct path.
1640
1638
ExprKind :: Path ( QPath :: Resolved ( None , ref path) ) => {
1641
- return is_range_path ( & path) && is_lit ( sess , & expr. span ) ;
1639
+ return is_range_path ( & path) && is_lit ( sm , & expr. span ) ;
1642
1640
}
1643
1641
1644
1642
// `..=` desugars into `::std::ops::RangeInclusive::new(...)`.
1645
1643
ExprKind :: Call ( ref func, _) => {
1646
1644
if let ExprKind :: Path ( QPath :: TypeRelative ( ref ty, ref segment) ) = func. kind {
1647
1645
if let TyKind :: Path ( QPath :: Resolved ( None , ref path) ) = ty. kind {
1648
1646
let new_call = segment. ident . name == sym:: new;
1649
- return is_range_path ( & path) && is_lit ( sess , & expr. span ) && new_call;
1647
+ return is_range_path ( & path) && is_lit ( sm , & expr. span ) && new_call;
1650
1648
}
1651
1649
}
1652
1650
}
0 commit comments