diff options
| author | bors <bors@rust-lang.org> | 2013-03-19 10:43:24 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-03-19 10:43:24 -0700 |
| commit | 58209910bd70512e4a880bb25ed296dddc48e0b7 (patch) | |
| tree | 874668fcd758e9f3b1badbaa53a9c73a729d2db3 | |
| parent | 3c84bac9462ae853b32f55fcaca2613a7e392d41 (diff) | |
| parent | 0a34a3f0f52cc353bb08efa2005bf92cb7d4921f (diff) | |
auto merge of #5433 : lucab/rust/lucab/cfgspec, r=graydon
All current meta items types (word, name-value, list) are now properly parsed by rustc --cfg command line. Fixes #2399
| -rw-r--r-- | src/librustc/driver/driver.rs | 16 | ||||
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 16 |
2 files changed, 24 insertions, 8 deletions
diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 509ef704b07..c4db61842a5 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -132,15 +132,15 @@ pub fn build_configuration(sess: Session, +argv0: ~str, input: input) -> } // Convert strings provided as --cfg [cfgspec] into a crate_cfg -pub fn parse_cfgspecs(cfgspecs: ~[~str]) -> ast::crate_cfg { - // FIXME (#2399): It would be nice to use the parser to parse all - // varieties of meta_item here. At the moment we just support the - // meta_word variant. - let mut words = ~[]; +fn parse_cfgspecs(cfgspecs: ~[~str], + demitter: diagnostic::Emitter) -> ast::crate_cfg { + let mut meta = ~[]; for cfgspecs.each |s| { - words.push(attr::mk_word_item(@/*bad*/copy *s)); + let sess = parse::new_parse_sess(Some(demitter)); + let m = parse::parse_meta_from_source_str(~"cfgspec", @/*bad*/ copy *s, ~[], sess); + meta.push(m) } - return words; + return meta; } pub enum input { @@ -639,7 +639,7 @@ pub fn build_session_options(+binary: ~str, let addl_lib_search_paths = getopts::opt_strs(matches, ~"L") .map(|s| Path(*s)); - let cfg = parse_cfgspecs(getopts::opt_strs(matches, ~"cfg")); + let cfg = parse_cfgspecs(getopts::opt_strs(matches, ~"cfg"), demitter); let test = opt_present(matches, ~"test"); let android_cross_path = getopts::opt_maybe_str( matches, ~"android-cross-path"); diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 66a3ae7a2ae..a133befb046 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -139,6 +139,22 @@ pub fn parse_item_from_source_str( maybe_aborted(p.parse_item(attrs),p) } +pub fn parse_meta_from_source_str( + name: ~str, + source: @~str, + +cfg: ast::crate_cfg, + sess: @mut ParseSess +) -> @ast::meta_item { + let p = new_parser_from_source_str( + sess, + cfg, + /*bad*/ copy name, + codemap::FssNone, + source + ); + maybe_aborted(p.parse_meta_item(),p) +} + pub fn parse_stmt_from_source_str( name: ~str, source: @~str, |
