mirror of
https://github.com/servo/servo.git
synced 2025-06-13 10:54:29 +00:00
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?
This commit is contained in:
parent
540d218885
commit
2e35d4e987
6 changed files with 34 additions and 12 deletions
|
@ -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,
|
||||
|
|
1
components/servo/Cargo.lock
generated
1
components/servo/Cargo.lock
generated
|
@ -713,6 +713,7 @@ dependencies = [
|
|||
"cssparser 0.1.0 (git+https://github.com/servo/rust-cssparser)",
|
||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
||||
"plugins 0.0.1",
|
||||
"string_cache 0.0.0 (git+https://github.com/servo/string-cache)",
|
||||
"string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache)",
|
||||
"task_info 0.0.1",
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue