Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Start using the ToCss trait, to be used for CSS serialization #4455

Merged
merged 8 commits into from Dec 29, 2014

Add a match_ignore_ascii_case! macro that does not allocate.

It should replace `match foo.to_ascii_lower().as_slice() { ...}`

@Manishearth I changed map.get to map.find in the lint to work around an ICE:

    task 'rustc' panicked at 'couldn't find node id 0 in the AST map'

Does this look OK?
  • Loading branch information
SimonSapin committed Dec 29, 2014
commit 2e35d4e9879089759a0afe865cb6fb7796084938
@@ -65,11 +65,10 @@ macro_rules! define_css_keyword_enum {

impl $name {
pub fn parse(component_value: &::cssparser::ast::ComponentValue) -> Result<$name, ()> {
use std::ascii::AsciiExt;
match component_value {
&::cssparser::ast::Ident(ref value) => {
match value.to_ascii_lower().as_slice() {
$( concat!($css) => Ok($name::$variant), )+
match_ignore_ascii_case! { value:
$( $css => Ok($name::$variant) ),+
_ => Err(())
}
}
@@ -96,3 +95,23 @@ macro_rules! define_css_keyword_enum {
}
}
}


#[macro_export]
macro_rules! match_ignore_ascii_case {
( $value: expr: $( $string: expr => $result: expr ),+ _ => $fallback: expr, ) => {
match_ignore_ascii_case! { $value:
$( $string => $result ),+
_ => $fallback
}
};
( $value: expr: $( $string: expr => $result: expr ),+ _ => $fallback: expr ) => {
{
use std::ascii::AsciiExt;
match $value.as_slice() {
$( s if s.eq_ignore_ascii_case($string) => $result, )+
_ => $fallback
}
}
};
}
@@ -104,8 +104,8 @@ fn lint_unrooted_ty(cx: &Context, ty: &ast::Ty, warning: &str) {
// Determines if a block is in an unsafe context so that an unhelpful
// lint can be aborted.
fn unsafe_context(map: &ast_map::Map, id: ast::NodeId) -> bool {
match map.get(map.get_parent(id)) {
ast_map::NodeImplItem(itm) => {
match map.find(map.get_parent(id)) {
Some(ast_map::NodeImplItem(itm)) => {
match *itm {
ast::MethodImplItem(ref meth) => match meth.node {
ast::MethDecl(_, _, _, _, style, _, _, _) => match style {
@@ -117,7 +117,7 @@ fn unsafe_context(map: &ast_map::Map, id: ast::NodeId) -> bool {
_ => false,
}
},
ast_map::NodeItem(itm) => {
Some(ast_map::NodeItem(itm)) => {
match itm.node {
ast::ItemFn(_, style, _, _, _) => match style {
ast::UnsafeFn => true,

Some generated files are not rendered by default. Learn more.

@@ -7,6 +7,9 @@ authors = ["The Servo Project Developers"]
name = "util"
path = "lib.rs"

[dependencies.plugins]
path = "../plugins"

[dependencies.cssparser]
git = "https://github.com/servo/rust-cssparser"

@@ -19,8 +19,8 @@ macro_rules! define_cursor {

impl Cursor {
pub fn from_css_keyword(keyword: &str) -> Result<Cursor, ()> {
match keyword.to_ascii_lower().as_slice() {
$( concat!($css) => Ok(Cursor::$variant), )+
match_ignore_ascii_case! { keyword:
$( concat!($css) => Ok(Cursor::$variant) ),+
_ => Err(())
}
}
@@ -31,10 +31,9 @@ extern crate string_cache;
extern crate unicode;
extern crate url;

#[phase(plugin)]
extern crate string_cache_macros;
#[phase(plugin)]
extern crate lazy_static;
#[phase(plugin)] extern crate plugins;
#[phase(plugin)] extern crate string_cache_macros;
#[phase(plugin)] extern crate lazy_static;

use std::sync::Arc;

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.