You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: rust/ruby-prism/src/lib.rs
+40-1
Original file line number
Diff line number
Diff line change
@@ -250,6 +250,24 @@ impl<'pr> Integer<'pr> {
250
250
fnnew(pointer:*constpm_integer_t) -> Self{
251
251
Integer{ pointer,marker:PhantomData}
252
252
}
253
+
254
+
/// Returns the sign and the u32 digits representation of the integer,
255
+
/// ordered least significant digit first.
256
+
#[must_use]
257
+
pubfnto_u32_digits(&self) -> (bool,&[u32]){
258
+
let negative = unsafe{(*self.pointer).negative};
259
+
let length = unsafe{(*self.pointer).length};
260
+
let values = unsafe{(*self.pointer).values};
261
+
262
+
if values.is_null(){
263
+
let value_ptr = unsafe{ std::ptr::addr_of!((*self.pointer).value)};
264
+
let slice = unsafe{ std::slice::from_raw_parts(value_ptr,1)};
265
+
(negative, slice)
266
+
}else{
267
+
let slice = unsafe{ std::slice::from_raw_parts(values, length)};
268
+
(negative, slice)
269
+
}
270
+
}
253
271
}
254
272
255
273
impl std::fmt::DebugforInteger<'_>{
@@ -1144,11 +1162,32 @@ end
1144
1162
#[test]
1145
1163
fninteger_value_test(){
1146
1164
let result = parse("0xA".as_ref());
1147
-
let value:i32 = result.node().as_program_node().unwrap().statements().body().iter().next().unwrap().as_integer_node().unwrap().value().try_into().unwrap();
1165
+
let integer = result.node().as_program_node().unwrap().statements().body().iter().next().unwrap().as_integer_node().unwrap().value();
1166
+
let value:i32 = integer.try_into().unwrap();
1148
1167
1149
1168
assert_eq!(value,10);
1150
1169
}
1151
1170
1171
+
#[test]
1172
+
fninteger_small_value_to_u32_digits_test(){
1173
+
let result = parse("0xA".as_ref());
1174
+
let integer = result.node().as_program_node().unwrap().statements().body().iter().next().unwrap().as_integer_node().unwrap().value();
1175
+
let(negative, digits) = integer.to_u32_digits();
1176
+
1177
+
assert!(!negative);
1178
+
assert_eq!(digits,&[10]);
1179
+
}
1180
+
1181
+
#[test]
1182
+
fninteger_large_value_to_u32_digits_test(){
1183
+
let result = parse("0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".as_ref());
1184
+
let integer = result.node().as_program_node().unwrap().statements().body().iter().next().unwrap().as_integer_node().unwrap().value();
0 commit comments