split <int>.cast() into cast_as_type and cast to be more useful when casting to deduced fixed types
This commit is contained in:
		
							parent
							
								
									af95bb2f58
								
							
						
					
					
						commit
						dba883e300
					
				
					 2 changed files with 15 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -11,7 +11,7 @@ use crate::{
 | 
			
		|||
    },
 | 
			
		||||
    int::{
 | 
			
		||||
        DynInt, DynIntType, DynSInt, DynSIntType, DynUInt, DynUIntType, FixedOrDynIntType, Int,
 | 
			
		||||
        IntCmp, IntTypeTrait, IntValue, UInt, UIntType,
 | 
			
		||||
        IntCmp, IntType, IntTypeTrait, IntValue, UInt, UIntType,
 | 
			
		||||
    },
 | 
			
		||||
    intern::{Intern, Interned},
 | 
			
		||||
    reset::{
 | 
			
		||||
| 
						 | 
				
			
			@ -888,7 +888,7 @@ fixed_ary_op! {
 | 
			
		|||
        },
 | 
			
		||||
 | 
			
		||||
        fn simulate(&self, sim_state: &mut SimState) -> _ {
 | 
			
		||||
            self.value.simulate(sim_state).cast(self.ty.canonical())
 | 
			
		||||
            self.value.simulate(sim_state).cast_as_type(self.ty.canonical())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fn expr_enum(&self) -> _ {
 | 
			
		||||
| 
						 | 
				
			
			@ -935,7 +935,7 @@ impl<
 | 
			
		|||
        >,
 | 
			
		||||
    > Expr<IntValue<FromType>>
 | 
			
		||||
{
 | 
			
		||||
    pub fn cast<
 | 
			
		||||
    pub fn cast_as_type<
 | 
			
		||||
        ToType: IntTypeTrait<
 | 
			
		||||
            CanonicalType = DynIntType<<ToType as IntTypeTrait>::Signed>,
 | 
			
		||||
            CanonicalValue = DynInt<<ToType as IntTypeTrait>::Signed>,
 | 
			
		||||
| 
						 | 
				
			
			@ -946,17 +946,20 @@ impl<
 | 
			
		|||
    ) -> Expr<ToType::Value> {
 | 
			
		||||
        CastInt::<FromType, ToType>::new_unchecked(self.canonical(), ty).to_expr()
 | 
			
		||||
    }
 | 
			
		||||
    pub fn cast<Signed: GenericConstBool, const WIDTH: usize>(self) -> Expr<Int<Signed, WIDTH>> {
 | 
			
		||||
        self.cast_as_type(IntType::new())
 | 
			
		||||
    }
 | 
			
		||||
    pub fn as_same_width_uint(self) -> Expr<IntValue<FromType::SameWidthUInt>> {
 | 
			
		||||
        self.cast(self.ty().as_same_width_uint())
 | 
			
		||||
        self.cast_as_type(self.ty().as_same_width_uint())
 | 
			
		||||
    }
 | 
			
		||||
    pub fn as_same_width_sint(self) -> Expr<IntValue<FromType::SameWidthSInt>> {
 | 
			
		||||
        self.cast(self.ty().as_same_width_sint())
 | 
			
		||||
        self.cast_as_type(self.ty().as_same_width_sint())
 | 
			
		||||
    }
 | 
			
		||||
    pub fn as_same_value_uint(self) -> Expr<DynUInt> {
 | 
			
		||||
        self.cast(self.ty().as_same_value_uint())
 | 
			
		||||
        self.cast_as_type(self.ty().as_same_value_uint())
 | 
			
		||||
    }
 | 
			
		||||
    pub fn as_same_value_sint(self) -> Expr<DynSInt> {
 | 
			
		||||
        self.cast(self.ty().as_same_value_sint())
 | 
			
		||||
        self.cast_as_type(self.ty().as_same_value_sint())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1020,7 +1023,7 @@ impl<
 | 
			
		|||
            return false.to_expr();
 | 
			
		||||
        }
 | 
			
		||||
        let index = index.min(width - 1);
 | 
			
		||||
        self.slice(index..=index).cast(UIntType::new())
 | 
			
		||||
        self.slice(index..=index).cast()
 | 
			
		||||
    }
 | 
			
		||||
    pub fn is_negative(self) -> Expr<UInt<1>> {
 | 
			
		||||
        if T::Signed::VALUE {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -211,7 +211,7 @@ impl<
 | 
			
		|||
            IntValue::with_type(new_type, self.into_uint_value())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    pub fn cast<
 | 
			
		||||
    pub fn cast_as_type<
 | 
			
		||||
        NewType: IntTypeTrait<
 | 
			
		||||
            CanonicalType = DynIntType<<NewType as IntTypeTrait>::Signed>,
 | 
			
		||||
            CanonicalValue = DynInt<<NewType as IntTypeTrait>::Signed>,
 | 
			
		||||
| 
						 | 
				
			
			@ -226,6 +226,9 @@ impl<
 | 
			
		|||
            IntValue::with_type(new_type, self.uint_value())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    pub fn cast<Signed: GenericConstBool, const WIDTH: usize>(self) -> Int<Signed, WIDTH> {
 | 
			
		||||
        self.cast_as_type(IntType::new())
 | 
			
		||||
    }
 | 
			
		||||
    pub fn as_same_width_uint(self) -> IntValue<T::SameWidthUInt> {
 | 
			
		||||
        IntValue {
 | 
			
		||||
            ty: self.ty.as_same_width_uint(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue