diff options
| author | Christopher Chambers <chris.chambers@peanutcode.com> | 2015-04-10 23:06:34 -0500 |
|---|---|---|
| committer | Christopher Chambers <chris.chambers@peanutcode.com> | 2015-04-10 23:42:40 -0500 |
| commit | 22eb3193a62fa01e97bf53d5f5aa74ca8ea57a67 (patch) | |
| tree | 04d19566becd5f46a167f8117ad881bbc5d58748 /src | |
| parent | fae29e497c08fcdde8a429a7e2b656e7a8b6cc17 (diff) | |
| download | rust-22eb3193a62fa01e97bf53d5f5aa74ca8ea57a67.tar.gz rust-22eb3193a62fa01e97bf53d5f5aa74ca8ea57a67.zip | |
Simplifications to statement macro handling.
SmallVector::pop no longer worries about converting a Many repr downward to One or Zero. expand_stmt makes use of `if let` for style purposes.
Diffstat (limited to 'src')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 25 | ||||
| -rw-r--r-- | src/libsyntax/util/small_vector.rs | 24 |
2 files changed, 12 insertions, 37 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 4a6c45b5be5..8e6b5f85440 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -772,20 +772,17 @@ fn expand_stmt(stmt: P<Stmt>, fld: &mut MacroExpander) -> SmallVector<P<Stmt>> { // If this is a macro invocation with a semicolon, then apply that // semicolon to the final statement produced by expansion. if style == MacStmtWithSemicolon { - match fully_expanded.pop() { - Some(stmt) => { - let new_stmt = stmt.map(|Spanned {node, span}| { - Spanned { - node: match node { - StmtExpr(e, stmt_id) => StmtSemi(e, stmt_id), - _ => node /* might already have a semi */ - }, - span: span - } - }); - fully_expanded.push(new_stmt); - } - None => (), + if let Some(stmt) = fully_expanded.pop() { + let new_stmt = stmt.map(|Spanned {node, span}| { + Spanned { + node: match node { + StmtExpr(e, stmt_id) => StmtSemi(e, stmt_id), + _ => node /* might already have a semi */ + }, + span: span + } + }); + fully_expanded.push(new_stmt); } } diff --git a/src/libsyntax/util/small_vector.rs b/src/libsyntax/util/small_vector.rs index c4b096d656f..6b864d52947 100644 --- a/src/libsyntax/util/small_vector.rs +++ b/src/libsyntax/util/small_vector.rs @@ -79,29 +79,7 @@ impl<T> SmallVector<T> { _ => unreachable!() } } - Many(..) => { - let mut many = mem::replace(&mut self.repr, Zero); - let item = - match many { - Many(ref mut vs) if vs.len() == 1 => { - // self.repr is already Zero - vs.pop() - }, - Many(ref mut vs) if vs.len() == 2 => { - let item = vs.pop(); - mem::replace(&mut self.repr, One(vs.pop().unwrap())); - item - }, - Many(ref mut vs) if vs.len() > 2 => { - let item = vs.pop(); - let rest = mem::replace(vs, vec!()); - mem::replace(&mut self.repr, Many(rest)); - item - }, - _ => unreachable!() - }; - item - } + Many(ref mut vs) => vs.pop(), } } |
