forked from libre-chip/fayalite
		
	rename FixedType->StaticType, fixed_type()->static_type(), hdl(fixed_type)->hdl(static), IsFixedLen->IsStaticLen
This commit is contained in:
		
							parent
							
								
									c19a6821cf
								
							
						
					
					
						commit
						2dce478d48
					
				
					 20 changed files with 165 additions and 164 deletions
				
			
		| 
						 | 
				
			
			@ -248,5 +248,6 @@ no_op_fold!(syn::Token![enum]);
 | 
			
		|||
no_op_fold!(syn::Token![extern]);
 | 
			
		||||
no_op_fold!(syn::Token![let]);
 | 
			
		||||
no_op_fold!(syn::Token![mut]);
 | 
			
		||||
no_op_fold!(syn::Token![static]);
 | 
			
		||||
no_op_fold!(syn::Token![struct]);
 | 
			
		||||
no_op_fold!(syn::Token![where]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@ mod value_derive_struct;
 | 
			
		|||
 | 
			
		||||
mod kw {
 | 
			
		||||
    pub(crate) use syn::token::{
 | 
			
		||||
        Enum as enum_, Extern as extern_, Struct as struct_, Where as where_,
 | 
			
		||||
        Enum as enum_, Extern as extern_, Static as static_, Struct as struct_, Where as where_,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    macro_rules! custom_keyword {
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,6 @@ mod kw {
 | 
			
		|||
 | 
			
		||||
    custom_keyword!(clock_domain);
 | 
			
		||||
    custom_keyword!(connect_inexact);
 | 
			
		||||
    custom_keyword!(fixed_type);
 | 
			
		||||
    custom_keyword!(flip);
 | 
			
		||||
    custom_keyword!(hdl);
 | 
			
		||||
    custom_keyword!(input);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -312,9 +312,9 @@ impl ModuleFn {
 | 
			
		|||
            #body_fn
 | 
			
		||||
            ::fayalite::module::ModuleBuilder::run(#fn_name_str, |m| __body #body_turbofish_type_generics(m, #(#param_names,)*))
 | 
			
		||||
        }};
 | 
			
		||||
        let fixed_type = io.iter().all(|io| io.kind.ty_expr.is_none());
 | 
			
		||||
        let struct_options = if fixed_type {
 | 
			
		||||
            quote! { #[hdl(fixed_type)] }
 | 
			
		||||
        let static_type = io.iter().all(|io| io.kind.ty_expr.is_none());
 | 
			
		||||
        let struct_options = if static_type {
 | 
			
		||||
            quote! { #[hdl(static)] }
 | 
			
		||||
        } else {
 | 
			
		||||
            quote! {}
 | 
			
		||||
        };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1003,10 +1003,10 @@ fn wrap_ty_with_expr(ty: impl ToTokens) -> Type {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn unwrap_or_fixed_type(expr: Option<impl ToTokens>, span: Span) -> TokenStream {
 | 
			
		||||
fn unwrap_or_static_type(expr: Option<impl ToTokens>, span: Span) -> TokenStream {
 | 
			
		||||
    expr.map(ToTokens::into_token_stream).unwrap_or_else(|| {
 | 
			
		||||
        quote_spanned! {span=>
 | 
			
		||||
            ::fayalite::ty::FixedType::fixed_type()
 | 
			
		||||
            ::fayalite::ty::StaticType::static_type()
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1109,7 +1109,7 @@ impl Visitor {
 | 
			
		|||
        let m = hdl_let.kind.m;
 | 
			
		||||
        let dot = hdl_let.kind.dot_token;
 | 
			
		||||
        let kind = hdl_let.kind.kind;
 | 
			
		||||
        let ty_expr = unwrap_or_fixed_type(hdl_let.kind.ty_expr.as_ref(), kind.span());
 | 
			
		||||
        let ty_expr = unwrap_or_static_type(hdl_let.kind.ty_expr.as_ref(), kind.span());
 | 
			
		||||
        let mut expr = quote! {#m #dot #kind};
 | 
			
		||||
        hdl_let.kind.paren.surround(&mut expr, |expr| {
 | 
			
		||||
            let name_str = ImplicitName {
 | 
			
		||||
| 
						 | 
				
			
			@ -1214,7 +1214,7 @@ impl Visitor {
 | 
			
		|||
                paren,
 | 
			
		||||
                ty_expr,
 | 
			
		||||
            } => {
 | 
			
		||||
                let ty_expr = unwrap_or_fixed_type(ty_expr.as_ref(), reg_builder.span());
 | 
			
		||||
                let ty_expr = unwrap_or_static_type(ty_expr.as_ref(), reg_builder.span());
 | 
			
		||||
                dot_token.to_tokens(&mut expr);
 | 
			
		||||
                no_reset.to_tokens(&mut expr);
 | 
			
		||||
                paren.surround(&mut expr, |expr| ty_expr.to_tokens(expr));
 | 
			
		||||
| 
						 | 
				
			
			@ -1248,7 +1248,7 @@ impl Visitor {
 | 
			
		|||
        let dot = hdl_let.kind.dot_token;
 | 
			
		||||
        let wire = hdl_let.kind.wire;
 | 
			
		||||
        self.require_normal_module(wire);
 | 
			
		||||
        let ty_expr = unwrap_or_fixed_type(hdl_let.kind.ty_expr.as_ref(), wire.span());
 | 
			
		||||
        let ty_expr = unwrap_or_static_type(hdl_let.kind.ty_expr.as_ref(), wire.span());
 | 
			
		||||
        let mut expr = quote! {#m #dot #wire};
 | 
			
		||||
        hdl_let.kind.paren.surround(&mut expr, |expr| {
 | 
			
		||||
            let name_str = ImplicitName {
 | 
			
		||||
| 
						 | 
				
			
			@ -1290,14 +1290,14 @@ impl Visitor {
 | 
			
		|||
                memory,
 | 
			
		||||
                paren,
 | 
			
		||||
                ty_expr,
 | 
			
		||||
            } => (paren, unwrap_or_fixed_type(ty_expr.as_ref(), memory.span())),
 | 
			
		||||
            } => (paren, unwrap_or_static_type(ty_expr.as_ref(), memory.span())),
 | 
			
		||||
            MemoryFn::MemoryArray {
 | 
			
		||||
                memory_array,
 | 
			
		||||
                paren,
 | 
			
		||||
                ty_expr,
 | 
			
		||||
            } => (
 | 
			
		||||
                paren,
 | 
			
		||||
                unwrap_or_fixed_type(ty_expr.as_ref(), memory_array.span()),
 | 
			
		||||
                unwrap_or_static_type(ty_expr.as_ref(), memory_array.span()),
 | 
			
		||||
            ),
 | 
			
		||||
            MemoryFn::MemoryWithInit {
 | 
			
		||||
                memory_with_init: _,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -167,46 +167,46 @@ pub(crate) fn get_target(target: &Option<(kw::target, Paren, Path)>, item_ident:
 | 
			
		|||
 | 
			
		||||
pub(crate) struct ValueDeriveGenerics {
 | 
			
		||||
    pub(crate) generics: Generics,
 | 
			
		||||
    pub(crate) fixed_type_generics: Generics,
 | 
			
		||||
    pub(crate) static_type_generics: Generics,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ValueDeriveGenerics {
 | 
			
		||||
    pub(crate) fn get(mut generics: Generics, where_: &Option<(Where, Paren, Bounds)>) -> Self {
 | 
			
		||||
        let mut fixed_type_generics = generics.clone();
 | 
			
		||||
        let mut static_type_generics = generics.clone();
 | 
			
		||||
        if let Some((_, _, bounds)) = where_ {
 | 
			
		||||
            generics
 | 
			
		||||
                .make_where_clause()
 | 
			
		||||
                .predicates
 | 
			
		||||
                .extend(bounds.0.iter().cloned());
 | 
			
		||||
            fixed_type_generics
 | 
			
		||||
            static_type_generics
 | 
			
		||||
                .where_clause
 | 
			
		||||
                .clone_from(&generics.where_clause);
 | 
			
		||||
        } else {
 | 
			
		||||
            let type_params = Vec::from_iter(generics.type_params().map(|v| v.ident.clone()));
 | 
			
		||||
            let predicates = &mut generics.make_where_clause().predicates;
 | 
			
		||||
            let fixed_type_predicates = &mut fixed_type_generics.make_where_clause().predicates;
 | 
			
		||||
            let static_type_predicates = &mut static_type_generics.make_where_clause().predicates;
 | 
			
		||||
            for type_param in type_params {
 | 
			
		||||
                predicates.push(parse_quote! {#type_param: ::fayalite::ty::Value});
 | 
			
		||||
                predicates.push(parse_quote! {
 | 
			
		||||
                    <#type_param as ::fayalite::expr::ToExpr>::Type:
 | 
			
		||||
                        ::fayalite::ty::Type<Value = #type_param>
 | 
			
		||||
                });
 | 
			
		||||
                fixed_type_predicates.push(parse_quote! {#type_param: ::fayalite::ty::Value});
 | 
			
		||||
                fixed_type_predicates.push(parse_quote! {
 | 
			
		||||
                static_type_predicates.push(parse_quote! {#type_param: ::fayalite::ty::Value});
 | 
			
		||||
                static_type_predicates.push(parse_quote! {
 | 
			
		||||
                    <#type_param as ::fayalite::expr::ToExpr>::Type:
 | 
			
		||||
                        ::fayalite::ty::FixedType<Value = #type_param>
 | 
			
		||||
                        ::fayalite::ty::StaticType<Value = #type_param>
 | 
			
		||||
                });
 | 
			
		||||
                fixed_type_predicates.push(parse_quote! {
 | 
			
		||||
                static_type_predicates.push(parse_quote! {
 | 
			
		||||
                    <
 | 
			
		||||
                        <#type_param as ::fayalite::expr::ToExpr>::Type
 | 
			
		||||
                        as ::fayalite::ty::Type
 | 
			
		||||
                    >::MaskType: ::fayalite::ty::FixedType
 | 
			
		||||
                    >::MaskType: ::fayalite::ty::StaticType
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Self {
 | 
			
		||||
            generics,
 | 
			
		||||
            fixed_type_generics,
 | 
			
		||||
            static_type_generics,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -152,7 +152,7 @@ impl ParsedVariant {
 | 
			
		|||
                    parsed_struct: ParsedStruct {
 | 
			
		||||
                        options: StructOptions {
 | 
			
		||||
                            outline_generated: None,
 | 
			
		||||
                            fixed_type: Some(Default::default()),
 | 
			
		||||
                            static_: Some(Default::default()),
 | 
			
		||||
                            where_: Some((
 | 
			
		||||
                                Default::default(),
 | 
			
		||||
                                Default::default(),
 | 
			
		||||
| 
						 | 
				
			
			@ -160,7 +160,7 @@ impl ParsedVariant {
 | 
			
		|||
                                    enum_generics.clone(),
 | 
			
		||||
                                    &enum_options.where_,
 | 
			
		||||
                                )
 | 
			
		||||
                                .fixed_type_generics
 | 
			
		||||
                                .static_type_generics
 | 
			
		||||
                                .where_clause
 | 
			
		||||
                                .into(),
 | 
			
		||||
                            )),
 | 
			
		||||
| 
						 | 
				
			
			@ -275,10 +275,10 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
        let target = get_target(target, enum_ident);
 | 
			
		||||
        let ValueDeriveGenerics {
 | 
			
		||||
            generics: _,
 | 
			
		||||
            fixed_type_generics,
 | 
			
		||||
            static_type_generics,
 | 
			
		||||
        } = ValueDeriveGenerics::get(enum_generics.clone(), where_);
 | 
			
		||||
        let (fixed_type_impl_generics, fixed_type_type_generics, fixed_type_where_clause) =
 | 
			
		||||
            fixed_type_generics.split_for_impl();
 | 
			
		||||
        let (static_type_impl_generics, static_type_type_generics, static_type_where_clause) =
 | 
			
		||||
            static_type_generics.split_for_impl();
 | 
			
		||||
        let type_struct_ident = format_ident!("__{}__Type", enum_ident);
 | 
			
		||||
        let mut field_checks = vec![];
 | 
			
		||||
        let mut make_type_struct_variant_type = |variant: &ParsedVariant| {
 | 
			
		||||
| 
						 | 
				
			
			@ -303,7 +303,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            let mut field_names = Vec::from_iter(get_field_names(&value_struct.fields));
 | 
			
		||||
            derive_clone_hash_eq_partialeq_for_struct(
 | 
			
		||||
                &value_struct.ident,
 | 
			
		||||
                &fixed_type_generics,
 | 
			
		||||
                &static_type_generics,
 | 
			
		||||
                &field_names,
 | 
			
		||||
            )
 | 
			
		||||
            .to_tokens(tokens);
 | 
			
		||||
| 
						 | 
				
			
			@ -334,9 +334,9 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            let value_struct_ident = &value_struct.ident;
 | 
			
		||||
            quote! {
 | 
			
		||||
                #[automatically_derived]
 | 
			
		||||
                impl #fixed_type_impl_generics ::fayalite::__std::fmt::Debug
 | 
			
		||||
                    for #value_struct_ident #fixed_type_type_generics
 | 
			
		||||
                #fixed_type_where_clause
 | 
			
		||||
                impl #static_type_impl_generics ::fayalite::__std::fmt::Debug
 | 
			
		||||
                    for #value_struct_ident #static_type_type_generics
 | 
			
		||||
                #static_type_where_clause
 | 
			
		||||
                {
 | 
			
		||||
                    fn fmt(
 | 
			
		||||
                        &self,
 | 
			
		||||
| 
						 | 
				
			
			@ -349,7 +349,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            .to_tokens(tokens);
 | 
			
		||||
            Some(parse_quote! {
 | 
			
		||||
                <
 | 
			
		||||
                    #value_struct_ident #fixed_type_type_generics
 | 
			
		||||
                    #value_struct_ident #static_type_type_generics
 | 
			
		||||
                    as ::fayalite::expr::ToExpr
 | 
			
		||||
                >::Type
 | 
			
		||||
            })
 | 
			
		||||
| 
						 | 
				
			
			@ -373,7 +373,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            vis: vis.clone(),
 | 
			
		||||
            struct_token: Token,
 | 
			
		||||
            ident: type_struct_ident,
 | 
			
		||||
            generics: fixed_type_generics.clone(),
 | 
			
		||||
            generics: static_type_generics.clone(),
 | 
			
		||||
            fields: Fields::Named(FieldsNamed {
 | 
			
		||||
                brace_token: *brace_token,
 | 
			
		||||
                named: type_struct_variants,
 | 
			
		||||
| 
						 | 
				
			
			@ -398,7 +398,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
        };
 | 
			
		||||
        derive_clone_hash_eq_partialeq_for_struct(
 | 
			
		||||
            type_struct_ident,
 | 
			
		||||
            &fixed_type_generics,
 | 
			
		||||
            &static_type_generics,
 | 
			
		||||
            &non_empty_variant_names,
 | 
			
		||||
        )
 | 
			
		||||
        .to_tokens(tokens);
 | 
			
		||||
| 
						 | 
				
			
			@ -432,7 +432,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
                            .last()
 | 
			
		||||
                            .expect("missing phantom field")
 | 
			
		||||
                            .name;
 | 
			
		||||
                        let type_generics = fixed_type_type_generics.as_turbofish();
 | 
			
		||||
                        let type_generics = static_type_type_generics.as_turbofish();
 | 
			
		||||
                        quote! {
 | 
			
		||||
                            ::fayalite::__std::option::Option::Some(
 | 
			
		||||
                                ::fayalite::ty::DynValueTrait::to_canonical_dyn(
 | 
			
		||||
| 
						 | 
				
			
			@ -628,7 +628,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
                    #variant_index => {
 | 
			
		||||
                        let __variant_access = ::fayalite::expr::ToExpr::to_expr(
 | 
			
		||||
                            &__variant_access.downcast_unchecked::<<
 | 
			
		||||
                                #ident #fixed_type_type_generics
 | 
			
		||||
                                #ident #static_type_type_generics
 | 
			
		||||
                                as ::fayalite::expr::ToExpr
 | 
			
		||||
                            >::Type>(),
 | 
			
		||||
                        );
 | 
			
		||||
| 
						 | 
				
			
			@ -660,11 +660,11 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
                    {
 | 
			
		||||
                        ::fayalite::expr::ToExpr::to_expr(
 | 
			
		||||
                            &::fayalite::expr::ops::EnumLiteral::<
 | 
			
		||||
                                #type_struct_ident #fixed_type_type_generics
 | 
			
		||||
                                #type_struct_ident #static_type_type_generics
 | 
			
		||||
                            >::new_unchecked(
 | 
			
		||||
                                ::fayalite::__std::option::Option::None,
 | 
			
		||||
                                #variant_index,
 | 
			
		||||
                                ::fayalite::ty::FixedType::fixed_type(),
 | 
			
		||||
                                ::fayalite::ty::StaticType::static_type(),
 | 
			
		||||
                            ),
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -673,13 +673,13 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
                    {
 | 
			
		||||
                        ::fayalite::expr::ToExpr::to_expr(
 | 
			
		||||
                            &::fayalite::expr::ops::EnumLiteral::<
 | 
			
		||||
                                #type_struct_ident #fixed_type_type_generics
 | 
			
		||||
                                #type_struct_ident #static_type_type_generics
 | 
			
		||||
                            >::new_unchecked(
 | 
			
		||||
                                ::fayalite::__std::option::Option::Some(
 | 
			
		||||
                                    #(#builder_field_vars)*.to_canonical_dyn(),
 | 
			
		||||
                                ),
 | 
			
		||||
                                #variant_index,
 | 
			
		||||
                                ::fayalite::ty::FixedType::fixed_type(),
 | 
			
		||||
                                ::fayalite::ty::StaticType::static_type(),
 | 
			
		||||
                            ),
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -698,19 +698,19 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
                } => parse_quote! {
 | 
			
		||||
                    {
 | 
			
		||||
                        let __builder = <
 | 
			
		||||
                            #field_type_struct_ident #fixed_type_type_generics
 | 
			
		||||
                            #field_type_struct_ident #static_type_type_generics
 | 
			
		||||
                            as ::fayalite::bundle::BundleType
 | 
			
		||||
                        >::builder();
 | 
			
		||||
                        #(let __builder = __builder.#builder_field_vars(#builder_field_vars);)*
 | 
			
		||||
                        ::fayalite::expr::ToExpr::to_expr(
 | 
			
		||||
                            &::fayalite::expr::ops::EnumLiteral::<
 | 
			
		||||
                                #type_struct_ident #fixed_type_type_generics
 | 
			
		||||
                                #type_struct_ident #static_type_type_generics
 | 
			
		||||
                            >::new_unchecked(
 | 
			
		||||
                                ::fayalite::__std::option::Option::Some(
 | 
			
		||||
                                    __builder.build().to_canonical_dyn(),
 | 
			
		||||
                                ),
 | 
			
		||||
                                #variant_index,
 | 
			
		||||
                                ::fayalite::ty::FixedType::fixed_type(),
 | 
			
		||||
                                ::fayalite::ty::StaticType::static_type(),
 | 
			
		||||
                            ),
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -730,9 +730,9 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
                            (name.clone(), parse_quote! { ::fayalite::expr::Expr<#ty> })
 | 
			
		||||
                        },
 | 
			
		||||
                    ),
 | 
			
		||||
                    &fixed_type_generics,
 | 
			
		||||
                    &parse_quote! {#type_struct_ident #fixed_type_type_generics},
 | 
			
		||||
                    &parse_quote! { ::fayalite::expr::Expr<#target #fixed_type_type_generics> },
 | 
			
		||||
                    &static_type_generics,
 | 
			
		||||
                    &parse_quote! {#type_struct_ident #static_type_type_generics},
 | 
			
		||||
                    &parse_quote! { ::fayalite::expr::Expr<#target #static_type_type_generics> },
 | 
			
		||||
                    build_body,
 | 
			
		||||
                )
 | 
			
		||||
                .to_tokens(tokens);
 | 
			
		||||
| 
						 | 
				
			
			@ -742,7 +742,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            vis: vis.clone(),
 | 
			
		||||
            enum_token: *enum_token,
 | 
			
		||||
            ident: match_enum_ident,
 | 
			
		||||
            generics: fixed_type_generics.clone(),
 | 
			
		||||
            generics: static_type_generics.clone(),
 | 
			
		||||
            brace_token: *brace_token,
 | 
			
		||||
            variants: match_enum_variants,
 | 
			
		||||
        };
 | 
			
		||||
| 
						 | 
				
			
			@ -750,7 +750,7 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
        match_enum.to_tokens(tokens);
 | 
			
		||||
        make_connect_impl(
 | 
			
		||||
            *connect_inexact,
 | 
			
		||||
            &fixed_type_generics,
 | 
			
		||||
            &static_type_generics,
 | 
			
		||||
            type_struct_ident,
 | 
			
		||||
            variants.iter().flat_map(|variant| {
 | 
			
		||||
                variant.fields.iter().map(|field| {
 | 
			
		||||
| 
						 | 
				
			
			@ -766,9 +766,9 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
        let empty_builder_ty = builder.ty([], Some(&parse_quote! { Self }), false);
 | 
			
		||||
        quote! {
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::__std::fmt::Debug
 | 
			
		||||
                for #match_enum_ident #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::__std::fmt::Debug
 | 
			
		||||
                for #match_enum_ident #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                fn fmt(
 | 
			
		||||
                    &self,
 | 
			
		||||
| 
						 | 
				
			
			@ -781,13 +781,13 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::ty::FixedType
 | 
			
		||||
                for #type_struct_ident #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::ty::StaticType
 | 
			
		||||
                for #type_struct_ident #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                fn fixed_type() -> Self {
 | 
			
		||||
                fn static_type() -> Self {
 | 
			
		||||
                    Self {
 | 
			
		||||
                        #(#non_empty_variant_names: ::fayalite::ty::FixedType::fixed_type(),)*
 | 
			
		||||
                        #(#non_empty_variant_names: ::fayalite::ty::StaticType::static_type(),)*
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -796,16 +796,16 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            where
 | 
			
		||||
                <T as ::fayalite::expr::ToExpr>::Type: ::fayalite::ty::Type<Value = T>,
 | 
			
		||||
            {}
 | 
			
		||||
            fn __check_fields #fixed_type_impl_generics(_: #target #fixed_type_type_generics)
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            fn __check_fields #static_type_impl_generics(_: #target #static_type_type_generics)
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                #(#field_checks)*
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::__std::fmt::Debug
 | 
			
		||||
                for #type_struct_ident #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::__std::fmt::Debug
 | 
			
		||||
                for #type_struct_ident #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                fn fmt(
 | 
			
		||||
                    &self,
 | 
			
		||||
| 
						 | 
				
			
			@ -816,16 +816,16 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::ty::Type
 | 
			
		||||
                for #type_struct_ident #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::ty::Type
 | 
			
		||||
                for #type_struct_ident #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                type CanonicalType = ::fayalite::enum_::DynEnumType;
 | 
			
		||||
                type Value = #target #fixed_type_type_generics;
 | 
			
		||||
                type Value = #target #static_type_type_generics;
 | 
			
		||||
                type CanonicalValue = ::fayalite::enum_::DynEnum;
 | 
			
		||||
                type MaskType = ::fayalite::int::UIntType<1>;
 | 
			
		||||
                type MaskValue = ::fayalite::int::UInt<1>;
 | 
			
		||||
                type MatchVariant = #match_enum_ident #fixed_type_type_generics;
 | 
			
		||||
                type MatchVariant = #match_enum_ident #static_type_type_generics;
 | 
			
		||||
                type MatchActiveScope = ::fayalite::module::Scope;
 | 
			
		||||
                type MatchVariantAndInactiveScope =
 | 
			
		||||
                    ::fayalite::enum_::EnumMatchVariantAndInactiveScope<Self>;
 | 
			
		||||
| 
						 | 
				
			
			@ -871,9 +871,9 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            #[allow(clippy::init_numbered_fields)]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::enum_::EnumType
 | 
			
		||||
                for #type_struct_ident #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::enum_::EnumType
 | 
			
		||||
                for #type_struct_ident #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                type Builder = #empty_builder_ty;
 | 
			
		||||
                fn match_activate_scope(
 | 
			
		||||
| 
						 | 
				
			
			@ -907,13 +907,13 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::expr::ToExpr
 | 
			
		||||
                for #target #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::expr::ToExpr
 | 
			
		||||
                for #target #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                type Type = #type_struct_ident #fixed_type_type_generics;
 | 
			
		||||
                type Type = #type_struct_ident #static_type_type_generics;
 | 
			
		||||
                fn ty(&self) -> <Self as ::fayalite::expr::ToExpr>::Type {
 | 
			
		||||
                    ::fayalite::ty::FixedType::fixed_type()
 | 
			
		||||
                    ::fayalite::ty::StaticType::static_type()
 | 
			
		||||
                }
 | 
			
		||||
                fn to_expr(&self) -> ::fayalite::expr::Expr<Self> {
 | 
			
		||||
                    ::fayalite::expr::Expr::from_value(self)
 | 
			
		||||
| 
						 | 
				
			
			@ -921,9 +921,9 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::ty::Value
 | 
			
		||||
                for #target #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::ty::Value
 | 
			
		||||
                for #target #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
                fn to_canonical(&self) -> <
 | 
			
		||||
                        <Self as ::fayalite::expr::ToExpr>::Type
 | 
			
		||||
| 
						 | 
				
			
			@ -944,9 +944,9 @@ impl ToTokens for ParsedEnum {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            #[automatically_derived]
 | 
			
		||||
            impl #fixed_type_impl_generics ::fayalite::enum_::EnumValue
 | 
			
		||||
                for #target #fixed_type_type_generics
 | 
			
		||||
            #fixed_type_where_clause
 | 
			
		||||
            impl #static_type_impl_generics ::fayalite::enum_::EnumValue
 | 
			
		||||
                for #target #static_type_type_generics
 | 
			
		||||
            #static_type_where_clause
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ crate::options! {
 | 
			
		|||
    #[options = StructOptions]
 | 
			
		||||
    pub(crate) enum StructOption {
 | 
			
		||||
        OutlineGenerated(outline_generated),
 | 
			
		||||
        FixedType(fixed_type),
 | 
			
		||||
        Static(static_),
 | 
			
		||||
        ConnectInexact(connect_inexact),
 | 
			
		||||
        Bounds(where_, Bounds),
 | 
			
		||||
        Target(target, Path),
 | 
			
		||||
| 
						 | 
				
			
			@ -136,12 +136,12 @@ impl ParsedStruct {
 | 
			
		|||
            outline_generated: _,
 | 
			
		||||
            where_,
 | 
			
		||||
            target: _,
 | 
			
		||||
            fixed_type,
 | 
			
		||||
            static_,
 | 
			
		||||
            connect_inexact,
 | 
			
		||||
        } = &options.body;
 | 
			
		||||
        let ValueDeriveGenerics {
 | 
			
		||||
            generics,
 | 
			
		||||
            fixed_type_generics,
 | 
			
		||||
            static_type_generics,
 | 
			
		||||
        } = ValueDeriveGenerics::get(generics.clone(), where_);
 | 
			
		||||
        let (impl_generics, type_generics, where_clause) = generics.split_for_impl();
 | 
			
		||||
        let unskipped_fields = fields
 | 
			
		||||
| 
						 | 
				
			
			@ -373,16 +373,17 @@ impl ParsedStruct {
 | 
			
		|||
                __check_field(#check_v.#name);
 | 
			
		||||
            }
 | 
			
		||||
        }));
 | 
			
		||||
        if fixed_type.is_some() {
 | 
			
		||||
            let (impl_generics, type_generics, where_clause) = fixed_type_generics.split_for_impl();
 | 
			
		||||
        if static_.is_some() {
 | 
			
		||||
            let (impl_generics, type_generics, where_clause) =
 | 
			
		||||
                static_type_generics.split_for_impl();
 | 
			
		||||
            quote! {
 | 
			
		||||
                #[automatically_derived]
 | 
			
		||||
                impl #impl_generics ::fayalite::ty::FixedType for #type_struct_ident #type_generics
 | 
			
		||||
                impl #impl_generics ::fayalite::ty::StaticType for #type_struct_ident #type_generics
 | 
			
		||||
                #where_clause
 | 
			
		||||
                {
 | 
			
		||||
                    fn fixed_type() -> Self {
 | 
			
		||||
                    fn static_type() -> Self {
 | 
			
		||||
                        Self {
 | 
			
		||||
                            #(#unskipped_field_names: ::fayalite::ty::FixedType::fixed_type(),)*
 | 
			
		||||
                            #(#unskipped_field_names: ::fayalite::ty::StaticType::static_type(),)*
 | 
			
		||||
                            #(#phantom_data_field_name_slice:
 | 
			
		||||
                                ::fayalite::__std::marker::PhantomData,)*
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@
 | 
			
		|||
//! ```
 | 
			
		||||
//! # use fayalite::{hdl_module, int::UInt, array::Array, ty::Value};
 | 
			
		||||
//! #[derive(Value, Clone, PartialEq, Eq, Hash, Debug)]
 | 
			
		||||
//! #[hdl(fixed_type)]
 | 
			
		||||
//! #[hdl(static)]
 | 
			
		||||
//! pub struct MyStruct {
 | 
			
		||||
//!     pub a: UInt<8>,
 | 
			
		||||
//!     pub b: UInt<16>,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ use crate::{
 | 
			
		|||
    source_location::SourceLocation,
 | 
			
		||||
    ty::{
 | 
			
		||||
        CanonicalType, CanonicalTypeKind, CanonicalValue, Connect, DynCanonicalType,
 | 
			
		||||
        DynCanonicalValue, DynType, DynValueTrait, FixedType, MatchVariantWithoutScope, Type,
 | 
			
		||||
        DynCanonicalValue, DynType, DynValueTrait, MatchVariantWithoutScope, StaticType, Type,
 | 
			
		||||
        TypeEnum, Value, ValueEnum,
 | 
			
		||||
    },
 | 
			
		||||
    util::{ConstBool, GenericConstBool, MakeMutSlice},
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ pub trait ValueArrayOrSlice:
 | 
			
		|||
            LenType = Self::LenType,
 | 
			
		||||
            MaskVA = Self::MaskVA,
 | 
			
		||||
        > + ?Sized;
 | 
			
		||||
    type IsFixedLen: GenericConstBool;
 | 
			
		||||
    type IsStaticLen: GenericConstBool;
 | 
			
		||||
    const FIXED_LEN_TYPE: Option<Self::LenType>;
 | 
			
		||||
    fn make_match(array: Expr<Array<Self>>) -> Self::Match;
 | 
			
		||||
    fn len_from_len_type(v: Self::LenType) -> usize;
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ where
 | 
			
		|||
    type LenType = usize;
 | 
			
		||||
    type Match = Box<[Expr<V>]>;
 | 
			
		||||
    type MaskVA = [<Self::ElementType as Type>::MaskValue];
 | 
			
		||||
    type IsFixedLen = ConstBool<false>;
 | 
			
		||||
    type IsStaticLen = ConstBool<false>;
 | 
			
		||||
    const FIXED_LEN_TYPE: Option<Self::LenType> = None;
 | 
			
		||||
 | 
			
		||||
    fn make_match(array: Expr<Array<Self>>) -> Self::Match {
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +147,7 @@ where
 | 
			
		|||
    type LenType = ();
 | 
			
		||||
    type Match = [Expr<V>; N];
 | 
			
		||||
    type MaskVA = [<Self::ElementType as Type>::MaskValue; N];
 | 
			
		||||
    type IsFixedLen = ConstBool<true>;
 | 
			
		||||
    type IsStaticLen = ConstBool<true>;
 | 
			
		||||
    const FIXED_LEN_TYPE: Option<Self::LenType> = Some(());
 | 
			
		||||
 | 
			
		||||
    fn make_match(array: Expr<Array<Self>>) -> Self::Match {
 | 
			
		||||
| 
						 | 
				
			
			@ -311,12 +311,12 @@ where
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<V: Value, const N: usize> FixedType for ArrayType<[V; N]>
 | 
			
		||||
impl<V: Value, const N: usize> StaticType for ArrayType<[V; N]>
 | 
			
		||||
where
 | 
			
		||||
    V::Type: FixedType<Value = V>,
 | 
			
		||||
    V::Type: StaticType<Value = V>,
 | 
			
		||||
{
 | 
			
		||||
    fn fixed_type() -> Self {
 | 
			
		||||
        Self::new_array(FixedType::fixed_type())
 | 
			
		||||
    fn static_type() -> Self {
 | 
			
		||||
        Self::new_array(StaticType::static_type())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -514,18 +514,18 @@ impl<VA: ValueArrayOrSlice + ?Sized> Array<VA> {
 | 
			
		|||
 | 
			
		||||
impl<VA: ValueArrayOrSlice + ?Sized, T: Into<Arc<VA>>> From<T> for Array<VA>
 | 
			
		||||
where
 | 
			
		||||
    VA::ElementType: FixedType,
 | 
			
		||||
    VA::ElementType: StaticType,
 | 
			
		||||
{
 | 
			
		||||
    fn from(value: T) -> Self {
 | 
			
		||||
        Self::new(FixedType::fixed_type(), value.into())
 | 
			
		||||
        Self::new(StaticType::static_type(), value.into())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<E: ToExpr<Type = T>, T: FixedType> ToExpr for [E] {
 | 
			
		||||
impl<E: ToExpr<Type = T>, T: StaticType> ToExpr for [E] {
 | 
			
		||||
    type Type = ArrayType<[T::Value]>;
 | 
			
		||||
 | 
			
		||||
    fn ty(&self) -> Self::Type {
 | 
			
		||||
        ArrayType::new_with_len_type(FixedType::fixed_type(), self.len())
 | 
			
		||||
        ArrayType::new_with_len_type(StaticType::static_type(), self.len())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn to_expr(&self) -> Expr<<Self::Type as Type>::Value> {
 | 
			
		||||
| 
						 | 
				
			
			@ -536,7 +536,7 @@ impl<E: ToExpr<Type = T>, T: FixedType> ToExpr for [E] {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<E: ToExpr<Type = T>, T: FixedType> ToExpr for Vec<E> {
 | 
			
		||||
impl<E: ToExpr<Type = T>, T: StaticType> ToExpr for Vec<E> {
 | 
			
		||||
    type Type = ArrayType<[T::Value]>;
 | 
			
		||||
 | 
			
		||||
    fn ty(&self) -> Self::Type {
 | 
			
		||||
| 
						 | 
				
			
			@ -548,11 +548,11 @@ impl<E: ToExpr<Type = T>, T: FixedType> ToExpr for Vec<E> {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<E: ToExpr<Type = T>, T: FixedType, const N: usize> ToExpr for [E; N] {
 | 
			
		||||
impl<E: ToExpr<Type = T>, T: StaticType, const N: usize> ToExpr for [E; N] {
 | 
			
		||||
    type Type = ArrayType<[T::Value; N]>;
 | 
			
		||||
 | 
			
		||||
    fn ty(&self) -> Self::Type {
 | 
			
		||||
        ArrayType::new_with_len_type(FixedType::fixed_type(), ())
 | 
			
		||||
        ArrayType::new_with_len_type(StaticType::static_type(), ())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn to_expr(&self) -> Expr<<Self::Type as Type>::Value> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ use crate::{
 | 
			
		|||
    source_location::SourceLocation,
 | 
			
		||||
    ty::{
 | 
			
		||||
        CanonicalType, CanonicalTypeKind, CanonicalValue, Connect, DynCanonicalType,
 | 
			
		||||
        DynCanonicalValue, DynType, FixedType, MatchVariantWithoutScope, Type, TypeEnum,
 | 
			
		||||
        DynCanonicalValue, DynType, MatchVariantWithoutScope, StaticType, Type, TypeEnum,
 | 
			
		||||
        TypeWithDeref, Value, ValueEnum,
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -755,13 +755,13 @@ macro_rules! impl_tuple {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl<$($T: FixedType,)*> FixedType for ($($T,)*)
 | 
			
		||||
        impl<$($T: StaticType,)*> StaticType for ($($T,)*)
 | 
			
		||||
        where
 | 
			
		||||
            $($T::Value: Value<Type = $T>,)*
 | 
			
		||||
        {
 | 
			
		||||
            #[allow(clippy::unused_unit)]
 | 
			
		||||
            fn fixed_type() -> Self {
 | 
			
		||||
                ($($T::fixed_type(),)*)
 | 
			
		||||
            fn static_type() -> Self {
 | 
			
		||||
                ($($T::static_type(),)*)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ use crate::{
 | 
			
		|||
    source_location::SourceLocation,
 | 
			
		||||
    ty::{
 | 
			
		||||
        impl_match_values_as_self, CanonicalType, CanonicalTypeKind, CanonicalValue, Connect,
 | 
			
		||||
        DynCanonicalType, FixedType, Type, TypeEnum, Value, ValueEnum,
 | 
			
		||||
        DynCanonicalType, StaticType, Type, TypeEnum, Value, ValueEnum,
 | 
			
		||||
    },
 | 
			
		||||
    util::interned_bit,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -63,8 +63,8 @@ impl CanonicalType for ClockType {
 | 
			
		|||
    const CANONICAL_TYPE_KIND: CanonicalTypeKind = CanonicalTypeKind::Clock;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl FixedType for ClockType {
 | 
			
		||||
    fn fixed_type() -> Self {
 | 
			
		||||
impl StaticType for ClockType {
 | 
			
		||||
    fn static_type() -> Self {
 | 
			
		||||
        Self
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +103,7 @@ impl CanonicalValue for Clock {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Value)]
 | 
			
		||||
#[hdl(fixed_type, outline_generated)]
 | 
			
		||||
#[hdl(static, outline_generated)]
 | 
			
		||||
pub struct ClockDomain {
 | 
			
		||||
    pub clk: Clock,
 | 
			
		||||
    pub rst: Reset,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ use crate::{
 | 
			
		|||
    array::ArrayType,
 | 
			
		||||
    bundle::{BundleType, BundleValue, DynBundle, DynBundleType, FieldType},
 | 
			
		||||
    enum_::{DynEnumType, EnumType, EnumValue},
 | 
			
		||||
    int::{DynSIntType, DynUInt, DynUIntType, FixedOrDynIntType, IntValue, UInt, UIntType},
 | 
			
		||||
    int::{DynSIntType, DynUInt, DynUIntType, IntValue, StaticOrDynIntType, UInt, UIntType},
 | 
			
		||||
    intern::{Intern, Interned, InternedCompare, PtrEqWithTypeId, SupportsPtrEqWithTypeId},
 | 
			
		||||
    memory::{DynPortType, MemPort, PortType},
 | 
			
		||||
    module::{
 | 
			
		||||
| 
						 | 
				
			
			@ -288,7 +288,7 @@ impl<T> Hash for Expr<T> {
 | 
			
		|||
 | 
			
		||||
impl<T> Expr<IntValue<T>>
 | 
			
		||||
where
 | 
			
		||||
    T: FixedOrDynIntType<
 | 
			
		||||
    T: StaticOrDynIntType<
 | 
			
		||||
        1,
 | 
			
		||||
        Signed = ConstBool<false>,
 | 
			
		||||
        CanonicalType = DynUIntType,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ use crate::{
 | 
			
		|||
        TargetPathDynArrayElement, TargetPathElement, ToExpr,
 | 
			
		||||
    },
 | 
			
		||||
    int::{
 | 
			
		||||
        DynInt, DynIntType, DynSInt, DynSIntType, DynUInt, DynUIntType, FixedOrDynIntType, Int,
 | 
			
		||||
        DynInt, DynIntType, DynSInt, DynSIntType, DynUInt, DynUIntType, StaticOrDynIntType, Int,
 | 
			
		||||
        IntCmp, IntType, IntTypeTrait, IntValue, UInt, UIntType,
 | 
			
		||||
    },
 | 
			
		||||
    intern::{Intern, Interned},
 | 
			
		||||
| 
						 | 
				
			
			@ -726,7 +726,7 @@ macro_rules! cmp_op {
 | 
			
		|||
                    CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>,
 | 
			
		||||
                    CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>,
 | 
			
		||||
                >,
 | 
			
		||||
                Output: FixedOrDynIntType<
 | 
			
		||||
                Output: StaticOrDynIntType<
 | 
			
		||||
                    1,
 | 
			
		||||
                    Signed = ConstBool<false>,
 | 
			
		||||
                    CanonicalType = DynUIntType,
 | 
			
		||||
| 
						 | 
				
			
			@ -737,7 +737,7 @@ macro_rules! cmp_op {
 | 
			
		|||
                pub lhs: Expr<LhsType::CanonicalValue>,
 | 
			
		||||
                pub rhs: Expr<RhsType::CanonicalValue>,
 | 
			
		||||
                #[type]
 | 
			
		||||
                ty: Output = FixedOrDynIntType::new(),
 | 
			
		||||
                ty: Output = StaticOrDynIntType::new(),
 | 
			
		||||
                #[cache]
 | 
			
		||||
                literal_bits: Result<Interned<BitSlice>, ()> = {
 | 
			
		||||
                    lhs.to_literal_bits()
 | 
			
		||||
| 
						 | 
				
			
			@ -1098,7 +1098,7 @@ macro_rules! reduce_bit_op {
 | 
			
		|||
        fixed_ary_op! {
 | 
			
		||||
            pub struct $name<Output,>
 | 
			
		||||
            where (
 | 
			
		||||
                Output: FixedOrDynIntType<
 | 
			
		||||
                Output: StaticOrDynIntType<
 | 
			
		||||
                    1,
 | 
			
		||||
                    Signed = ConstBool<false>,
 | 
			
		||||
                    CanonicalType = DynUIntType,
 | 
			
		||||
| 
						 | 
				
			
			@ -1108,7 +1108,7 @@ macro_rules! reduce_bit_op {
 | 
			
		|||
            {
 | 
			
		||||
                pub arg: Expr<DynUInt>,
 | 
			
		||||
                #[type]
 | 
			
		||||
                ty: Output = FixedOrDynIntType::new(),
 | 
			
		||||
                ty: Output = StaticOrDynIntType::new(),
 | 
			
		||||
                #[cache]
 | 
			
		||||
                literal_bits: Result<Interned<BitSlice>, ()> = {
 | 
			
		||||
                    arg.to_literal_bits().map(|$bits| interned_bit($literal_bits_bool))
 | 
			
		||||
| 
						 | 
				
			
			@ -1503,7 +1503,7 @@ where
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastClockToBit<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; ClockType => ToType);
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastClockToBit<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; ClockType => ToType);
 | 
			
		||||
 | 
			
		||||
impl ToBit for Clock {
 | 
			
		||||
    fn to_bit(v: Expr<Self>) -> Expr<UInt<1>> {
 | 
			
		||||
| 
						 | 
				
			
			@ -1511,7 +1511,7 @@ impl ToBit for Clock {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastSyncResetToBit<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; SyncResetType => ToType);
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastSyncResetToBit<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; SyncResetType => ToType);
 | 
			
		||||
 | 
			
		||||
impl ToBit for SyncReset {
 | 
			
		||||
    fn to_bit(v: Expr<Self>) -> Expr<UInt<1>> {
 | 
			
		||||
| 
						 | 
				
			
			@ -1519,7 +1519,7 @@ impl ToBit for SyncReset {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastAsyncResetToBit<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; AsyncResetType => ToType);
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastAsyncResetToBit<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; AsyncResetType => ToType);
 | 
			
		||||
 | 
			
		||||
impl ToBit for AsyncReset {
 | 
			
		||||
    fn to_bit(v: Expr<Self>) -> Expr<UInt<1>> {
 | 
			
		||||
| 
						 | 
				
			
			@ -1527,7 +1527,7 @@ impl ToBit for AsyncReset {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastResetToBit<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; ResetType => ToType);
 | 
			
		||||
cast_bit_to_typed_bit!(pub struct CastResetToBit<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>; ResetType => ToType);
 | 
			
		||||
 | 
			
		||||
impl ToBit for Reset {
 | 
			
		||||
    fn to_bit(v: Expr<Self>) -> Expr<UInt<1>> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@ use crate::{
 | 
			
		|||
    source_location::SourceLocation,
 | 
			
		||||
    ty::{
 | 
			
		||||
        impl_match_values_as_self, CanonicalType, CanonicalTypeKind, CanonicalValue, Connect,
 | 
			
		||||
        DynCanonicalType, FixedType, Type, TypeEnum, Value, ValueEnum,
 | 
			
		||||
        DynCanonicalType, StaticType, Type, TypeEnum, Value, ValueEnum,
 | 
			
		||||
    },
 | 
			
		||||
    util::{ConstBool, GenericConstBool},
 | 
			
		||||
    valueless::Valueless,
 | 
			
		||||
| 
						 | 
				
			
			@ -825,7 +825,7 @@ impl_int!(i64, true);
 | 
			
		|||
impl_int!(i128, true);
 | 
			
		||||
 | 
			
		||||
impl<
 | 
			
		||||
        T: FixedOrDynIntType<
 | 
			
		||||
        T: StaticOrDynIntType<
 | 
			
		||||
            1,
 | 
			
		||||
            Signed = ConstBool<false>,
 | 
			
		||||
            CanonicalType = DynUIntType,
 | 
			
		||||
| 
						 | 
				
			
			@ -1000,7 +1000,7 @@ pub trait IntTypeTrait:
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub trait FixedOrDynIntType<const WIDTH: usize>: IntTypeTrait {
 | 
			
		||||
pub trait StaticOrDynIntType<const WIDTH: usize>: IntTypeTrait {
 | 
			
		||||
    fn new() -> Self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1203,7 +1203,7 @@ impl<Signed: GenericConstBool> IntTypeTrait for DynIntType<Signed> {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Signed: GenericConstBool, const WIDTH: usize> FixedOrDynIntType<WIDTH> for DynIntType<Signed> {
 | 
			
		||||
impl<Signed: GenericConstBool, const WIDTH: usize> StaticOrDynIntType<WIDTH> for DynIntType<Signed> {
 | 
			
		||||
    fn new() -> Self {
 | 
			
		||||
        DynIntType::new(WIDTH)
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -1264,8 +1264,8 @@ impl<Signed: GenericConstBool, const WIDTH: usize> Type for IntType<Signed, WIDT
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Signed: GenericConstBool, const WIDTH: usize> FixedType for IntType<Signed, WIDTH> {
 | 
			
		||||
    fn fixed_type() -> Self {
 | 
			
		||||
impl<Signed: GenericConstBool, const WIDTH: usize> StaticType for IntType<Signed, WIDTH> {
 | 
			
		||||
    fn static_type() -> Self {
 | 
			
		||||
        Self::new()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1292,7 +1292,7 @@ impl<Signed: GenericConstBool, const WIDTH: usize> IntTypeTrait for IntType<Sign
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Signed: GenericConstBool, const WIDTH: usize> FixedOrDynIntType<WIDTH>
 | 
			
		||||
impl<Signed: GenericConstBool, const WIDTH: usize> StaticOrDynIntType<WIDTH>
 | 
			
		||||
    for IntType<Signed, WIDTH>
 | 
			
		||||
{
 | 
			
		||||
    fn new() -> Self {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,13 +11,13 @@ use crate::{
 | 
			
		|||
        ops::VariantAccess, Expr, Flow, Target, TargetBase, TargetPathArrayElement,
 | 
			
		||||
        TargetPathBundleField, TargetPathElement, ToExpr,
 | 
			
		||||
    },
 | 
			
		||||
    int::{DynUInt, DynUIntType, FixedOrDynIntType, IntValue, UInt},
 | 
			
		||||
    int::{DynUInt, DynUIntType, IntValue, StaticOrDynIntType, UInt},
 | 
			
		||||
    intern::{Intern, Interned},
 | 
			
		||||
    memory::{Mem, MemBuilder, MemBuilderTarget, PortName},
 | 
			
		||||
    reg::Reg,
 | 
			
		||||
    source_location::SourceLocation,
 | 
			
		||||
    ty::{
 | 
			
		||||
        CanonicalType, Connect, DynCanonicalType, DynCanonicalValue, DynType, FixedType, Type,
 | 
			
		||||
        CanonicalType, Connect, DynCanonicalType, DynCanonicalValue, DynType, StaticType, Type,
 | 
			
		||||
        TypeEnum, Value,
 | 
			
		||||
    },
 | 
			
		||||
    util::ConstBool,
 | 
			
		||||
| 
						 | 
				
			
			@ -1829,7 +1829,7 @@ impl<'a, CD> RegBuilder<'a, CD, (), ()> {
 | 
			
		|||
    }
 | 
			
		||||
    pub fn reset_default<V: Value + Default>(self) -> RegBuilder<'a, CD, Option<Expr<V>>, V>
 | 
			
		||||
    where
 | 
			
		||||
        V::Type: FixedType<Value = V>,
 | 
			
		||||
        V::Type: StaticType<Value = V>,
 | 
			
		||||
    {
 | 
			
		||||
        self.reset(V::default().to_expr())
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -2264,7 +2264,7 @@ where
 | 
			
		|||
    #[track_caller]
 | 
			
		||||
    pub fn if_<Ty>(&mut self, cond: Expr<IntValue<Ty>>) -> IfScope
 | 
			
		||||
    where
 | 
			
		||||
        Ty: FixedOrDynIntType<
 | 
			
		||||
        Ty: StaticOrDynIntType<
 | 
			
		||||
            1,
 | 
			
		||||
            Signed = ConstBool<false>,
 | 
			
		||||
            CanonicalType = DynUIntType,
 | 
			
		||||
| 
						 | 
				
			
			@ -2279,7 +2279,7 @@ where
 | 
			
		|||
        source_location: SourceLocation,
 | 
			
		||||
    ) -> IfScope
 | 
			
		||||
    where
 | 
			
		||||
        Ty: FixedOrDynIntType<
 | 
			
		||||
        Ty: StaticOrDynIntType<
 | 
			
		||||
            1,
 | 
			
		||||
            Signed = ConstBool<false>,
 | 
			
		||||
            CanonicalType = DynUIntType,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ use crate::{
 | 
			
		|||
        TargetPathBundleField, TargetPathDynArrayElement, TargetPathElement, ToExpr,
 | 
			
		||||
    },
 | 
			
		||||
    int::{
 | 
			
		||||
        DynInt, DynIntType, DynSInt, DynSIntType, DynUInt, DynUIntType, FixedOrDynIntType, IntType,
 | 
			
		||||
        DynInt, DynIntType, DynSInt, DynSIntType, DynUInt, DynUIntType, StaticOrDynIntType, IntType,
 | 
			
		||||
        IntTypeTrait,
 | 
			
		||||
    },
 | 
			
		||||
    intern::{Intern, Interned},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,13 +7,13 @@ use crate::{
 | 
			
		|||
    source_location::SourceLocation,
 | 
			
		||||
    ty::{
 | 
			
		||||
        impl_match_values_as_self, CanonicalType, CanonicalTypeKind, CanonicalValue, Connect,
 | 
			
		||||
        DynCanonicalType, FixedType, Type, TypeEnum, Value, ValueEnum,
 | 
			
		||||
        DynCanonicalType, StaticType, Type, TypeEnum, Value, ValueEnum,
 | 
			
		||||
    },
 | 
			
		||||
    util::interned_bit,
 | 
			
		||||
};
 | 
			
		||||
use bitvec::slice::BitSlice;
 | 
			
		||||
 | 
			
		||||
pub trait ResetTypeTrait: CanonicalType + FixedType {}
 | 
			
		||||
pub trait ResetTypeTrait: CanonicalType + StaticType {}
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]
 | 
			
		||||
pub struct AsyncResetType;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,8 +64,8 @@ impl CanonicalType for AsyncResetType {
 | 
			
		|||
    const CANONICAL_TYPE_KIND: CanonicalTypeKind = CanonicalTypeKind::AsyncReset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl FixedType for AsyncResetType {
 | 
			
		||||
    fn fixed_type() -> Self {
 | 
			
		||||
impl StaticType for AsyncResetType {
 | 
			
		||||
    fn static_type() -> Self {
 | 
			
		||||
        Self
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -154,8 +154,8 @@ impl CanonicalType for SyncResetType {
 | 
			
		|||
    const CANONICAL_TYPE_KIND: CanonicalTypeKind = CanonicalTypeKind::SyncReset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl FixedType for SyncResetType {
 | 
			
		||||
    fn fixed_type() -> Self {
 | 
			
		||||
impl StaticType for SyncResetType {
 | 
			
		||||
    fn static_type() -> Self {
 | 
			
		||||
        Self
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -244,8 +244,8 @@ impl CanonicalType for ResetType {
 | 
			
		|||
    const CANONICAL_TYPE_KIND: CanonicalTypeKind = CanonicalTypeKind::Reset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl FixedType for ResetType {
 | 
			
		||||
    fn fixed_type() -> Self {
 | 
			
		||||
impl StaticType for ResetType {
 | 
			
		||||
    fn static_type() -> Self {
 | 
			
		||||
        Self
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -625,8 +625,8 @@ pub trait CanonicalType:
 | 
			
		|||
 | 
			
		||||
impl<T: CanonicalType> DynCanonicalType for T {}
 | 
			
		||||
 | 
			
		||||
pub trait FixedType: Type {
 | 
			
		||||
    fn fixed_type() -> Self;
 | 
			
		||||
pub trait StaticType: Type {
 | 
			
		||||
    fn static_type() -> Self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub trait DynValueTrait: fmt::Debug + Send + Sync + Any {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ use fayalite::{
 | 
			
		|||
    module::transform::simplify_enums::{simplify_enums, SimplifyEnumsKind},
 | 
			
		||||
    reset::{SyncReset, ToReset},
 | 
			
		||||
    source_location::SourceLocation,
 | 
			
		||||
    ty::{FixedType, Value},
 | 
			
		||||
    ty::{StaticType, Value},
 | 
			
		||||
};
 | 
			
		||||
use serde_json::json;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ circuit check_array_repeat_1:
 | 
			
		|||
#[hdl_module(outline_generated)]
 | 
			
		||||
pub fn check_skipped_generics<T, #[hdl(skip)] U, const N: usize, #[hdl(skip)] const M: usize>(v: U)
 | 
			
		||||
where
 | 
			
		||||
    T: Value<Type: FixedType<Value = T>>,
 | 
			
		||||
    T: Value<Type: StaticType<Value = T>>,
 | 
			
		||||
    U: std::fmt::Display,
 | 
			
		||||
{
 | 
			
		||||
    dbg!(M);
 | 
			
		||||
| 
						 | 
				
			
			@ -377,18 +377,18 @@ circuit check_written_inside_both_if_else:
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Value, Clone, PartialEq, Eq, Hash, Debug)]
 | 
			
		||||
#[hdl(fixed_type, outline_generated)]
 | 
			
		||||
#[hdl(static, outline_generated)]
 | 
			
		||||
pub struct TestStruct<T> {
 | 
			
		||||
    pub a: T,
 | 
			
		||||
    pub b: UInt<8>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Value, Clone, PartialEq, Eq, Hash, Debug)]
 | 
			
		||||
#[hdl(fixed_type, outline_generated)]
 | 
			
		||||
#[hdl(static, outline_generated)]
 | 
			
		||||
pub struct TestStruct2(pub UInt<8>);
 | 
			
		||||
 | 
			
		||||
#[derive(Value, Clone, PartialEq, Eq, Hash, Debug)]
 | 
			
		||||
#[hdl(fixed_type, outline_generated)]
 | 
			
		||||
#[hdl(static, outline_generated)]
 | 
			
		||||
pub struct TestStruct3;
 | 
			
		||||
 | 
			
		||||
#[hdl_module(outline_generated)]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -501,7 +501,7 @@
 | 
			
		|||
                "lhs": "Visible",
 | 
			
		||||
                "rhs": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CmpLe": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -510,7 +510,7 @@
 | 
			
		|||
                "lhs": "Visible",
 | 
			
		||||
                "rhs": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CmpGt": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -519,7 +519,7 @@
 | 
			
		|||
                "lhs": "Visible",
 | 
			
		||||
                "rhs": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CmpGe": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -528,7 +528,7 @@
 | 
			
		|||
                "lhs": "Visible",
 | 
			
		||||
                "rhs": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CmpEq": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -537,7 +537,7 @@
 | 
			
		|||
                "lhs": "Visible",
 | 
			
		||||
                "rhs": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CmpNe": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -546,7 +546,7 @@
 | 
			
		|||
                "lhs": "Visible",
 | 
			
		||||
                "rhs": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<LhsType: IntTypeTrait<CanonicalType = DynIntType<<LhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<LhsType as IntTypeTrait>::Signed>>, RhsType: IntTypeTrait<Signed = LhsType::Signed, CanonicalType = DynIntType<<RhsType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<RhsType as IntTypeTrait>::Signed>>, Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CastInt": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -574,7 +574,7 @@
 | 
			
		|||
                "$constructor": "ops::ReduceBitAnd::new_unchecked",
 | 
			
		||||
                "arg": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::ReduceBitOr": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -582,7 +582,7 @@
 | 
			
		|||
                "$constructor": "ops::ReduceBitOr::new_unchecked",
 | 
			
		||||
                "arg": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::ReduceBitXor": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -590,7 +590,7 @@
 | 
			
		|||
                "$constructor": "ops::ReduceBitXor::new_unchecked",
 | 
			
		||||
                "arg": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<Output: FixedOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
            "generics": "<Output: StaticOrDynIntType<1, Signed = ConstBool<false>, CanonicalType = DynUIntType, CanonicalValue = DynUInt>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::FieldAccess": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -696,7 +696,7 @@
 | 
			
		|||
                "$constructor": "ops::CastClockToBit::new_unchecked",
 | 
			
		||||
                "value": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
            "generics": "<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CastSyncResetToBit": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -704,7 +704,7 @@
 | 
			
		|||
                "$constructor": "ops::CastSyncResetToBit::new_unchecked",
 | 
			
		||||
                "value": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
            "generics": "<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CastAsyncResetToBit": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -712,7 +712,7 @@
 | 
			
		|||
                "$constructor": "ops::CastAsyncResetToBit::new_unchecked",
 | 
			
		||||
                "value": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
            "generics": "<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
        },
 | 
			
		||||
        "ops::CastResetToBit": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			@ -720,7 +720,7 @@
 | 
			
		|||
                "$constructor": "ops::CastResetToBit::new_unchecked",
 | 
			
		||||
                "value": "Visible"
 | 
			
		||||
            },
 | 
			
		||||
            "generics": "<ToType: FixedOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
            "generics": "<ToType: StaticOrDynIntType<1, CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>, CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>>>"
 | 
			
		||||
        },
 | 
			
		||||
        "BlockId": {
 | 
			
		||||
            "data": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue