blob: e40c7f13e07f414f69eb1c7b887cd2e0e8b10828 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
use llvm_sys::{core::LLVMGetBasicBlockParent, prelude::LLVMBasicBlockRef};
use std::marker::PhantomData;
use super::FnValue;
/// Wrapper for a LLVM Basic Block.
#[derive(Copy, Clone)]
pub struct BasicBlock<'llvm>(LLVMBasicBlockRef, PhantomData<&'llvm ()>);
impl<'llvm> BasicBlock<'llvm> {
/// Create a new BasicBlock instance.
///
/// # Panics
///
/// Panics if `bb_ref` is a null pointer.
pub(super) fn new(bb_ref: LLVMBasicBlockRef) -> BasicBlock<'llvm> {
assert!(!bb_ref.is_null());
BasicBlock(bb_ref, PhantomData)
}
/// Get the raw LLVM value reference.
#[inline]
pub(super) fn bb_ref(&self) -> LLVMBasicBlockRef {
self.0
}
/// Get the function to which the basic block belongs.
///
/// # Panics
///
/// Panics if LLVM API returns a `null` pointer.
pub fn get_parent(&self) -> FnValue<'llvm> {
let value_ref = unsafe { LLVMGetBasicBlockParent(self.bb_ref()) };
assert!(!value_ref.is_null());
FnValue::new(value_ref)
}
}
|