@@ -120,62 +120,44 @@ macro_rules! newtype_index {
120120 impl $type {
121121 $v const MAX_AS_U32 : u32 = $max;
122122
123- $v const MAX : Self = Self :: from_u32_const ( $max) ;
123+ $v const MAX : Self = Self :: from_u32 ( $max) ;
124124
125125 #[ inline]
126- $v fn from_usize( value: usize ) -> Self {
126+ $v const fn from_usize( value: usize ) -> Self {
127127 assert!( value <= ( $max as usize ) ) ;
128128 unsafe {
129129 Self :: from_u32_unchecked( value as u32 )
130130 }
131131 }
132132
133133 #[ inline]
134- $v fn from_u32( value: u32 ) -> Self {
134+ $v const fn from_u32( value: u32 ) -> Self {
135135 assert!( value <= $max) ;
136136 unsafe {
137137 Self :: from_u32_unchecked( value)
138138 }
139139 }
140140
141- /// Hacky variant of `from_u32` for use in constants.
142- /// This version checks the "max" constraint by using an
143- /// invalid array dereference.
144- #[ inline]
145- $v const fn from_u32_const( value: u32 ) -> Self {
146- // This will fail at const eval time unless `value <=
147- // max` is true (in which case we get the index 0).
148- // It will also fail at runtime, of course, but in a
149- // kind of wacky way.
150- let _ = [ "out of range value used" ] [
151- !( value <= $max) as usize
152- ] ;
153-
154- unsafe {
155- Self { private: value }
156- }
157- }
158-
159141 #[ inline]
160142 $v const unsafe fn from_u32_unchecked( value: u32 ) -> Self {
161143 Self { private: value }
162144 }
163145
164146 /// Extracts the value of this index as an integer.
165147 #[ inline]
166- $v fn index( self ) -> usize {
148+ $v const fn index( self ) -> usize {
167149 self . as_usize( )
168150 }
169151
170152 /// Extracts the value of this index as a `u32`.
171153 #[ inline]
172- $v fn as_u32( self ) -> u32 {
154+ $v const fn as_u32( self ) -> u32 {
173155 self . private
174156 }
175157
176158 /// Extracts the value of this index as a `usize`.
177159 #[ inline]
178- $v fn as_usize( self ) -> usize {
160+ $v const fn as_usize( self ) -> usize {
179161 self . as_u32( ) as usize
180162 }
181163 }
@@ -500,7 +482,7 @@ macro_rules! newtype_index {
500482 const $name: ident = $constant: expr,
501483 $( $tokens: tt) * ) => (
502484 $( #[ doc = $doc] ) *
503- $v const $name: $type = $type:: from_u32_const ( $constant) ;
485+ $v const $name: $type = $type:: from_u32 ( $constant) ;
504486 $crate:: newtype_index!(
505487 @derives [ $( $derives, ) * ]
506488 @attrs [ $( #[ $attrs] ) * ]
0 commit comments