From de1fb76ac1c7c20e734aafab25062f23dab07414 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Thu, 20 Apr 2017 13:11:13 +0200 Subject: [PATCH] Properly forbid legacy keywords in modern gradient syntax --- components/style/values/specified/image.rs | 24 +++++++++++++--------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/components/style/values/specified/image.rs b/components/style/values/specified/image.rs index 0604b059263..41113d09cb1 100644 --- a/components/style/values/specified/image.rs +++ b/components/style/values/specified/image.rs @@ -372,7 +372,7 @@ fn parse_shape(context: &ParserContext, input: &mut Parser, parse_size_keyword: F) -> Result - where F: FnOnce(&mut Parser) -> Result + where F: Fn(&mut Parser) -> Result { if let Ok((first, second)) = input.try(|i| parse_two_length(context, i)) { // Handle ? @@ -382,7 +382,7 @@ fn parse_shape(context: &ParserContext, // Handle ? let _ = input.try(|input| input.expect_ident_matching("circle")); Ok(EndingShape::Circle(LengthOrKeyword::Length(length))) - } else if let Ok(keyword) = input.try(parse_size_keyword) { + } else if let Ok(keyword) = input.try(&parse_size_keyword) { // Handle ? if input.try(|input| input.expect_ident_matching("circle")).is_ok() { Ok(EndingShape::Circle(LengthOrKeyword::Keyword(keyword))) @@ -394,12 +394,12 @@ fn parse_shape(context: &ParserContext, // https://github.com/rust-lang/rust/issues/41272 if input.try(|input| input.expect_ident_matching("ellipse")).is_ok() { // Handle ? - let length = input.try(|i| LengthOrPercentageOrKeyword::parse(context, i)) + let length = input.try(|i| LengthOrPercentageOrKeyword::parse(context, i, parse_size_keyword)) .unwrap_or(LengthOrPercentageOrKeyword::Keyword(SizeKeyword::FarthestCorner)); Ok(EndingShape::Ellipse(length)) } else if input.try(|input| input.expect_ident_matching("circle")).is_ok() { // Handle ? - let length = input.try(|i| LengthOrKeyword::parse(context, i)) + let length = input.try(|i| LengthOrKeyword::parse(context, i, parse_size_keyword)) .unwrap_or(LengthOrKeyword::Keyword(SizeKeyword::FarthestCorner)); Ok(EndingShape::Circle(length)) } else { @@ -539,9 +539,11 @@ pub enum LengthOrKeyword { Keyword(SizeKeyword), } -impl Parse for LengthOrKeyword { - fn parse(context: &ParserContext, input: &mut Parser) -> Result { - if let Ok(keyword) = input.try(SizeKeyword::parse) { +impl LengthOrKeyword { + fn parse(context: &ParserContext, input: &mut Parser, parse_size_keyword: F) -> Result + where F: Fn(&mut Parser) -> Result + { + if let Ok(keyword) = input.try(parse_size_keyword) { Ok(LengthOrKeyword::Keyword(keyword)) } else { Ok(LengthOrKeyword::Length(try!(Length::parse(context, input)))) @@ -568,9 +570,11 @@ pub enum LengthOrPercentageOrKeyword { } -impl Parse for LengthOrPercentageOrKeyword { - fn parse(context: &ParserContext, input: &mut Parser) -> Result { - if let Ok(keyword) = input.try(SizeKeyword::parse) { +impl LengthOrPercentageOrKeyword { + fn parse(context: &ParserContext, input: &mut Parser, parse_size_keyword: F) -> Result + where F: Fn(&mut Parser) -> Result + { + if let Ok(keyword) = input.try(parse_size_keyword) { Ok(LengthOrPercentageOrKeyword::Keyword(keyword)) } else { Ok(LengthOrPercentageOrKeyword::LengthOrPercentage(