@@ -10,7 +10,7 @@ use syn::{__private::ToTokens, punctuated::Punctuated, *};
1010
1111pub mod properties {
1212 use proc_macro2:: Span ;
13- use syn:: { StaticMutability , Token } ;
13+ use syn:: { PointerMutability , StaticMutability , Token } ;
1414
1515 pub trait ToToken {
1616 type Token ;
@@ -34,6 +34,13 @@ pub mod properties {
3434 }
3535
3636 impl Mutability {
37+ pub fn to_pointer_mutability ( & self , span : Span ) -> PointerMutability {
38+ match self {
39+ Mutability :: Mutable => PointerMutability :: Mut ( Token ! [ mut ] ( span) ) ,
40+ Mutability :: Immutable => PointerMutability :: Const ( Token ! [ const ] ( span) ) ,
41+ }
42+ }
43+
3744 pub fn to_static_mutability ( & self , span : Span ) -> StaticMutability {
3845 match self {
3946 Mutability :: Mutable => StaticMutability :: Mut ( Token ! [ mut ] ( span) ) ,
@@ -826,7 +833,7 @@ impl Builder {
826833 self . path_expr ( vec ! [ name] )
827834 }
828835
829- pub fn addr_of_expr ( self , e : Box < Expr > ) -> Box < Expr > {
836+ pub fn borrow_expr ( self , e : Box < Expr > ) -> Box < Expr > {
830837 Box :: new ( parenthesize_if_necessary ( Expr :: Reference ( ExprReference {
831838 attrs : self . attrs ,
832839 and_token : Token ! [ & ] ( self . span ) ,
@@ -835,6 +842,16 @@ impl Builder {
835842 } ) ) )
836843 }
837844
845+ pub fn raw_borrow_expr ( self , e : Box < Expr > ) -> Box < Expr > {
846+ Box :: new ( parenthesize_if_necessary ( Expr :: RawAddr ( ExprRawAddr {
847+ attrs : self . attrs ,
848+ and_token : Token ! [ & ] ( self . span ) ,
849+ raw : Token ! [ raw] ( self . span ) ,
850+ mutability : self . mutbl . to_pointer_mutability ( self . span ) ,
851+ expr : e,
852+ } ) ) )
853+ }
854+
838855 pub fn mac_expr ( self , mac : Macro ) -> Box < Expr > {
839856 Box :: new ( Expr :: Macro ( ExprMacro {
840857 attrs : self . attrs ,
0 commit comments