Convert the eval::env to an ast::crate_cfg

crate_cfg will replace eval::env as the mechanism for conditional compilation.
This is a transitional step so they can both exist together.

Issue #489
This commit is contained in:
Brian Anderson 2011-06-29 18:36:52 -07:00
parent d53bfad8e7
commit afc8a5c031

View file

@ -33,6 +33,7 @@ type parser =
fn get_restriction() -> restriction ;
fn get_file_type() -> file_type ;
fn get_env() -> eval::env ;
fn get_cfg() -> ast::crate_cfg;
fn get_session() -> session::session ;
fn get_span() -> common::span ;
fn get_lo_pos() -> uint ;
@ -53,6 +54,7 @@ fn new_parser(session::session sess, eval::env env,
str path, uint pos, ast::node_id next_id) -> parser {
obj stdio_parser(session::session sess,
eval::env env,
ast::crate_cfg cfg,
file_type ftype,
mutable token::token tok,
mutable uint lo,
@ -84,6 +86,7 @@ fn new_parser(session::session sess, eval::env env,
fn get_last_lo_pos() -> uint { ret last_lo; }
fn get_file_type() -> file_type { ret ftype; }
fn get_env() -> eval::env { ret env; }
fn get_cfg() -> ast::crate_cfg { ret cfg; }
fn get_prec_table() -> vec[op_spec] { ret precs; }
fn get_str(token::str_num i) -> str {
ret interner::get(*rdr.get_interner(), i);
@ -102,6 +105,18 @@ fn new_parser(session::session sess, eval::env env,
}
fn next_id() -> ast::node_id { ret next_id_var; }
}
auto cfg = {
fn m(&tup(ast::ident, eval::val) item) -> @ast::meta_item {
auto name = item._0;
auto value = eval::val_as_str(item._1);
auto meta_item_ = ast::meta_name_value(name, value);
ret @rec(node=meta_item_,
span=rec(lo=0u,hi=0u));
}
vec::map(m, env)
};
auto ftype = SOURCE_FILE;
if (str::ends_with(path, ".rc")) { ftype = CRATE_FILE; }
auto srdr = io::file_reader(path);
@ -113,8 +128,8 @@ fn new_parser(session::session sess, eval::env env,
lexer::consume_whitespace_and_comments(rdr);
auto npos = rdr.get_chpos();
ret stdio_parser(sess, env, ftype, lexer::next_token(rdr), npos, npos,
npos, UNRESTRICTED, rdr,
ret stdio_parser(sess, env, cfg, ftype, lexer::next_token(rdr),
npos, npos, npos, UNRESTRICTED, rdr,
prec_table(), next_id, bad_expr_word_table(),
ext::syntax_expander_table());
}
@ -2319,7 +2334,7 @@ fn parse_crate_from_source_file(&parser p) -> @ast::crate {
ret @spanned(lo, p.get_lo_pos(), rec(directives=cdirs,
module=m,
attrs=crate_attrs._0,
config=[]));
config=p.get_cfg()));
}
fn parse_str(&parser p) -> ast::ident {
@ -2452,7 +2467,7 @@ fn parse_crate_from_crate_file(&parser p) -> @ast::crate {
ret @spanned(lo, hi, rec(directives=cdirs,
module=m,
attrs=crate_attrs,
config=[]));
config=p.get_cfg()));
}
//
// Local Variables: