Skip to content

Commit

Permalink
revert "make predicate optional for callers"
Browse files Browse the repository at this point in the history
This reverts commit fda7f34.

This commit made tests fail that it shouldn't have. The performance wins
from this change were negligible, so it is easiest to just revert it and
potentially come back to this change later
  • Loading branch information
connorskees committed Aug 8, 2020
1 parent fda7f34 commit fb785cf
Show file tree
Hide file tree
Showing 8 changed files with 107 additions and 134 deletions.
70 changes: 32 additions & 38 deletions src/parse/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,31 +184,28 @@ impl<'a> Parser<'a> {

self.whitespace_or_comment();

let value = self.parse_value(
true,
Some(&|c| match c.peek() {
Some(Token { kind: ')', .. }) | Some(Token { kind: ',', .. }) => true,
Some(Token { kind: '.', .. }) => {
if matches!(c.peek_next(), Some(Token { kind: '.', .. })) {
c.reset_cursor();
true
} else {
c.reset_cursor();
false
}
let value = self.parse_value(true, &|c| match c.peek() {
Some(Token { kind: ')', .. }) | Some(Token { kind: ',', .. }) => true,
Some(Token { kind: '.', .. }) => {
if matches!(c.peek_next(), Some(Token { kind: '.', .. })) {
c.reset_cursor();
true
} else {
c.reset_cursor();
false
}
Some(Token { kind: '=', .. }) => {
if matches!(c.peek_next(), Some(Token { kind: '=', .. })) {
c.reset_cursor();
false
} else {
c.reset_cursor();
true
}
}
Some(Token { kind: '=', .. }) => {
if matches!(c.peek_next(), Some(Token { kind: '=', .. })) {
c.reset_cursor();
false
} else {
c.reset_cursor();
true
}
Some(..) | None => false,
}),
);
}
Some(..) | None => false,
});

match self.toks.peek() {
Some(Token { kind: ')', .. }) => {
Expand Down Expand Up @@ -296,22 +293,19 @@ impl<'a> Parser<'a> {
self.toks.next();
let left = value?;

let right = self.parse_value(
true,
Some(&|c| match c.peek() {
Some(Token { kind: ')', .. }) | Some(Token { kind: ',', .. }) => true,
Some(Token { kind: '.', .. }) => {
if matches!(c.peek_next(), Some(Token { kind: '.', .. })) {
c.reset_cursor();
true
} else {
c.reset_cursor();
false
}
let right = self.parse_value(true, &|c| match c.peek() {
Some(Token { kind: ')', .. }) | Some(Token { kind: ',', .. }) => true,
Some(Token { kind: '.', .. }) => {
if matches!(c.peek_next(), Some(Token { kind: '.', .. })) {
c.reset_cursor();
true
} else {
c.reset_cursor();
false
}
Some(..) | None => false,
}),
)?;
}
Some(..) | None => false,
})?;

let value_span = left.span.merge(right.span);
span = span.merge(value_span);
Expand Down
47 changes: 22 additions & 25 deletions src/parse/control_flow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl<'a> Parser<'a> {
let mut found_true = false;
let mut body = Vec::new();

let init_cond = self.parse_value(true, None)?.node;
let init_cond = self.parse_value(true, &|_| false)?.node;

self.expect_char('{')?;

Expand Down Expand Up @@ -83,7 +83,7 @@ impl<'a> Parser<'a> {
self.throw_away_until_open_curly_brace()?;
false
} else {
let v = self.parse_value(true, None)?.node.is_true();
let v = self.parse_value(true, &|_| false)?.node.is_true();
self.expect_char('{')?;
v
};
Expand Down Expand Up @@ -171,28 +171,25 @@ impl<'a> Parser<'a> {
}
self.whitespace_or_comment();

let from_val = self.parse_value(
false,
Some(&|toks| match toks.peek() {
Some(Token { kind: 't', pos })
| Some(Token { kind: 'T', pos })
| Some(Token { kind: '\\', pos }) => {
let span = *pos;
let mut ident = match peek_ident_no_interpolation(toks, false, span) {
Ok(s) => s,
Err(..) => return false,
};
ident.node.make_ascii_lowercase();
let v = match ident.node.to_ascii_lowercase().as_str() {
"to" | "through" => true,
_ => false,
};
toks.reset_cursor();
v
}
Some(..) | None => false,
}),
)?;
let from_val = self.parse_value(false, &|toks| match toks.peek() {
Some(Token { kind: 't', pos })
| Some(Token { kind: 'T', pos })
| Some(Token { kind: '\\', pos }) => {
let span = *pos;
let mut ident = match peek_ident_no_interpolation(toks, false, span) {
Ok(s) => s,
Err(..) => return false,
};
ident.node.make_ascii_lowercase();
let v = match ident.node.to_ascii_lowercase().as_str() {
"to" | "through" => true,
_ => false,
};
toks.reset_cursor();
v
}
Some(..) | None => false,
})?;

let through = if self.scan_identifier("through")? {
1
Expand All @@ -219,7 +216,7 @@ impl<'a> Parser<'a> {
}
};

let to_val = self.parse_value(true, None)?;
let to_val = self.parse_value(true, &|_| false)?;
let to = match to_val.node {
Value::Dimension(Some(n), ..) => match n.to_i32() {
Some(std::i32::MAX) | Some(std::i32::MIN) | None => {
Expand Down
2 changes: 1 addition & 1 deletion src/parse/import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ impl<'a> Parser<'a> {
let Spanned {
node: file_name_as_value,
span,
} = self.parse_value(true, None)?;
} = self.parse_value(true, &|_| false)?;

match file_name_as_value {
Value::String(s, QuoteKind::Quoted) => {
Expand Down
44 changes: 19 additions & 25 deletions src/parse/media.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,25 +28,22 @@ impl<'a> Parser<'a> {
}

pub fn expression_until_comparison(&mut self) -> SassResult<Cow<'static, str>> {
let value = self.parse_value(
false,
Some(&|toks| match toks.peek() {
Some(Token { kind: '>', .. })
| Some(Token { kind: '<', .. })
| Some(Token { kind: ':', .. })
| Some(Token { kind: ')', .. }) => true,
Some(Token { kind: '=', .. }) => {
if matches!(toks.peek_next(), Some(Token { kind: '=', .. })) {
toks.reset_cursor();
true
} else {
toks.reset_cursor();
false
}
let value = self.parse_value(false, &|toks| match toks.peek() {
Some(Token { kind: '>', .. })
| Some(Token { kind: '<', .. })
| Some(Token { kind: ':', .. })
| Some(Token { kind: ')', .. }) => true,
Some(Token { kind: '=', .. }) => {
if matches!(toks.peek_next(), Some(Token { kind: '=', .. })) {
toks.reset_cursor();
true
} else {
toks.reset_cursor();
false
}
_ => false,
}),
)?;
}
_ => false,
})?;

value.node.unquote().to_css_string(value.span)
}
Expand Down Expand Up @@ -85,13 +82,10 @@ impl<'a> Parser<'a> {
buf.push(':');
buf.push(' ');

let value = self.parse_value(
false,
Some(&|toks| match toks.peek() {
Some(Token { kind: ')', .. }) => true,
_ => false,
}),
)?;
let value = self.parse_value(false, &|toks| match toks.peek() {
Some(Token { kind: ')', .. }) => true,
_ => false,
})?;
self.expect_char(')')?;

buf.push_str(&value.node.to_css_string(value.span)?);
Expand Down
8 changes: 4 additions & 4 deletions src/parse/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ impl<'a> Parser<'a> {
let Spanned {
node: message,
span,
} = self.parse_value(false, None)?;
} = self.parse_value(false, &|_| false)?;

return Err((
message.inspect(span)?.to_string(),
Expand All @@ -203,7 +203,7 @@ impl<'a> Parser<'a> {
let Spanned {
node: message,
span,
} = self.parse_value(false, None)?;
} = self.parse_value(false, &|_| false)?;
span.merge(kind_string.span);
if let Some(Token { kind: ';', pos }) = self.toks.peek() {
kind_string.span.merge(*pos);
Expand All @@ -218,7 +218,7 @@ impl<'a> Parser<'a> {
let Spanned {
node: message,
span,
} = self.parse_value(false, None)?;
} = self.parse_value(false, &|_| false)?;
span.merge(kind_string.span);
if let Some(Token { kind: ';', pos }) = self.toks.peek() {
kind_string.span.merge(*pos);
Expand Down Expand Up @@ -521,7 +521,7 @@ impl<'a> Parser<'a> {
}

pub fn parse_interpolation(&mut self) -> SassResult<Spanned<Value>> {
let val = self.parse_value(true, None)?;
let val = self.parse_value(true, &|_| false)?;

self.span_before = val.span;

Expand Down
11 changes: 4 additions & 7 deletions src/parse/module.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,10 @@ impl<'a> Parser<'a> {
self.expect_char(':')?;
self.whitespace_or_comment();

let value = self.parse_value(
false,
Some(&|toks| match toks.peek() {
Some(Token { kind: ',', .. }) | Some(Token { kind: ')', .. }) => true,
_ => false,
}),
)?;
let value = self.parse_value(false, &|toks| match toks.peek() {
Some(Token { kind: ',', .. }) | Some(Token { kind: ')', .. }) => true,
_ => false,
})?;

config.insert(name.map_node(|n| n.into()), value)?;

Expand Down
2 changes: 1 addition & 1 deletion src/parse/style.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ impl<'a> Parser<'a> {
}

fn parse_style_value(&mut self) -> SassResult<Spanned<Value>> {
self.parse_value(false, None)
self.parse_value(false, &|_| false)
}

pub(super) fn parse_style_group(
Expand Down
Loading

0 comments on commit fb785cf

Please sign in to comment.