From 3b7c25ce5b0b2bada6a45036a6455ed916b0b8e6 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Sun, 27 Jul 2014 15:11:02 -0700 Subject: [PATCH] syntax: add some more extension helper methods --- src/libsyntax/ext/build.rs | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 7d683382589..6c9e113f41a 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -170,6 +170,13 @@ fn pat_enum(&self, span: Span, path: ast::Path, subpats: Vec>) -> Gc; fn pat_struct(&self, span: Span, path: ast::Path, field_pats: Vec ) -> Gc; + fn pat_tuple(&self, span: Span, pats: Vec>) -> Gc; + + fn pat_some(&self, span: Span, pat: Gc) -> Gc; + fn pat_none(&self, span: Span) -> Gc; + + fn pat_ok(&self, span: Span, pat: Gc) -> Gc; + fn pat_err(&self, span: Span, pat: Gc) -> Gc; fn arm(&self, span: Span, pats: Vec> , expr: Gc) -> ast::Arm; fn arm_unreachable(&self, span: Span) -> ast::Arm; @@ -178,6 +185,7 @@ fn pat_struct(&self, span: Span, fn expr_if(&self, span: Span, cond: Gc, then: Gc, els: Option>) -> Gc; + fn expr_loop(&self, span: Span, block: P) -> Gc; fn lambda_fn_decl(&self, span: Span, fn_decl: P, blk: P) -> Gc; @@ -777,6 +785,46 @@ fn pat_struct(&self, span: Span, let pat = ast::PatStruct(path, field_pats, false); self.pat(span, pat) } + fn pat_tuple(&self, span: Span, pats: Vec>) -> Gc { + let pat = ast::PatTup(pats); + self.pat(span, pat) + } + + fn pat_some(&self, span: Span, pat: Gc) -> Gc { + let some = vec!( + self.ident_of("std"), + self.ident_of("option"), + self.ident_of("Some")); + let path = self.path_global(span, some); + self.pat_enum(span, path, vec!(pat)) + } + + fn pat_none(&self, span: Span) -> Gc { + let some = vec!( + self.ident_of("std"), + self.ident_of("option"), + self.ident_of("None")); + let path = self.path_global(span, some); + self.pat_enum(span, path, vec!()) + } + + fn pat_ok(&self, span: Span, pat: Gc) -> Gc { + let some = vec!( + self.ident_of("std"), + self.ident_of("result"), + self.ident_of("Ok")); + let path = self.path_global(span, some); + self.pat_enum(span, path, vec!(pat)) + } + + fn pat_err(&self, span: Span, pat: Gc) -> Gc { + let some = vec!( + self.ident_of("std"), + self.ident_of("result"), + self.ident_of("Err")); + let path = self.path_global(span, some); + self.pat_enum(span, path, vec!(pat)) + } fn arm(&self, _span: Span, pats: Vec> , expr: Gc) -> ast::Arm { ast::Arm { @@ -803,6 +851,10 @@ fn expr_if(&self, span: Span, self.expr(span, ast::ExprIf(cond, self.block_expr(then), els)) } + fn expr_loop(&self, span: Span, block: P) -> Gc { + self.expr(span, ast::ExprLoop(block, None)) + } + fn lambda_fn_decl(&self, span: Span, fn_decl: P, blk: P) -> Gc { self.expr(span, ast::ExprFnBlock(fn_decl, blk)) -- 2.44.0