@@ -33,6 +33,7 @@ type parser =
33
33
fn get_restriction ( ) -> restriction ;
34
34
fn get_file_type ( ) -> file_type ;
35
35
fn get_env ( ) -> eval:: env ;
36
+ fn get_cfg ( ) -> ast:: crate_cfg ;
36
37
fn get_session ( ) -> session:: session ;
37
38
fn get_span ( ) -> common:: span ;
38
39
fn get_lo_pos ( ) -> uint ;
@@ -53,6 +54,7 @@ fn new_parser(session::session sess, eval::env env,
53
54
str path , uint pos, ast:: node_id next_id) -> parser {
54
55
obj stdio_parser ( session:: session sess,
55
56
eval:: env env,
57
+ ast:: crate_cfg cfg,
56
58
file_type ftype,
57
59
mutable token:: token tok,
58
60
mutable uint lo,
@@ -84,6 +86,7 @@ fn new_parser(session::session sess, eval::env env,
84
86
fn get_last_lo_pos ( ) -> uint { ret last_lo; }
85
87
fn get_file_type ( ) -> file_type { ret ftype; }
86
88
fn get_env ( ) -> eval:: env { ret env; }
89
+ fn get_cfg ( ) -> ast:: crate_cfg { ret cfg; }
87
90
fn get_prec_table ( ) -> vec[ op_spec ] { ret precs; }
88
91
fn get_str ( token:: str_num i) -> str {
89
92
ret interner:: get ( * rdr. get_interner ( ) , i) ;
@@ -102,6 +105,18 @@ fn new_parser(session::session sess, eval::env env,
102
105
}
103
106
fn next_id ( ) -> ast:: node_id { ret next_id_var; }
104
107
}
108
+
109
+ auto cfg = {
110
+ fn m ( & tup ( ast:: ident , eval:: val ) item) -> @ast:: meta_item {
111
+ auto name = item. _0 ;
112
+ auto value = eval:: val_as_str ( item. _1 ) ;
113
+ auto meta_item_ = ast:: meta_name_value ( name, value) ;
114
+ ret @rec( node=meta_item_,
115
+ span=rec ( lo=0 u, hi=0 u) ) ;
116
+ }
117
+ vec:: map ( m, env)
118
+ } ;
119
+
105
120
auto ftype = SOURCE_FILE ;
106
121
if ( str:: ends_with ( path, ".rc" ) ) { ftype = CRATE_FILE ; }
107
122
auto srdr = io:: file_reader ( path) ;
@@ -113,8 +128,8 @@ fn new_parser(session::session sess, eval::env env,
113
128
114
129
lexer:: consume_whitespace_and_comments ( rdr) ;
115
130
auto npos = rdr. get_chpos ( ) ;
116
- ret stdio_parser ( sess, env, ftype, lexer:: next_token ( rdr) , npos , npos ,
117
- npos, UNRESTRICTED , rdr,
131
+ ret stdio_parser ( sess, env, cfg , ftype, lexer:: next_token ( rdr) ,
132
+ npos, npos , npos , UNRESTRICTED , rdr,
118
133
prec_table ( ) , next_id, bad_expr_word_table ( ) ,
119
134
ext:: syntax_expander_table ( ) ) ;
120
135
}
@@ -2319,7 +2334,7 @@ fn parse_crate_from_source_file(&parser p) -> @ast::crate {
2319
2334
ret @spanned ( lo, p. get_lo_pos ( ) , rec ( directives=cdirs,
2320
2335
module=m,
2321
2336
attrs=crate_attrs. _0 ,
2322
- config=[ ] ) ) ;
2337
+ config=p . get_cfg ( ) ) ) ;
2323
2338
}
2324
2339
2325
2340
fn parse_str ( & parser p) -> ast:: ident {
@@ -2452,7 +2467,7 @@ fn parse_crate_from_crate_file(&parser p) -> @ast::crate {
2452
2467
ret @spanned ( lo, hi, rec ( directives=cdirs,
2453
2468
module=m,
2454
2469
attrs=crate_attrs,
2455
- config=[ ] ) ) ;
2470
+ config=p . get_cfg ( ) ) ) ;
2456
2471
}
2457
2472
//
2458
2473
// Local Variables:
0 commit comments