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.
|
/// A traveral that traverses a Rust `struct` that is used to declare an LLVM's struct's field types.
|
||||||
pub trait FieldTraversal<'ctx> {
|
pub trait FieldTraversal<'ctx> {
|
||||||
/// Output type of [`FieldTraversal::add`].
|
/// Output type of [`FieldTraversal::add`].
|
||||||
type Out<M>;
|
type Output<M>;
|
||||||
|
|
||||||
/// Traverse through the type of a declared field and do something with it.
|
/// Traverse through the type of a declared field and do something with it.
|
||||||
///
|
///
|
||||||
/// * `name` - The cosmetic name of the LLVM field. Used for debugging.
|
/// * `name` - The cosmetic name of the LLVM field. Used for debugging.
|
||||||
/// * `model` - The [`Model`] representing the LLVM type of this field.
|
/// * `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.
|
/// 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())
|
self.add(name, M::default())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,12 +45,12 @@ pub struct GepFieldTraversal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'ctx> FieldTraversal<'ctx> for 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;
|
let gep_index = self.gep_index_counter;
|
||||||
self.gep_index_counter += 1;
|
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> {
|
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();
|
let t = model.llvm_type(self.generator, self.ctx).as_basic_type_enum();
|
||||||
self.field_types.push(t);
|
self.field_types.push(t);
|
||||||
}
|
}
|
||||||
@ -89,9 +89,9 @@ struct CheckTypeFieldTraversal<'ctx, 'a, G: CodeGenerator + ?Sized> {
|
|||||||
impl<'ctx, 'a, G: CodeGenerator + ?Sized> FieldTraversal<'ctx>
|
impl<'ctx, 'a, G: CodeGenerator + ?Sized> FieldTraversal<'ctx>
|
||||||
for CheckTypeFieldTraversal<'ctx, 'a, G>
|
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;
|
let gep_index = self.gep_index_counter;
|
||||||
self.gep_index_counter += 1;
|
self.gep_index_counter += 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user