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