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.
This commit is contained in:
parent
fae29e497c
commit
22eb3193a6
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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(),
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user