diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 3f834e5e..2225bd7b 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -14,4 +14,4 @@ proc-macro = true [dependencies] quote = "1" -syn = {version = "1", features = ["full", "extra-traits"]} +syn = {version = "2", features = ["full", "extra-traits"]} diff --git a/macros/lib.rs b/macros/lib.rs index 64d749f0..4354cc8e 100644 --- a/macros/lib.rs +++ b/macros/lib.rs @@ -38,14 +38,18 @@ pub fn _cssparser_internal_max_len(input: TokenStream) -> TokenStream { .into() } +fn get_byte_from_lit(lit: &syn::Lit) -> u8 { + if let syn::Lit::Byte(ref byte) = *lit { + byte.value() + } else { + panic!("Found a pattern that wasn't a byte") + } +} + fn get_byte_from_expr_lit(expr: &syn::Expr) -> u8 { match *expr { syn::Expr::Lit(syn::ExprLit { ref lit, .. }) => { - if let syn::Lit::Byte(ref byte) = *lit { - byte.value() - } else { - panic!("Found a pattern that wasn't a byte") - } + get_byte_from_lit(lit) } _ => unreachable!(), } @@ -59,15 +63,15 @@ fn parse_pat_to_table<'a>( table: &mut [u8; 256], ) { match pat { - &syn::Pat::Lit(syn::PatLit { ref expr, .. }) => { - let value = get_byte_from_expr_lit(expr); + &syn::Pat::Lit(syn::PatLit { ref lit, .. }) => { + let value = get_byte_from_lit(lit); if table[value as usize] == 0 { table[value as usize] = case_id; } } - &syn::Pat::Range(syn::PatRange { ref lo, ref hi, .. }) => { - let lo = get_byte_from_expr_lit(lo); - let hi = get_byte_from_expr_lit(hi); + &syn::Pat::Range(syn::PatRange { ref start, ref end, .. }) => { + let lo = get_byte_from_expr_lit(&start.as_ref().unwrap()); + let hi = get_byte_from_expr_lit(&end.as_ref().unwrap()); for value in lo..hi { if table[value as usize] == 0 { table[value as usize] = case_id;