Skip to content

Commit 0948909

Browse files
authored
der: reduce llvm-ir in SliceReader::read_nested (#1801)
1 parent 4d123e6 commit 0948909

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

der/src/reader/slice.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ impl<'a> SliceReader<'a> {
6666
.ok_or_else(|| Error::incomplete(self.input_len()))
6767
}
6868
}
69+
/// Creates new [`SliceReader`] without advancing current reader.
70+
pub(crate) fn new_nested_reader(&mut self, len: Length) -> Result<Self, Error> {
71+
let prefix_len = (self.position + len)?;
72+
let mut nested_reader = self.clone();
73+
nested_reader.bytes = self.bytes.prefix(prefix_len)?;
74+
Ok(nested_reader)
75+
}
6976
}
7077

7178
impl<'a> Reader<'a> for SliceReader<'a> {
@@ -92,10 +99,7 @@ impl<'a> Reader<'a> for SliceReader<'a> {
9299
F: FnOnce(&mut Self) -> Result<T, E>,
93100
E: From<Error>,
94101
{
95-
let prefix_len = (self.position + len)?;
96-
let mut nested_reader = self.clone();
97-
nested_reader.bytes = self.bytes.prefix(prefix_len)?;
98-
102+
let mut nested_reader = self.new_nested_reader(len)?;
99103
let ret = f(&mut nested_reader);
100104
self.position = nested_reader.position;
101105
self.failed = nested_reader.failed;

0 commit comments

Comments
 (0)