]> git.lizzy.rs Git - rust.git/blob - src/librustc_metadata/lib.rs
Auto merge of #67003 - cjgillot:corrida, r=Mark-Simulacrum
[rust.git] / src / librustc_metadata / lib.rs
1 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
2
3 #![feature(bool_to_option)]
4 #![feature(box_patterns)]
5 #![feature(core_intrinsics)]
6 #![feature(crate_visibility_modifier)]
7 #![feature(drain_filter)]
8 #![feature(in_band_lifetimes)]
9 #![feature(libc)]
10 #![feature(nll)]
11 #![feature(proc_macro_internals)]
12 #![feature(proc_macro_quote)]
13 #![feature(rustc_private)]
14 #![feature(slice_patterns)]
15 #![feature(specialization)]
16 #![feature(stmt_expr_attributes)]
17
18 #![recursion_limit="256"]
19
20 extern crate libc;
21 extern crate proc_macro;
22
23 #[macro_use]
24 extern crate rustc;
25 #[macro_use]
26 extern crate rustc_data_structures;
27
28 pub use rmeta::{provide, provide_extern};
29
30 mod dependency_format;
31 mod foreign_modules;
32 mod link_args;
33 mod native_libs;
34 mod rmeta;
35
36 pub mod creader;
37 pub mod dynamic_lib;
38 pub mod locator;
39
40 pub fn validate_crate_name(
41     sess: Option<&rustc::session::Session>,
42     s: &str,
43     sp: Option<syntax_pos::Span>
44 ) {
45     let mut err_count = 0;
46     {
47         let mut say = |s: &str| {
48             match (sp, sess) {
49                 (_, None) => bug!("{}", s),
50                 (Some(sp), Some(sess)) => sess.span_err(sp, s),
51                 (None, Some(sess)) => sess.err(s),
52             }
53             err_count += 1;
54         };
55         if s.is_empty() {
56             say("crate name must not be empty");
57         }
58         for c in s.chars() {
59             if c.is_alphanumeric() { continue }
60             if c == '_'  { continue }
61             say(&format!("invalid character `{}` in crate name: `{}`", c, s));
62         }
63     }
64
65     if err_count > 0 {
66         sess.unwrap().abort_if_errors();
67     }
68 }