diff options
| author | Jonas Schievink <jonas@schievink.net> | 2016-02-19 14:43:13 +0100 |
|---|---|---|
| committer | Jonas Schievink <jonas@schievink.net> | 2016-02-19 14:43:13 +0100 |
| commit | 11e0ba43401b0fcf4d61a4e91ad8d7020da74994 (patch) | |
| tree | 01c74259cb1ec68446f1add4af0e926cad61b91d /src | |
| parent | 3a872782d396e9ed3827a515a54d1f0a634c0b77 (diff) | |
| download | rust-11e0ba43401b0fcf4d61a4e91ad8d7020da74994.tar.gz rust-11e0ba43401b0fcf4d61a4e91ad8d7020da74994.zip | |
Do less panicking in general
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_driver/driver.rs | 8 | ||||
| -rw-r--r-- | src/librustc_driver/lib.rs | 14 | ||||
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 4 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 736633c1614..6ef42984905 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -84,7 +84,13 @@ pub fn compile_input(sess: &Session, // possible to keep the peak memory usage low let (outputs, trans) = { let (outputs, expanded_crate, id) = { - let krate = panictry!(phase_1_parse_input(sess, cfg, input)); + let krate = match phase_1_parse_input(sess, cfg, input) { + Ok(krate) => krate, + Err(mut parse_error) => { + parse_error.emit(); + return Err(1); + } + }; controller_entry_point!(after_parse, sess, diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 05317097d0c..6f28d475aa6 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -529,7 +529,19 @@ impl RustcDefaultCalls { return Compilation::Continue; } - let attrs = input.map(|input| panictry!(parse_crate_attrs(sess, input))); + let attrs = match input { + None => None, + Some(input) => { + let result = parse_crate_attrs(sess, input); + match result { + Ok(attrs) => Some(attrs), + Err(mut parse_error) => { + parse_error.emit(); + return Compilation::Stop; + } + } + } + }; for req in &sess.opts.prints { match *req { PrintRequest::TargetList => { diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 9bcf1079a64..ea5d6739e6d 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -120,6 +120,10 @@ pub fn parse_expr_from_source_str<'a>(name: String, p.parse_expr() } +/// Parses an item. +/// +/// Returns `Ok(Some(item))` when successful, `Ok(None)` when no item was found, and`Err` +/// when a syntax error occurred. pub fn parse_item_from_source_str<'a>(name: String, source: String, cfg: ast::CrateConfig, |
