Struct inkwell::attributes::Attribute
source · pub struct Attribute { /* private fields */ }
Expand description
Functions, function parameters, and return types can have Attribute
s to indicate
how they should be treated by optimizations and code generation.
Implementations§
source§impl Attribute
impl Attribute
sourcepub unsafe fn new(attribute: LLVMAttributeRef) -> Self
pub unsafe fn new(attribute: LLVMAttributeRef) -> Self
Creates a new Attribute
from a raw pointer.
sourcepub fn as_mut_ptr(&self) -> LLVMAttributeRef
pub fn as_mut_ptr(&self) -> LLVMAttributeRef
Acquires the underlying raw pointer belonging to this Attribute
type.
sourcepub fn is_enum(self) -> bool
pub fn is_enum(self) -> bool
Determines whether or not an Attribute
is an enum. This method will
likely be removed in the future in favor of Attribute
s being generically
defined.
Example
use inkwell::context::Context;
let context = Context::create();
let enum_attribute = context.create_enum_attribute(0, 10);
assert!(enum_attribute.is_enum());
sourcepub fn is_string(self) -> bool
pub fn is_string(self) -> bool
Determines whether or not an Attribute
is a string. This method will
likely be removed in the future in favor of Attribute
s being generically
defined.
Example
use inkwell::context::Context;
let context = Context::create();
let string_attribute = context.create_string_attribute("my_key_123", "my_val");
assert!(string_attribute.is_string());
sourcepub fn is_type(self) -> bool
pub fn is_type(self) -> bool
Determines whether or not an Attribute
is a type attribute. This method will
likely be removed in the future in favor of Attribute
s being generically
defined.
Example
use inkwell::context::Context;
use inkwell::attributes::Attribute;
let context = Context::create();
let kind_id = Attribute::get_named_enum_kind_id("sret");
let type_attribute = context.create_type_attribute(
kind_id,
context.i32_type().into(),
);
assert!(type_attribute.is_type());
sourcepub fn get_named_enum_kind_id(name: &str) -> u32
pub fn get_named_enum_kind_id(name: &str) -> u32
Gets the enum kind id associated with a builtin name.
Example
use inkwell::attributes::Attribute;
// This kind id doesn't exist:
assert_eq!(Attribute::get_named_enum_kind_id("foobar"), 0);
// These are real kind ids:
assert_eq!(Attribute::get_named_enum_kind_id("align"), 1);
assert_eq!(Attribute::get_named_enum_kind_id("builtin"), 5);
sourcepub fn get_enum_kind_id(self) -> u32
pub fn get_enum_kind_id(self) -> u32
Gets the kind id associated with an enum Attribute
.
Example
use inkwell::context::Context;
let context = Context::create();
let enum_attribute = context.create_enum_attribute(0, 10);
assert_eq!(enum_attribute.get_enum_kind_id(), 0);
This function also works for type Attribute
s.
use inkwell::context::Context;
use inkwell::attributes::Attribute;
use inkwell::types::AnyType;
let context = Context::create();
let kind_id = Attribute::get_named_enum_kind_id("sret");
let any_type = context.i32_type().as_any_type_enum();
let type_attribute = context.create_type_attribute(
kind_id,
any_type,
);
assert_eq!(type_attribute.get_enum_kind_id(), kind_id);
sourcepub fn get_last_enum_kind_id() -> u32
pub fn get_last_enum_kind_id() -> u32
Gets the last enum kind id associated with builtin names.
Example
use inkwell::attributes::Attribute;
assert_eq!(Attribute::get_last_enum_kind_id(), 56);
sourcepub fn get_enum_value(self) -> u64
pub fn get_enum_value(self) -> u64
Gets the value associated with an enum Attribute
.
Example
use inkwell::context::Context;
let context = Context::create();
let enum_attribute = context.create_enum_attribute(0, 10);
assert_eq!(enum_attribute.get_enum_value(), 10);
sourcepub fn get_string_kind_id(&self) -> &CStr
pub fn get_string_kind_id(&self) -> &CStr
Gets the string kind id associated with a string attribute.
Example
use inkwell::context::Context;
let context = Context::create();
let string_attribute = context.create_string_attribute("my_key", "my_val");
assert_eq!(string_attribute.get_string_kind_id().to_str(), Ok("my_key"));
sourcepub fn get_string_value(&self) -> &CStr
pub fn get_string_value(&self) -> &CStr
Gets the string value associated with a string attribute.
Example
use inkwell::context::Context;
let context = Context::create();
let string_attribute = context.create_string_attribute("my_key", "my_val");
assert_eq!(string_attribute.get_string_value().to_str(), Ok("my_val"));
sourcepub fn get_type_value(&self) -> AnyTypeEnum<'_>
pub fn get_type_value(&self) -> AnyTypeEnum<'_>
Gets the type associated with a type attribute.
Example
use inkwell::context::Context;
use inkwell::attributes::Attribute;
use inkwell::types::AnyType;
let context = Context::create();
let kind_id = Attribute::get_named_enum_kind_id("sret");
let any_type = context.i32_type().as_any_type_enum();
let type_attribute = context.create_type_attribute(
kind_id,
any_type,
);
assert!(type_attribute.is_type());
assert_eq!(type_attribute.get_type_value(), any_type);
assert_ne!(type_attribute.get_type_value(), context.i64_type().as_any_type_enum());