type Node = Node<'a>;
type Edge = Edge<'a>;
fn nodes(&'a self) -> dot::Nodes<'a, Node<'a>> {
- let mut v = Vec::new();
- self.graph.each_node(|i, nd| { v.push((i, nd)); true });
+ let v: Vec<_> = self.graph.enumerated_nodes().collect();
v.into()
}
fn edges(&'a self) -> dot::Edges<'a, Edge<'a>> {
// otherwise, abort
break;
}
- interpret_alloc_index.reserve(new_n);
+ interpret_alloc_index.reserve(new_n - n);
for idx in n..new_n {
let id = encoder.interpret_allocs_inverse[idx];
let pos = encoder.position() as u32;
let sp = trait_.span;
let variants = &enum_def.variants;
- let self_arg_names = self_args.iter()
- .enumerate()
- .map(|(arg_count, _self_arg)| {
- if arg_count == 0 {
- "__self".to_string()
- } else {
+ let self_arg_names = iter::once("__self".to_string()).chain(
+ self_args.iter()
+ .enumerate()
+ .skip(1)
+ .map(|(arg_count, _self_arg)|
format!("__arg_{}", arg_count)
- }
- })
- .collect::<Vec<String>>();
+ )
+ ).collect::<Vec<String>>();
let self_arg_idents = self_arg_names.iter()
.map(|name| cx.ident_of(&name[..]))
// The `vi_idents` will be bound, solely in the catch-all, to
// a series of let statements mapping each self_arg to an int
// value corresponding to its discriminant.
- let vi_idents: Vec<ast::Ident> = self_arg_names.iter()
+ let vi_idents = self_arg_names.iter()
.map(|name| {
let vi_suffix = format!("{}_vi", &name[..]);
cx.ident_of(&vi_suffix[..]).gensym()