diff options
| author | bors <bors@rust-lang.org> | 2013-12-20 15:21:33 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-12-20 15:21:33 -0800 |
| commit | 9d1de0b699a669d01ea5ecd3dea0424ab94db369 (patch) | |
| tree | dfffc0a9751a7b4aae7216cb9801b92a0a541023 /src/libsyntax/parse | |
| parent | d5d5c5064b3f27918432484d27b88204df940209 (diff) | |
| parent | 87add533278d723057192292306505e269e737bc (diff) | |
| download | rust-9d1de0b699a669d01ea5ecd3dea0424ab94db369.tar.gz rust-9d1de0b699a669d01ea5ecd3dea0424ab94db369.zip | |
auto merge of #11077 : alexcrichton/rust/crate-id, r=cmr
Right now the --crate-id and related flags are all process *after* the entire crate is parsed. This is less than desirable when used with makefiles because it means that just to learn the output name of the crate you have to parse the entire crate (unnecessary). This commit changes the behavior to lift the handling of these flags much sooner in the compilation process. This allows us to not have to parse the entire crate and only have to worry about parsing the crate attributes themselves. The related methods have all been updated to take an array of attributes rather than a crate. Additionally, this ceases duplication of the "what output are we producing" logic in order to correctly handle things in the case of --test. Finally, this adds tests for all of this functionality to ensure that it does not regress.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 612151f83e4..73240a9effd 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -79,6 +79,16 @@ pub fn parse_crate_from_file( // why is there no p.abort_if_errors here? } +pub fn parse_crate_attrs_from_file( + input: &Path, + cfg: ast::CrateConfig, + sess: @mut ParseSess +) -> ~[ast::Attribute] { + let parser = new_parser_from_file(sess, cfg, input); + let (inner, _) = parser.parse_inner_attrs_and_next(); + return inner; +} + pub fn parse_crate_from_source_str( name: @str, source: @str, @@ -92,6 +102,20 @@ pub fn parse_crate_from_source_str( maybe_aborted(p.parse_crate_mod(),p) } +pub fn parse_crate_attrs_from_source_str( + name: @str, + source: @str, + cfg: ast::CrateConfig, + sess: @mut ParseSess +) -> ~[ast::Attribute] { + let p = new_parser_from_source_str(sess, + /*bad*/ cfg.clone(), + name, + source); + let (inner, _) = maybe_aborted(p.parse_inner_attrs_and_next(),p); + return inner; +} + pub fn parse_expr_from_source_str( name: @str, source: @str, |
