@@ -2362,6 +2362,17 @@ extern "C" LEAN_EXPORT obj_res lean_string_of_usize(size_t n) {
23622362 return mk_ascii_string_unchecked (std::to_string (n));
23632363}
23642364
2365+ extern " C" LEAN_EXPORT uint8_t lean_string_memcmp (b_obj_arg s1, b_obj_arg s2, b_obj_arg lstart, b_obj_arg rstart, b_obj_arg len) {
2366+ // Thanks to the proof arguments we know that lstart, rstart and len are all scalars.
2367+ lean_assert (lean_is_scalar (lstart));
2368+ lean_assert (lean_is_scalar (rstart));
2369+ lean_assert (lean_is_scalar (len));
2370+
2371+ char const * lbase = lean_string_cstr (s1) + lean_unbox (lstart);
2372+ char const * rbase = lean_string_cstr (s2) + lean_unbox (rstart);
2373+ return std::memcmp (lbase, rbase, lean_unbox (len)) == 0 ;
2374+ }
2375+
23652376size_t lean_slice_size (b_obj_arg slice) {
23662377 b_obj_res start = lean_ctor_get (slice, 1 );
23672378 lean_assert (lean_is_scalar (start));
@@ -2377,17 +2388,6 @@ char const * lean_slice_base(b_obj_arg slice) {
23772388 return lean_string_cstr (string) + lean_unbox (offset);
23782389}
23792390
2380- extern " C" LEAN_EXPORT uint8_t lean_slice_memcmp (b_obj_arg s1, b_obj_arg s2, b_obj_arg lstart, b_obj_arg rstart, b_obj_arg len) {
2381- // Thanks to the proof arguments we know that lstart, rstart and len are all scalars.
2382- lean_assert (lean_is_scalar (lstart));
2383- lean_assert (lean_is_scalar (rstart));
2384- lean_assert (lean_is_scalar (len));
2385-
2386- char const * lbase = lean_slice_base (s1) + lean_unbox (lstart);
2387- char const * rbase = lean_slice_base (s2) + lean_unbox (rstart);
2388- return std::memcmp (lbase, rbase, lean_unbox (len)) == 0 ;
2389- }
2390-
23912391extern " C" LEAN_EXPORT uint64_t lean_slice_hash (b_obj_arg s) {
23922392 size_t sz = lean_slice_size (s);
23932393 char const * str = lean_slice_base (s);
0 commit comments