forked from M-Labs/nac3
FieldTraversal::{Out -> Output}
This commit is contained in:
parent
f167f5f215
commit
6283036815
@ -13,16 +13,16 @@ use super::*;
|
||||
/// A traveral that traverses a Rust `struct` that is used to declare an LLVM's struct's field types.
|
||||
pub trait FieldTraversal<'ctx> {
|
||||
/// Output type of [`FieldTraversal::add`].
|
||||
type Out<M>;
|
||||
type Output<M>;
|
||||
|
||||
/// Traverse through the type of a declared field and do something with it.
|
||||
///
|
||||
/// * `name` - The cosmetic name of the LLVM field. Used for debugging.
|
||||
/// * `model` - The [`Model`] representing the LLVM type of this field.
|
||||
fn add<M: Model<'ctx>>(&mut self, name: &'static str, model: M) -> Self::Out<M>;
|
||||
fn add<M: Model<'ctx>>(&mut self, name: &'static str, model: M) -> Self::Output<M>;
|
||||
|
||||
/// Like [`FieldTraversal::add`] but [`Model`] is automatically inferred from its [`Default`] trait.
|
||||
fn add_auto<M: Model<'ctx> + Default>(&mut self, name: &'static str) -> Self::Out<M> {
|
||||
fn add_auto<M: Model<'ctx> + Default>(&mut self, name: &'static str) -> Self::Output<M> {
|
||||
self.add(name, M::default())
|
||||
}
|
||||
}
|
||||
@ -45,12 +45,12 @@ pub struct GepFieldTraversal {
|
||||
}
|
||||
|
||||
impl<'ctx> FieldTraversal<'ctx> for GepFieldTraversal {
|
||||
type Out<M> = GepField<M>;
|
||||
type Output<M> = GepField<M>;
|
||||
|
||||
fn add<M: Model<'ctx>>(&mut self, name: &'static str, model: M) -> Self::Out<M> {
|
||||
fn add<M: Model<'ctx>>(&mut self, name: &'static str, model: M) -> Self::Output<M> {
|
||||
let gep_index = self.gep_index_counter;
|
||||
self.gep_index_counter += 1;
|
||||
Self::Out { gep_index, name, model }
|
||||
Self::Output { gep_index, name, model }
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,9 +65,9 @@ struct TypeFieldTraversal<'ctx, 'a, G: CodeGenerator + ?Sized> {
|
||||
}
|
||||
|
||||
impl<'ctx, 'a, G: CodeGenerator + ?Sized> FieldTraversal<'ctx> for TypeFieldTraversal<'ctx, 'a, G> {
|
||||
type Out<M> = (); // Checking types return nothing.
|
||||
type Output<M> = (); // Checking types return nothing.
|
||||
|
||||
fn add<M: Model<'ctx>>(&mut self, _name: &'static str, model: M) -> Self::Out<M> {
|
||||
fn add<M: Model<'ctx>>(&mut self, _name: &'static str, model: M) -> Self::Output<M> {
|
||||
let t = model.llvm_type(self.generator, self.ctx).as_basic_type_enum();
|
||||
self.field_types.push(t);
|
||||
}
|
||||
@ -89,9 +89,9 @@ struct CheckTypeFieldTraversal<'ctx, 'a, G: CodeGenerator + ?Sized> {
|
||||
impl<'ctx, 'a, G: CodeGenerator + ?Sized> FieldTraversal<'ctx>
|
||||
for CheckTypeFieldTraversal<'ctx, 'a, G>
|
||||
{
|
||||
type Out<M> = (); // Checking types return nothing.
|
||||
type Output<M> = (); // Checking types return nothing.
|
||||
|
||||
fn add<M: Model<'ctx>>(&mut self, name: &'static str, model: M) -> Self::Out<M> {
|
||||
fn add<M: Model<'ctx>>(&mut self, name: &'static str, model: M) -> Self::Output<M> {
|
||||
let gep_index = self.gep_index_counter;
|
||||
self.gep_index_counter += 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user