Skip to content

Commit

Permalink
Helper method for pprust::State for printing instances of `ast_map:…
Browse files Browse the repository at this point in the history
…:Node`.
  • Loading branch information
pnkfelix committed Aug 9, 2014
1 parent a9b1a3b commit 8a80e0f
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/libsyntax/ast_map/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ use util::small_vector::SmallVector;
use std::cell::RefCell;
use std::fmt;
use std::gc::{Gc, GC};
use std::io::IoResult;
use std::iter;
use std::slice;

Expand Down Expand Up @@ -819,6 +820,34 @@ pub fn map_decoded_item<F: FoldOps>(map: &Map,
ii
}

pub trait NodePrinter {
fn print_node(&mut self, node: &Node) -> IoResult<()>;
}

impl<'a> NodePrinter for pprust::State<'a> {
fn print_node(&mut self, node: &Node) -> IoResult<()> {
match *node {
NodeItem(a) => self.print_item(&*a),
NodeForeignItem(a) => self.print_foreign_item(&*a),
NodeTraitMethod(a) => self.print_trait_method(&*a),
NodeMethod(a) => self.print_method(&*a),
NodeVariant(a) => self.print_variant(&*a),
NodeExpr(a) => self.print_expr(&*a),
NodeStmt(a) => self.print_stmt(&*a),
NodePat(a) => self.print_pat(&*a),
NodeBlock(a) => self.print_block(&*a),
NodeLifetime(a) => self.print_lifetime(&*a),

// these cases do not carry enough information in the
// ast_map to reconstruct their full structure for pretty
// printing.
NodeLocal(_) => fail!("cannot print isolated Local"),
NodeArg(_) => fail!("cannot print isolated Arg"),
NodeStructCtor(_) => fail!("cannot print isolated StructCtor"),
}
}
}

fn node_id_to_string(map: &Map, id: NodeId) -> String {
match map.find(id) {
Some(NodeItem(item)) => {
Expand Down

0 comments on commit 8a80e0f

Please sign in to comment.