Port crate name to the new attribute system
This commit is contained in:
@@ -6,7 +6,7 @@ use std::sync::{Arc, LazyLock, OnceLock};
|
||||
use std::{env, fs, iter};
|
||||
|
||||
use rustc_ast as ast;
|
||||
use rustc_attr_parsing::validate_attr;
|
||||
use rustc_attr_parsing::{AttributeParser, ShouldEmit, validate_attr};
|
||||
use rustc_codegen_ssa::traits::CodegenBackend;
|
||||
use rustc_data_structures::jobserver::Proxy;
|
||||
use rustc_data_structures::steal::Steal;
|
||||
@@ -16,6 +16,7 @@ use rustc_errors::timings::TimingSection;
|
||||
use rustc_expand::base::{ExtCtxt, LintStoreExpand};
|
||||
use rustc_feature::Features;
|
||||
use rustc_fs_util::try_canonicalize;
|
||||
use rustc_hir::attrs::AttributeKind;
|
||||
use rustc_hir::def_id::{LOCAL_CRATE, StableCrateId, StableCrateIdMap};
|
||||
use rustc_hir::definitions::Definitions;
|
||||
use rustc_incremental::setup_dep_graph;
|
||||
@@ -1244,8 +1245,7 @@ pub fn get_crate_name(sess: &Session, krate_attrs: &[ast::Attribute]) -> Symbol
|
||||
// in all code paths that require the crate name very early on, namely before
|
||||
// macro expansion.
|
||||
|
||||
let attr_crate_name =
|
||||
validate_and_find_value_str_builtin_attr(sym::crate_name, sess, krate_attrs);
|
||||
let attr_crate_name = parse_crate_name(sess, krate_attrs, ShouldEmit::EarlyFatal);
|
||||
|
||||
let validate = |name, span| {
|
||||
rustc_session::output::validate_crate_name(sess, name, span);
|
||||
@@ -1283,6 +1283,28 @@ pub fn get_crate_name(sess: &Session, krate_attrs: &[ast::Attribute]) -> Symbol
|
||||
sym::rust_out
|
||||
}
|
||||
|
||||
pub(crate) fn parse_crate_name(
|
||||
sess: &Session,
|
||||
attrs: &[ast::Attribute],
|
||||
emit_errors: ShouldEmit,
|
||||
) -> Option<(Symbol, Span)> {
|
||||
let rustc_hir::Attribute::Parsed(AttributeKind::CrateName { name, name_span, .. }) =
|
||||
AttributeParser::parse_limited_should_emit(
|
||||
sess,
|
||||
&attrs,
|
||||
sym::crate_name,
|
||||
DUMMY_SP,
|
||||
rustc_ast::node_id::CRATE_NODE_ID,
|
||||
None,
|
||||
emit_errors,
|
||||
)?
|
||||
else {
|
||||
unreachable!("crate_name is the only attr we could've parsed here");
|
||||
};
|
||||
|
||||
Some((name, name_span))
|
||||
}
|
||||
|
||||
fn get_recursion_limit(krate_attrs: &[ast::Attribute], sess: &Session) -> Limit {
|
||||
// We don't permit macro calls inside of the attribute (e.g., #![recursion_limit = `expand!()`])
|
||||
// because that would require expanding this while in the middle of expansion, which needs to
|
||||
|
||||
@@ -5,7 +5,7 @@ use std::sync::{Arc, OnceLock};
|
||||
use std::{env, thread};
|
||||
|
||||
use rustc_ast as ast;
|
||||
use rustc_attr_parsing::validate_attr;
|
||||
use rustc_attr_parsing::{ShouldEmit, validate_attr};
|
||||
use rustc_codegen_ssa::traits::CodegenBackend;
|
||||
use rustc_data_structures::jobserver::Proxy;
|
||||
use rustc_data_structures::sync;
|
||||
@@ -24,6 +24,7 @@ use rustc_target::spec::Target;
|
||||
use tracing::info;
|
||||
|
||||
use crate::errors;
|
||||
use crate::passes::parse_crate_name;
|
||||
|
||||
/// Function pointer type that constructs a new CodegenBackend.
|
||||
type MakeBackendFn = fn() -> Box<dyn CodegenBackend>;
|
||||
@@ -520,11 +521,10 @@ pub fn build_output_filenames(attrs: &[ast::Attribute], sess: &Session) -> Outpu
|
||||
sess.dcx().emit_fatal(errors::MultipleOutputTypesToStdout);
|
||||
}
|
||||
|
||||
let crate_name = sess
|
||||
.opts
|
||||
.crate_name
|
||||
.clone()
|
||||
.or_else(|| rustc_attr_parsing::find_crate_name(attrs).map(|n| n.to_string()));
|
||||
let crate_name =
|
||||
sess.opts.crate_name.clone().or_else(|| {
|
||||
parse_crate_name(sess, attrs, ShouldEmit::Nothing).map(|i| i.0.to_string())
|
||||
});
|
||||
|
||||
match sess.io.output_file {
|
||||
None => {
|
||||
|
||||
Reference in New Issue
Block a user