diff options
Diffstat (limited to 'src/librustc')
| -rw-r--r-- | src/librustc/lib.rs | 1 | ||||
| -rw-r--r-- | src/librustc/middle/recursion_limit.rs | 39 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index a964609e4e6..2af6a487629 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -88,6 +88,7 @@ pub mod middle { pub mod privacy; pub mod reachable; pub mod region; + pub mod recursion_limit; pub mod resolve; pub mod resolve_lifetime; pub mod stability; diff --git a/src/librustc/middle/recursion_limit.rs b/src/librustc/middle/recursion_limit.rs new file mode 100644 index 00000000000..a6a6703353c --- /dev/null +++ b/src/librustc/middle/recursion_limit.rs @@ -0,0 +1,39 @@ +// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Recursion limit. +// +// There are various parts of the compiler that must impose arbitrary limits +// on how deeply they recurse to prevent stack overflow. Users can override +// this via an attribute on the crate like `#![recursion_limit(22)]`. This pass +// just peeks and looks for that attribute. + +use session::Session; +use syntax::ast; +use syntax::attr::AttrMetaMethods; +use std::str::FromStr; + +pub fn update_recursion_limit(sess: &Session, krate: &ast::Crate) { + for attr in krate.attrs.iter() { + if !attr.check_name("recursion_limit") { + continue; + } + + if let Some(s) = attr.value_str() { + if let Some(n) = FromStr::from_str(s.get()) { + sess.recursion_limit.set(n); + return; + } + } + + sess.span_err(attr.span, "malformed recursion limit attribute, \ + expected #![recursion_limit(\"N\")]"); + } +} |
