forked from libre-chip/fayalite
		
	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