@@ -1731,12 +1731,12 @@ pub enum AttrArgs {
1731
1731
/// Delimited arguments: `#[attr()/[]/{}]`.
1732
1732
Delimited ( DelimArgs ) ,
1733
1733
/// Arguments of a key-value attribute: `#[attr = "value"]`.
1734
- Eq (
1734
+ Eq {
1735
1735
/// Span of the `=` token.
1736
- Span ,
1737
- /// The "value".
1738
- AttrArgsEq ,
1739
- ) ,
1736
+ eq_span : Span ,
1737
+
1738
+ value : AttrArgsEq ,
1739
+ } ,
1740
1740
}
1741
1741
1742
1742
// The RHS of an `AttrArgs::Eq` starts out as an expression. Once macro
@@ -1748,15 +1748,39 @@ pub enum AttrArgsEq {
1748
1748
Hir ( MetaItemLit ) ,
1749
1749
}
1750
1750
1751
+ impl AttrArgsEq {
1752
+ pub fn span ( & self ) -> Span {
1753
+ match self {
1754
+ AttrArgsEq :: Ast ( p) => p. span ,
1755
+ AttrArgsEq :: Hir ( lit) => lit. span ,
1756
+ }
1757
+ }
1758
+
1759
+ pub fn unwrap_ast ( & self ) -> & Expr {
1760
+ match self {
1761
+ AttrArgsEq :: Ast ( p) => p,
1762
+ AttrArgsEq :: Hir ( lit) => {
1763
+ unreachable ! ( "in literal form when getting inner tokens: {lit:?}" )
1764
+ }
1765
+ }
1766
+ }
1767
+
1768
+ pub fn unwrap_ast_mut ( & mut self ) -> & mut P < Expr > {
1769
+ match self {
1770
+ AttrArgsEq :: Ast ( p) => p,
1771
+ AttrArgsEq :: Hir ( lit) => {
1772
+ unreachable ! ( "in literal form when getting inner tokens: {lit:?}" )
1773
+ }
1774
+ }
1775
+ }
1776
+ }
1777
+
1751
1778
impl AttrArgs {
1752
1779
pub fn span ( & self ) -> Option < Span > {
1753
1780
match self {
1754
1781
AttrArgs :: Empty => None ,
1755
1782
AttrArgs :: Delimited ( args) => Some ( args. dspan . entire ( ) ) ,
1756
- AttrArgs :: Eq ( eq_span, AttrArgsEq :: Ast ( expr) ) => Some ( eq_span. to ( expr. span ) ) ,
1757
- AttrArgs :: Eq ( _, AttrArgsEq :: Hir ( lit) ) => {
1758
- unreachable ! ( "in literal form when getting span: {:?}" , lit) ;
1759
- }
1783
+ AttrArgs :: Eq { eq_span, value } => Some ( eq_span. to ( value. span ( ) ) ) ,
1760
1784
}
1761
1785
}
1762
1786
@@ -1766,10 +1790,7 @@ impl AttrArgs {
1766
1790
match self {
1767
1791
AttrArgs :: Empty => TokenStream :: default ( ) ,
1768
1792
AttrArgs :: Delimited ( args) => args. tokens . clone ( ) ,
1769
- AttrArgs :: Eq ( _, AttrArgsEq :: Ast ( expr) ) => TokenStream :: from_ast ( expr) ,
1770
- AttrArgs :: Eq ( _, AttrArgsEq :: Hir ( lit) ) => {
1771
- unreachable ! ( "in literal form when getting inner tokens: {:?}" , lit)
1772
- }
1793
+ AttrArgs :: Eq { value, .. } => TokenStream :: from_ast ( value. unwrap_ast ( ) ) ,
1773
1794
}
1774
1795
}
1775
1796
}
@@ -1783,10 +1804,10 @@ where
1783
1804
match self {
1784
1805
AttrArgs :: Empty => { }
1785
1806
AttrArgs :: Delimited ( args) => args. hash_stable ( ctx, hasher) ,
1786
- AttrArgs :: Eq ( _eq_span , AttrArgsEq :: Ast ( expr) ) => {
1807
+ AttrArgs :: Eq { value : AttrArgsEq :: Ast ( expr) , .. } => {
1787
1808
unreachable ! ( "hash_stable {:?}" , expr) ;
1788
1809
}
1789
- AttrArgs :: Eq ( eq_span, AttrArgsEq :: Hir ( lit) ) => {
1810
+ AttrArgs :: Eq { eq_span, value : AttrArgsEq :: Hir ( lit) } => {
1790
1811
eq_span. hash_stable ( ctx, hasher) ;
1791
1812
lit. hash_stable ( ctx, hasher) ;
1792
1813
}
0 commit comments