diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index a383e79619a6..9a4e08f8e278 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -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: