2012-01-16 16:55:26 -08:00
|
|
|
#[doc = "Provides all access to AST-related, non-sendable info"];
|
|
|
|
|
|
|
|
import rustc::syntax::ast;
|
|
|
|
import rustc::middle::ast_map;
|
|
|
|
|
|
|
|
export ctxt;
|
|
|
|
export ctxt_handler;
|
2012-01-17 16:12:31 -08:00
|
|
|
export srv;
|
|
|
|
export mk_srv_from_str;
|
|
|
|
export mk_srv_from_file;
|
|
|
|
export exec;
|
2012-01-16 16:55:26 -08:00
|
|
|
|
|
|
|
type ctxt = {
|
|
|
|
ast: @ast::crate,
|
|
|
|
map: ast_map::map
|
|
|
|
};
|
|
|
|
|
|
|
|
type ctxt_handler<T> = fn~(ctxt: ctxt) -> T;
|
|
|
|
|
2012-01-17 16:12:31 -08:00
|
|
|
type srv = {
|
|
|
|
ctxt: ctxt
|
|
|
|
};
|
2012-01-16 16:55:26 -08:00
|
|
|
|
2012-01-17 16:12:31 -08:00
|
|
|
fn mk_srv_from_str(source: str) -> srv {
|
|
|
|
{
|
|
|
|
ctxt: build_ctxt(parse::from_str(source))
|
2012-01-16 16:55:26 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-01-17 16:12:31 -08:00
|
|
|
fn mk_srv_from_file(file: str) -> srv {
|
|
|
|
{
|
|
|
|
ctxt: build_ctxt(parse::from_file(file))
|
|
|
|
}
|
2012-01-16 16:55:26 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
fn build_ctxt(ast: @ast::crate) -> ctxt {
|
|
|
|
{
|
|
|
|
ast: ast,
|
|
|
|
map: ast_map::map_crate(*ast)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-01-17 16:12:31 -08:00
|
|
|
fn exec<T>(
|
|
|
|
srv: srv,
|
|
|
|
f: fn~(ctxt: ctxt) -> T
|
|
|
|
) -> T {
|
|
|
|
f(srv.ctxt)
|
|
|
|
}
|
|
|
|
|
2012-01-16 16:55:26 -08:00
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
|
|
|
|
#[test]
|
2012-01-17 16:12:31 -08:00
|
|
|
fn srv_should_build_ast_map() {
|
2012-01-16 16:55:26 -08:00
|
|
|
let source = "fn a() { }";
|
2012-01-17 16:12:31 -08:00
|
|
|
let srv = mk_srv_from_str(source);
|
|
|
|
exec(srv) {|ctxt|
|
2012-01-16 16:55:26 -08:00
|
|
|
assert ctxt.map.size() != 0u
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2012-01-17 16:12:31 -08:00
|
|
|
fn srv_should_return_request_result() {
|
2012-01-16 16:55:26 -08:00
|
|
|
let source = "fn a() { }";
|
2012-01-17 16:12:31 -08:00
|
|
|
let srv = mk_srv_from_str(source);
|
|
|
|
let result = exec(srv) {|_ctxt| 1000};
|
2012-01-16 16:55:26 -08:00
|
|
|
assert result == 1000;
|
|
|
|
}
|
|
|
|
}
|