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:
parent
d53bfad8e7
commit
afc8a5c031
1 changed files with 19 additions and 4 deletions
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue