Skip to content

Commit 8771d65

Browse files
committed
Inline ReaderState::emit_start with obvious dead code elimination
1 parent d5d3a99 commit 8771d65

File tree

1 file changed

+30
-35
lines changed

1 file changed

+30
-35
lines changed

src/reader/state.rs

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -137,39 +137,6 @@ impl ReaderState {
137137
Ok(Event::End(BytesEnd::wrap(name.into())))
138138
}
139139

140-
/// Converts content of a tag to a `Start` or an `Empty` event
141-
///
142-
/// # Parameters
143-
/// - `content`: Content of a tag between `<` and `>`
144-
pub fn emit_start<'b>(&mut self, content: &'b [u8]) -> Result<Event<'b>> {
145-
let len = content.len();
146-
let name_end = content
147-
.iter()
148-
.position(|&b| is_whitespace(b))
149-
.unwrap_or(len);
150-
if let Some(&b'/') = content.last() {
151-
// This is self-closed tag `<something/>`
152-
let name_len = if name_end < len { name_end } else { len - 1 };
153-
let event = BytesStart::wrap(&content[..len - 1], name_len);
154-
155-
if self.config.expand_empty_elements {
156-
self.pending = true;
157-
self.opened_starts.push(self.opened_buffer.len());
158-
self.opened_buffer.extend(&content[..name_len]);
159-
Ok(Event::Start(event))
160-
} else {
161-
Ok(Event::Empty(event))
162-
}
163-
} else {
164-
// #514: Always store names event when .check_end_names == false,
165-
// because checks can be temporary disabled and when they would be
166-
// enabled, we should have that information
167-
self.opened_starts.push(self.opened_buffer.len());
168-
self.opened_buffer.extend(&content[..name_end]);
169-
Ok(Event::Start(BytesStart::wrap(content, name_end)))
170-
}
171-
}
172-
173140
/// Get the decoder, used to decode bytes, read by this reader, to the strings.
174141
///
175142
/// If [`encoding`] feature is enabled, the used encoding may change after
@@ -388,13 +355,41 @@ impl ReaderState {
388355
debug_assert!(content.starts_with(b"<"), "{:?}", Bytes(content));
389356
debug_assert!(content.ends_with(b"/>"), "{:?}", Bytes(content));
390357

391-
self.emit_start(&content[1..content.len() - 1])
358+
let content = &content[1..content.len() - 1];
359+
let len = content.len();
360+
let name_end = content
361+
.iter()
362+
.position(|&b| is_whitespace(b))
363+
.unwrap_or(len);
364+
// This is self-closed tag `<something/>`
365+
let name_len = if name_end < len { name_end } else { len - 1 };
366+
let event = BytesStart::wrap(&content[..len - 1], name_len);
367+
368+
if self.config.expand_empty_elements {
369+
self.pending = true;
370+
self.opened_starts.push(self.opened_buffer.len());
371+
self.opened_buffer.extend(&content[..name_len]);
372+
Ok(Event::Start(event))
373+
} else {
374+
Ok(Event::Empty(event))
375+
}
392376
}
393377
FeedResult::EmitStartTag(_) => {
394378
debug_assert!(content.starts_with(b"<"), "{:?}", Bytes(content));
395379
debug_assert!(content.ends_with(b">"), "{:?}", Bytes(content));
396380

397-
self.emit_start(&content[1..content.len() - 1])
381+
let content = &content[1..content.len() - 1];
382+
let len = content.len();
383+
let name_end = content
384+
.iter()
385+
.position(|&b| is_whitespace(b))
386+
.unwrap_or(len);
387+
// #514: Always store names event when .check_end_names == false,
388+
// because checks can be temporary disabled and when they would be
389+
// enabled, we should have that information
390+
self.opened_starts.push(self.opened_buffer.len());
391+
self.opened_buffer.extend(&content[..name_end]);
392+
Ok(Event::Start(BytesStart::wrap(content, name_end)))
398393
}
399394
FeedResult::EmitEndTag(_) => {
400395
debug_assert!(content.starts_with(b"</"), "{:?}", Bytes(content));

0 commit comments

Comments
 (0)