@@ -170,6 +170,13 @@ pub trait AstBuilder {
170
170
subpats : Vec < Gc < ast:: Pat > > ) -> Gc < ast:: Pat > ;
171
171
fn pat_struct ( & self , span : Span ,
172
172
path : ast:: Path , field_pats : Vec < ast:: FieldPat > ) -> Gc < ast:: Pat > ;
173
+ fn pat_tuple ( & self , span : Span , pats : Vec < Gc < ast:: Pat > > ) -> Gc < ast:: Pat > ;
174
+
175
+ fn pat_some ( & self , span : Span , pat : Gc < ast:: Pat > ) -> Gc < ast:: Pat > ;
176
+ fn pat_none ( & self , span : Span ) -> Gc < ast:: Pat > ;
177
+
178
+ fn pat_ok ( & self , span : Span , pat : Gc < ast:: Pat > ) -> Gc < ast:: Pat > ;
179
+ fn pat_err ( & self , span : Span , pat : Gc < ast:: Pat > ) -> Gc < ast:: Pat > ;
173
180
174
181
fn arm ( & self , span : Span , pats : Vec < Gc < ast:: Pat > > , expr : Gc < ast:: Expr > ) -> ast:: Arm ;
175
182
fn arm_unreachable ( & self , span : Span ) -> ast:: Arm ;
@@ -178,6 +185,7 @@ pub trait AstBuilder {
178
185
fn expr_if ( & self , span : Span ,
179
186
cond : Gc < ast:: Expr > , then : Gc < ast:: Expr > ,
180
187
els : Option < Gc < ast:: Expr > > ) -> Gc < ast:: Expr > ;
188
+ fn expr_loop ( & self , span : Span , block : P < ast:: Block > ) -> Gc < ast:: Expr > ;
181
189
182
190
fn lambda_fn_decl ( & self , span : Span ,
183
191
fn_decl : P < ast:: FnDecl > , blk : P < ast:: Block > ) -> Gc < ast:: Expr > ;
@@ -777,6 +785,46 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
777
785
let pat = ast:: PatStruct ( path, field_pats, false ) ;
778
786
self . pat ( span, pat)
779
787
}
788
+ fn pat_tuple ( & self , span : Span , pats : Vec < Gc < ast:: Pat > > ) -> Gc < ast:: Pat > {
789
+ let pat = ast:: PatTup ( pats) ;
790
+ self . pat ( span, pat)
791
+ }
792
+
793
+ fn pat_some ( & self , span : Span , pat : Gc < ast:: Pat > ) -> Gc < ast:: Pat > {
794
+ let some = vec ! (
795
+ self . ident_of( "std" ) ,
796
+ self . ident_of( "option" ) ,
797
+ self . ident_of( "Some" ) ) ;
798
+ let path = self . path_global ( span, some) ;
799
+ self . pat_enum ( span, path, vec ! ( pat) )
800
+ }
801
+
802
+ fn pat_none ( & self , span : Span ) -> Gc < ast:: Pat > {
803
+ let some = vec ! (
804
+ self . ident_of( "std" ) ,
805
+ self . ident_of( "option" ) ,
806
+ self . ident_of( "None" ) ) ;
807
+ let path = self . path_global ( span, some) ;
808
+ self . pat_enum ( span, path, vec ! ( ) )
809
+ }
810
+
811
+ fn pat_ok ( & self , span : Span , pat : Gc < ast:: Pat > ) -> Gc < ast:: Pat > {
812
+ let some = vec ! (
813
+ self . ident_of( "std" ) ,
814
+ self . ident_of( "result" ) ,
815
+ self . ident_of( "Ok" ) ) ;
816
+ let path = self . path_global ( span, some) ;
817
+ self . pat_enum ( span, path, vec ! ( pat) )
818
+ }
819
+
820
+ fn pat_err ( & self , span : Span , pat : Gc < ast:: Pat > ) -> Gc < ast:: Pat > {
821
+ let some = vec ! (
822
+ self . ident_of( "std" ) ,
823
+ self . ident_of( "result" ) ,
824
+ self . ident_of( "Err" ) ) ;
825
+ let path = self . path_global ( span, some) ;
826
+ self . pat_enum ( span, path, vec ! ( pat) )
827
+ }
780
828
781
829
fn arm ( & self , _span : Span , pats : Vec < Gc < ast:: Pat > > , expr : Gc < ast:: Expr > ) -> ast:: Arm {
782
830
ast:: Arm {
@@ -803,6 +851,10 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
803
851
self . expr ( span, ast:: ExprIf ( cond, self . block_expr ( then) , els) )
804
852
}
805
853
854
+ fn expr_loop ( & self , span : Span , block : P < ast:: Block > ) -> Gc < ast:: Expr > {
855
+ self . expr ( span, ast:: ExprLoop ( block, None ) )
856
+ }
857
+
806
858
fn lambda_fn_decl ( & self , span : Span ,
807
859
fn_decl : P < ast:: FnDecl > , blk : P < ast:: Block > ) -> Gc < ast:: Expr > {
808
860
self . expr ( span, ast:: ExprFnBlock ( fn_decl, blk) )
0 commit comments