rustc: Add cfg(gc) and cfg(nogc).
Needed in libcore to determine whether core::gc is being compiled with GC on or not, which then affects various safety checks to avoid collecting memory the GC is itself using.
This commit is contained in:
@@ -62,6 +62,14 @@ fn default_configuration(sess: session, argv0: ~str, input: input) ->
|
|||||||
mk(~"build_input", source_name(input))];
|
mk(~"build_input", source_name(input))];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn append_configuration(cfg: ast::crate_cfg, name: ~str) -> ast::crate_cfg {
|
||||||
|
if attr::contains_name(cfg, name) {
|
||||||
|
return cfg;
|
||||||
|
} else {
|
||||||
|
return vec::append_one(cfg, attr::mk_word_item(name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn build_configuration(sess: session, argv0: ~str, input: input) ->
|
fn build_configuration(sess: session, argv0: ~str, input: input) ->
|
||||||
ast::crate_cfg {
|
ast::crate_cfg {
|
||||||
// Combine the configuration requested by the session (command line) with
|
// Combine the configuration requested by the session (command line) with
|
||||||
@@ -69,15 +77,14 @@ fn build_configuration(sess: session, argv0: ~str, input: input) ->
|
|||||||
let default_cfg = default_configuration(sess, argv0, input);
|
let default_cfg = default_configuration(sess, argv0, input);
|
||||||
let user_cfg = sess.opts.cfg;
|
let user_cfg = sess.opts.cfg;
|
||||||
// If the user wants a test runner, then add the test cfg
|
// If the user wants a test runner, then add the test cfg
|
||||||
let gen_cfg =
|
let user_cfg = append_configuration(
|
||||||
{
|
user_cfg,
|
||||||
if sess.opts.test && !attr::contains_name(user_cfg, ~"test") {
|
if sess.opts.test { ~"test" } else { ~"notest" });
|
||||||
~[attr::mk_word_item(~"test")]
|
// If the user requested GC, then add the GC cfg
|
||||||
} else {
|
let user_cfg = append_configuration(
|
||||||
~[attr::mk_word_item(~"notest")]
|
user_cfg,
|
||||||
}
|
if sess.opts.gc { ~"gc" } else { ~"nogc" });
|
||||||
};
|
return vec::append(user_cfg, default_cfg);
|
||||||
return vec::append(vec::append(user_cfg, gen_cfg), default_cfg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert strings provided as --cfg [cfgspec] into a crate_cfg
|
// Convert strings provided as --cfg [cfgspec] into a crate_cfg
|
||||||
|
|||||||
Reference in New Issue
Block a user