rustpkg: Use workcache

rustpkg now uses the workcache library to avoid recompilation.
Hooray!
This commit is contained in:
Tim Chevalier
2013-09-06 20:29:16 -07:00
parent bb30f047f6
commit 02a0fb94ee
15 changed files with 680 additions and 509 deletions

View File

@@ -14,7 +14,7 @@ use ast_util;
use codemap::{Span, dummy_sp};
use opt_vec;
use parse::token;
use visit::{SimpleVisitor, SimpleVisitorVisitor, Visitor};
use visit::{SimpleVisitor, Visitor};
use visit;
use std::hashmap::HashMap;
@@ -684,94 +684,25 @@ pub fn walk_pat(pat: @Pat, it: &fn(@Pat) -> bool) -> bool {
}
pub trait EachViewItem {
fn each_view_item(&self, f: @fn(&ast::view_item) -> bool) -> bool;
fn each_view_item(&self, f: &fn(&ast::view_item) -> bool) -> bool;
}
struct EachViewItemData {
callback: @fn(&ast::view_item) -> bool,
struct EachViewItemData<'self> {
callback: &'self fn(&ast::view_item) -> bool,
}
impl SimpleVisitor for EachViewItemData {
fn visit_mod(&mut self, _: &_mod, _: Span, _: NodeId) {
// XXX: Default method.
}
fn visit_view_item(&mut self, view_item: &view_item) {
impl<'self> Visitor<()> for EachViewItemData<'self> {
fn visit_view_item(&mut self, view_item: &ast::view_item, _: ()) {
let _ = (self.callback)(view_item);
}
fn visit_foreign_item(&mut self, _: @foreign_item) {
// XXX: Default method.
}
fn visit_item(&mut self, _: @item) {
// XXX: Default method.
}
fn visit_local(&mut self, _: @Local) {
// XXX: Default method.
}
fn visit_block(&mut self, _: &Block) {
// XXX: Default method.
}
fn visit_stmt(&mut self, _: @Stmt) {
// XXX: Default method.
}
fn visit_arm(&mut self, _: &Arm) {
// XXX: Default method.
}
fn visit_pat(&mut self, _: @Pat) {
// XXX: Default method.
}
fn visit_decl(&mut self, _: @Decl) {
// XXX: Default method.
}
fn visit_expr(&mut self, _: @Expr) {
// XXX: Default method.
}
fn visit_expr_post(&mut self, _: @Expr) {
// XXX: Default method.
}
fn visit_ty(&mut self, _: &Ty) {
// XXX: Default method.
}
fn visit_generics(&mut self, _: &Generics) {
// XXX: Default method.
}
fn visit_fn(&mut self,
_: &visit::fn_kind,
_: &fn_decl,
_: &Block,
_: Span,
_: NodeId) {
// XXX: Default method.
}
fn visit_ty_method(&mut self, _: &TypeMethod) {
// XXX: Default method.
}
fn visit_trait_method(&mut self, _: &trait_method) {
// XXX: Default method.
}
fn visit_struct_def(&mut self,
_: @struct_def,
_: Ident,
_: &Generics,
_: NodeId) {
// XXX: Default method.
}
fn visit_struct_field(&mut self, _: @struct_field) {
// XXX: Default method.
}
fn visit_struct_method(&mut self, _: @method) {
// XXX: Default method.
}
}
impl EachViewItem for ast::Crate {
fn each_view_item(&self, f: @fn(&ast::view_item) -> bool) -> bool {
let data = @mut EachViewItemData {
fn each_view_item(&self, f: &fn(&ast::view_item) -> bool) -> bool {
let mut visit = EachViewItemData {
callback: f,
};
let visitor = @mut SimpleVisitorVisitor {
simple_visitor: data as @mut SimpleVisitor,
};
visit::walk_crate(visitor, self, ());
visit::walk_crate(&mut visit, self, ());
true
}
}