]> git.lizzy.rs Git - rust.git/blob - src/librustc_metadata/lib.rs
rustc_metadata: Move some code around
[rust.git] / src / librustc_metadata / lib.rs
1 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
2
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(slice_patterns)]
14 #![feature(specialization)]
15 #![feature(stmt_expr_attributes)]
16
17 #![recursion_limit="256"]
18
19 extern crate libc;
20 extern crate proc_macro;
21
22 #[macro_use]
23 extern crate rustc;
24 #[macro_use]
25 extern crate rustc_data_structures;
26
27 pub mod error_codes;
28
29 mod encoder;
30 mod decoder;
31 mod dependency_format;
32 mod cstore_impl;
33 mod foreign_modules;
34 mod link_args;
35 mod native_libs;
36 mod schema;
37 mod table;
38
39 pub mod creader;
40 pub mod cstore;
41 pub mod dynamic_lib;
42 pub mod locator;
43
44 pub fn validate_crate_name(
45     sess: Option<&rustc::session::Session>,
46     s: &str,
47     sp: Option<syntax_pos::Span>
48 ) {
49     let mut err_count = 0;
50     {
51         let mut say = |s: &str| {
52             match (sp, sess) {
53                 (_, None) => bug!("{}", s),
54                 (Some(sp), Some(sess)) => sess.span_err(sp, s),
55                 (None, Some(sess)) => sess.err(s),
56             }
57             err_count += 1;
58         };
59         if s.is_empty() {
60             say("crate name must not be empty");
61         }
62         for c in s.chars() {
63             if c.is_alphanumeric() { continue }
64             if c == '_'  { continue }
65             say(&format!("invalid character `{}` in crate name: `{}`", c, s));
66         }
67     }
68
69     if err_count > 0 {
70         sess.unwrap().abort_if_errors();
71     }
72 }