Skip to content

Commit a944f54

Browse files
committed
Fix Parser::seen_* in the presence of caching
1 parent 336a12e commit a944f54

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

src/parser.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,11 @@ impl<'i: 't, 't> Parser<'i, 't> {
376376
match self.input.cached_token {
377377
Some(ref cached_token) if cached_token.start_position == token_start_position => {
378378
self.input.tokenizer.reset(cached_token.end_position);
379+
match cached_token.token {
380+
Token::Dimension { ref unit, .. } => self.input.tokenizer.see_dimension(unit),
381+
Token::Function(ref name) => self.input.tokenizer.see_function(name),
382+
_ => {}
383+
}
379384
token = &cached_token.token
380385
}
381386
_ => {

src/tokenizer.rs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,15 @@ impl<'a> Tokenizer<'a> {
244244
seen
245245
}
246246

247+
#[inline]
248+
pub fn see_function(&mut self, name: &str) {
249+
if self.var_functions == SeenStatus::LookingForThem {
250+
if name.eq_ignore_ascii_case("var") {
251+
self.var_functions = SeenStatus::SeenAtLeastOne;
252+
}
253+
}
254+
}
255+
247256
#[inline]
248257
pub fn look_for_viewport_percentages(&mut self) {
249258
self.viewport_percentages = SeenStatus::LookingForThem;
@@ -256,6 +265,18 @@ impl<'a> Tokenizer<'a> {
256265
seen
257266
}
258267

268+
#[inline]
269+
pub fn see_dimension(&mut self, unit: &str) {
270+
if self.viewport_percentages == SeenStatus::LookingForThem {
271+
if unit.eq_ignore_ascii_case("vh") ||
272+
unit.eq_ignore_ascii_case("vw") ||
273+
unit.eq_ignore_ascii_case("vmin") ||
274+
unit.eq_ignore_ascii_case("vmax") {
275+
self.viewport_percentages = SeenStatus::SeenAtLeastOne;
276+
}
277+
}
278+
}
279+
259280
#[inline]
260281
pub fn next(&mut self) -> Result<Token<'a>, ()> {
261282
next_token(self)
@@ -699,10 +720,7 @@ fn consume_ident_like<'a>(tokenizer: &mut Tokenizer<'a>) -> Token<'a> {
699720
if value.eq_ignore_ascii_case("url") {
700721
consume_unquoted_url(tokenizer).unwrap_or(Function(value))
701722
} else {
702-
if tokenizer.var_functions == SeenStatus::LookingForThem &&
703-
value.eq_ignore_ascii_case("var") {
704-
tokenizer.var_functions = SeenStatus::SeenAtLeastOne;
705-
}
723+
tokenizer.see_function(&value);
706724
Function(value)
707725
}
708726
} else {
@@ -887,14 +905,7 @@ fn consume_numeric<'a>(tokenizer: &mut Tokenizer<'a>) -> Token<'a> {
887905
let value = value as f32;
888906
if is_ident_start(tokenizer) {
889907
let unit = consume_name(tokenizer);
890-
if tokenizer.viewport_percentages == SeenStatus::LookingForThem {
891-
if unit.eq_ignore_ascii_case("vh") ||
892-
unit.eq_ignore_ascii_case("vw") ||
893-
unit.eq_ignore_ascii_case("vmin") ||
894-
unit.eq_ignore_ascii_case("vmax") {
895-
tokenizer.viewport_percentages = SeenStatus::SeenAtLeastOne;
896-
}
897-
}
908+
tokenizer.see_dimension(&unit);
898909
Dimension {
899910
value: value,
900911
int_value: int_value,

0 commit comments

Comments
 (0)