Skip to content

Commit 16dfdeb

Browse files
committed
Don't heap-allocate a tokenizer for top-level parsing.
This matters when parsing single property declarations, see bug 1344131[1]. [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=1344131
1 parent 291d79c commit 16dfdeb

File tree

2 files changed

+8
-10
lines changed

2 files changed

+8
-10
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22

33
name = "cssparser"
4-
version = "0.12.0"
4+
version = "0.12.1"
55
authors = [ "Simon Sapin <[email protected]>" ]
66

77
description = "Rust implementation of CSS Syntax Level 3"

src/parser.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,10 @@ pub struct SourcePosition {
2222
}
2323

2424

25-
/// Like std::borrow::Cow, except:
26-
///
27-
/// * The Owned variant is boxed
28-
/// * The Borrowed variant contains a mutable reference.
25+
/// Like std::borrow::Cow, except the borrowed variant contains a mutable
26+
/// reference.
2927
enum MaybeOwned<'a, T: 'a> {
30-
Owned(Box<T>),
28+
Owned(T),
3129
Borrowed(&'a mut T),
3230
}
3331

@@ -36,7 +34,7 @@ impl<'a, T> ops::Deref for MaybeOwned<'a, T> {
3634

3735
fn deref<'b>(&'b self) -> &'b T {
3836
match *self {
39-
MaybeOwned::Owned(ref pointer) => &**pointer,
37+
MaybeOwned::Owned(ref t) => t,
4038
MaybeOwned::Borrowed(ref pointer) => &**pointer,
4139
}
4240
}
@@ -45,15 +43,15 @@ impl<'a, T> ops::Deref for MaybeOwned<'a, T> {
4543
impl<'a, T> ops::DerefMut for MaybeOwned<'a, T> {
4644
fn deref_mut<'b>(&'b mut self) -> &'b mut T {
4745
match *self {
48-
MaybeOwned::Owned(ref mut pointer) => &mut **pointer,
46+
MaybeOwned::Owned(ref mut t) => t,
4947
MaybeOwned::Borrowed(ref mut pointer) => &mut **pointer,
5048
}
5149
}
5250
}
5351

5452
impl<'a, T> Clone for MaybeOwned<'a, T> where T: Clone {
5553
fn clone(&self) -> MaybeOwned<'a, T> {
56-
MaybeOwned::Owned(Box::new((**self).clone()))
54+
MaybeOwned::Owned((**self).clone())
5755
}
5856
}
5957

@@ -171,7 +169,7 @@ impl<'i, 't> Parser<'i, 't> {
171169
#[inline]
172170
pub fn new(input: &'i str) -> Parser<'i, 'i> {
173171
Parser {
174-
tokenizer: MaybeOwned::Owned(Box::new(Tokenizer::new(input))),
172+
tokenizer: MaybeOwned::Owned(Tokenizer::new(input)),
175173
at_start_of: None,
176174
stop_before: Delimiter::None,
177175
}

0 commit comments

Comments
 (0)