From b003f104490599c49d27842c9a25b158e7cccdcb Mon Sep 17 00:00:00 2001 From: John Gallagher Date: Thu, 2 Oct 2014 23:28:15 -0400 Subject: [PATCH] Desugar `while let` into `loop { match { ... } }` --- src/libsyntax/ast.rs | 3 ++- src/libsyntax/ext/build.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 675249b2591..4ed3ee01598 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -581,7 +581,8 @@ pub struct QPath { #[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)] pub enum MatchSource { MatchNormal, - MatchIfLetDesugar + MatchIfLetDesugar, + MatchWhileLetDesugar, } #[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)] diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 87983e1aea3..98ac6fe6a6c 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -147,6 +147,8 @@ pub trait AstBuilder { fn expr_some(&self, sp: Span, expr: P) -> P; fn expr_none(&self, sp: Span) -> P; + fn expr_break(&self, sp: Span) -> P; + fn expr_tuple(&self, sp: Span, exprs: Vec>) -> P; fn expr_fail(&self, span: Span, msg: InternedString) -> P; @@ -688,6 +690,12 @@ impl<'a> AstBuilder for ExtCtxt<'a> { self.expr_path(none) } + + fn expr_break(&self, sp: Span) -> P { + self.expr(sp, ast::ExprBreak(None)) + } + + fn expr_tuple(&self, sp: Span, exprs: Vec>) -> P { self.expr(sp, ast::ExprTup(exprs)) }