Auto merge of #22896 - Ms2ger:InlineAttr, r=huonw
This commit is contained in:
commit
2b27dfd30a
@ -433,13 +433,13 @@ pub fn set_inline_hint(f: ValueRef) {
|
||||
}
|
||||
|
||||
pub fn set_llvm_fn_attrs(ccx: &CrateContext, attrs: &[ast::Attribute], llfn: ValueRef) {
|
||||
use syntax::attr::*;
|
||||
use syntax::attr::{find_inline_attr, InlineAttr};
|
||||
// Set the inline hint if there is one
|
||||
match find_inline_attr(Some(ccx.sess().diagnostic()), attrs) {
|
||||
InlineHint => set_inline_hint(llfn),
|
||||
InlineAlways => set_always_inline(llfn),
|
||||
InlineNever => set_no_inline(llfn),
|
||||
InlineNone => { /* fallthrough */ }
|
||||
InlineAttr::Hint => set_inline_hint(llfn),
|
||||
InlineAttr::Always => set_always_inline(llfn),
|
||||
InlineAttr::Never => set_no_inline(llfn),
|
||||
InlineAttr::None => { /* fallthrough */ }
|
||||
}
|
||||
|
||||
for attr in attrs {
|
||||
|
@ -10,7 +10,6 @@
|
||||
|
||||
// Functions dealing with attributes and meta items
|
||||
|
||||
pub use self::InlineAttr::*;
|
||||
pub use self::StabilityLevel::*;
|
||||
pub use self::ReprAttr::*;
|
||||
pub use self::IntType::*;
|
||||
@ -285,33 +284,33 @@ pub fn find_crate_name(attrs: &[Attribute]) -> Option<InternedString> {
|
||||
|
||||
#[derive(Copy, PartialEq)]
|
||||
pub enum InlineAttr {
|
||||
InlineNone,
|
||||
InlineHint,
|
||||
InlineAlways,
|
||||
InlineNever,
|
||||
None,
|
||||
Hint,
|
||||
Always,
|
||||
Never,
|
||||
}
|
||||
|
||||
/// Determine what `#[inline]` attribute is present in `attrs`, if any.
|
||||
pub fn find_inline_attr(diagnostic: Option<&SpanHandler>, attrs: &[Attribute]) -> InlineAttr {
|
||||
// FIXME (#2809)---validate the usage of #[inline] and #[inline]
|
||||
attrs.iter().fold(InlineNone, |ia,attr| {
|
||||
attrs.iter().fold(InlineAttr::None, |ia,attr| {
|
||||
match attr.node.value.node {
|
||||
MetaWord(ref n) if *n == "inline" => {
|
||||
mark_used(attr);
|
||||
InlineHint
|
||||
InlineAttr::Hint
|
||||
}
|
||||
MetaList(ref n, ref items) if *n == "inline" => {
|
||||
mark_used(attr);
|
||||
if items.len() != 1 {
|
||||
diagnostic.map(|d|{ d.span_err(attr.span, "expected one argument"); });
|
||||
InlineNone
|
||||
InlineAttr::None
|
||||
} else if contains_name(&items[..], "always") {
|
||||
InlineAlways
|
||||
InlineAttr::Always
|
||||
} else if contains_name(&items[..], "never") {
|
||||
InlineNever
|
||||
InlineAttr::Never
|
||||
} else {
|
||||
diagnostic.map(|d|{ d.span_err((*items[0]).span, "invalid argument"); });
|
||||
InlineNone
|
||||
InlineAttr::None
|
||||
}
|
||||
}
|
||||
_ => ia
|
||||
@ -322,8 +321,8 @@ pub fn find_inline_attr(diagnostic: Option<&SpanHandler>, attrs: &[Attribute]) -
|
||||
/// True if `#[inline]` or `#[inline(always)]` is present in `attrs`.
|
||||
pub fn requests_inline(attrs: &[Attribute]) -> bool {
|
||||
match find_inline_attr(None, attrs) {
|
||||
InlineHint | InlineAlways => true,
|
||||
InlineNone | InlineNever => false,
|
||||
InlineAttr::Hint | InlineAttr::Always => true,
|
||||
InlineAttr::None | InlineAttr::Never => false,
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user