Fix PyStr::startswith

This commit is contained in:
Moreal
2021-09-29 01:13:08 +09:00
parent e1d56f76dd
commit 76ceb59b2b
3 changed files with 11 additions and 3 deletions

View File

@@ -145,7 +145,7 @@ pub trait AnyStr<'s>: 's {
// FIXME: get_chars is expensive for str
fn get_chars(&self, range: std::ops::Range<usize>) -> &Self;
fn bytes_len(&self) -> usize;
// fn chars_len(&self) -> usize; // cannot access to cache here
fn chars_len(&self) -> usize; // cannot access to cache here
fn is_empty(&self) -> bool;
fn py_add(&self, other: &Self) -> Self::Container {
@@ -201,11 +201,11 @@ pub trait AnyStr<'s>: 's {
T: TryFromObject,
F: Fn(&Self, &T) -> bool,
{
let (affix, range) = args.get_value(self.bytes_len());
let (affix, range) = args.get_value(self.chars_len());
if !range.is_normal() {
return Ok(false);
}
let value = self.get_bytes(range);
let value = self.get_chars(range);
single_or_tuple_any(
affix,
&|s: &T| Ok(func(value, s)),

View File

@@ -1645,6 +1645,10 @@ impl<'s> AnyStr<'s> for str {
Self::len(self)
}
fn chars_len(&self) -> usize {
self.chars().count()
}
fn py_split_whitespace<F>(&self, maxsplit: isize, convert: F) -> Vec<PyObjectRef>
where
F: Fn(&Self) -> PyObjectRef,

View File

@@ -1073,6 +1073,10 @@ impl<'s> AnyStr<'s> for [u8] {
Self::len(self)
}
fn chars_len(&self) -> usize {
Self::len(self)
}
fn py_split_whitespace<F>(&self, maxsplit: isize, convert: F) -> Vec<PyObjectRef>
where
F: Fn(&Self) -> PyObjectRef,