From c53722daae1a80d28f1fa101c05046ef2a2de8b5 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Fri, 20 Nov 2015 12:19:05 +0100 Subject: [PATCH] Remove slice pattern from compiler plugin example closes #29930 --- src/doc/book/compiler-plugins.md | 15 +++++++++++---- src/test/auxiliary/roman_numerals.rs | 11 +++++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/doc/book/compiler-plugins.md b/src/doc/book/compiler-plugins.md index 42dfaa1a8090a..2cb62cdfca555 100644 --- a/src/doc/book/compiler-plugins.md +++ b/src/doc/book/compiler-plugins.md @@ -54,14 +54,21 @@ use rustc::plugin::Registry; fn expand_rn(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree]) -> Box { - static NUMERALS: &'static [(&'static str, u32)] = &[ + static NUMERALS: &'static [(&'static str, usize)] = &[ ("M", 1000), ("CM", 900), ("D", 500), ("CD", 400), ("C", 100), ("XC", 90), ("L", 50), ("XL", 40), ("X", 10), ("IX", 9), ("V", 5), ("IV", 4), ("I", 1)]; - let text = match args { - [TokenTree::Token(_, token::Ident(s, _))] => s.to_string(), + if args.len() != 1 { + cx.span_err( + sp, + &format!("argument should be a single identifier, but got {} arguments", args.len())); + return DummyResult::any(sp); + } + + let text = match args[0] { + TokenTree::Token(_, token::Ident(s, _)) => s.to_string(), _ => { cx.span_err(sp, "argument should be a single identifier"); return DummyResult::any(sp); @@ -83,7 +90,7 @@ fn expand_rn(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree]) } } - MacEager::expr(cx.expr_u32(sp, total)) + MacEager::expr(cx.expr_usize(sp, total)) } #[plugin_registrar] diff --git a/src/test/auxiliary/roman_numerals.rs b/src/test/auxiliary/roman_numerals.rs index 3abc6f4a9f5d8..c9249fb3357e4 100644 --- a/src/test/auxiliary/roman_numerals.rs +++ b/src/test/auxiliary/roman_numerals.rs @@ -39,8 +39,15 @@ fn expand_rn(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree]) ("X", 10), ("IX", 9), ("V", 5), ("IV", 4), ("I", 1)]; - let text = match args { - [TokenTree::Token(_, token::Ident(s, _))] => s.to_string(), + if args.len() != 1 { + cx.span_err( + sp, + &format!("argument should be a single identifier, but got {} arguments", args.len())); + return DummyResult::any(sp); + } + + let text = match args[0] { + TokenTree::Token(_, token::Ident(s, _)) => s.to_string(), _ => { cx.span_err(sp, "argument should be a single identifier"); return DummyResult::any(sp);