diff options
| author | Luca Bruno <lucab@debian.org> | 2013-01-19 16:52:06 +0100 |
|---|---|---|
| committer | Luca Bruno <lucab@debian.org> | 2013-03-19 14:02:59 +0100 |
| commit | 0a34a3f0f52cc353bb08efa2005bf92cb7d4921f (patch) | |
| tree | b99c56738c12f6693b2aa37a3d54d1416c7e1be5 /src | |
| parent | e67448d397ed8f468170d6fba95ceae081ece624 (diff) | |
| download | rust-0a34a3f0f52cc353bb08efa2005bf92cb7d4921f.tar.gz rust-0a34a3f0f52cc353bb08efa2005bf92cb7d4921f.zip | |
Make driver::driver::parse_cfgspecs parse any variety of meta_item
All current meta items types (word, name-value, list) are now properly parsed by rustc --cfg command line. Fixes #2399 Signed-off-by: Luca Bruno <lucab@debian.org>
Diffstat (limited to 'src')
| -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, |
