moore-vhdl 0.12.0

The VHDL implementation of the moore compiler framework.
Documentation
// Copyright (c) 2016-2021 Fabian Schuiki

use crate::arenas::{Alloc, AllocOwned};
use crate::ty2::access::*;
use crate::ty2::enums::*;
use crate::ty2::floats::*;
use crate::ty2::ints::*;
use crate::ty2::physical::*;
use crate::ty2::prelude::*;
use crate::ty2::types::NullType;

make_arenas!(
    /// An arena to allocate types nodes into.
    pub struct TypeArena<'t> {
        integer_basetype: IntegerBasetype,
        integer_subtype: IntegerSubtype<'t>,
        floating_basetype: FloatingBasetype,
        floating_subtype: FloatingSubtype<'t>,
        enum_basetype: EnumBasetype,
        enum_subtype: EnumSubtype<'t>,
        physical_basetype: PhysicalBasetype,
        physical_subtype: PhysicalSubtype<'t>,
        access: AccessType<'t>,
    }
);

impl<'t> AllocOwned<'t, 't, Type> for TypeArena<'t> {
    fn alloc_owned(&'t self, value: OwnedType<'t>) -> &'t Type {
        match value {
            OwnedType::IntegerBasetype(t) => self.alloc(t),
            OwnedType::IntegerSubtype(t) => self.alloc(t),
            OwnedType::FloatingBasetype(t) => self.alloc(t),
            OwnedType::FloatingSubtype(t) => self.alloc(t),
            OwnedType::EnumBasetype(t) => self.alloc(t),
            OwnedType::EnumSubtype(t) => self.alloc(t),
            OwnedType::PhysicalBasetype(t) => self.alloc(t),
            OwnedType::PhysicalSubtype(t) => self.alloc(t),
            OwnedType::Access(t) => self.alloc(t),
            OwnedType::Null => &NullType,
            OwnedType::UniversalInteger => &UniversalIntegerType,
            OwnedType::UniversalReal => &UniversalRealType,
        }
    }
}