Skip to content

Commit ba6b076

Browse files
committed
Migrate to the new proc_macro API (fix #19)
rust-lang/rust#49597
1 parent e7ae526 commit ba6b076

File tree

1 file changed

+30
-43
lines changed

1 file changed

+30
-43
lines changed

lib/macro/internal/src/lib.rs

+30-43
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,21 @@ extern crate syn;
1919
extern crate data_encoding;
2020

2121
#[cfg(not(feature = "stable"))]
22-
use proc_macro::{Spacing, TokenNode, TokenStream, TokenTree, TokenTreeIter};
22+
use proc_macro::token_stream::IntoIter;
23+
#[cfg(not(feature = "stable"))]
24+
use proc_macro::{TokenStream, TokenTree};
2325
use std::collections::HashMap;
2426
#[cfg(feature = "stable")]
25-
use syn::{Lit, Token, TokenTree};
26-
#[cfg(feature = "stable")]
2727
use syn::parse::IResult;
28+
#[cfg(feature = "stable")]
29+
use syn::{Lit, Token, TokenTree};
2830

2931
use data_encoding::{BitOrder, Encoding, Specification, Translate, Wrap};
3032

3133
#[cfg(not(feature = "stable"))]
32-
fn parse_op(tokens: &mut TokenTreeIter, op: char, key: &str) {
34+
fn parse_op(tokens: &mut IntoIter, op: char, key: &str) {
3335
match tokens.next() {
34-
Some(TokenTree { span: _, kind: TokenNode::Op(x, Spacing::Alone) })
35-
if x == op => (),
36+
Some(TokenTree::Op(x)) if x.op() == op => (),
3637
_ => panic!("expected {:?} after {}", op, key),
3738
}
3839
}
@@ -45,17 +46,17 @@ fn parse_op<'a>(input: &'a str, op: Token, key: &str) -> &'a str {
4546
}
4647

4748
#[cfg(not(feature = "stable"))]
48-
fn parse_map(mut tokens: TokenTreeIter) -> HashMap<String, TokenNode> {
49+
fn parse_map(mut tokens: IntoIter) -> HashMap<String, TokenTree> {
4950
let mut map = HashMap::new();
5051
while let Some(key) = tokens.next() {
51-
let key = match key.kind {
52-
TokenNode::Term(term) => term.as_str().to_string(),
52+
let key = match key {
53+
TokenTree::Term(term) => term.as_str().to_string(),
5354
_ => panic!("expected key got {}", key),
5455
};
5556
parse_op(&mut tokens, ':', &key);
5657
let value = match tokens.next() {
5758
None => panic!("expected value for {}", key),
58-
Some(value) => value.kind,
59+
Some(value) => value,
5960
};
6061
parse_op(&mut tokens, ',', &key);
6162
let _ = map.insert(key, value);
@@ -92,13 +93,13 @@ fn parse_map(mut input: &str) -> HashMap<String, Token> {
9293
}
9394

9495
#[cfg(not(feature = "stable"))]
95-
fn get_string(map: &mut HashMap<String, TokenNode>, key: &str) -> String {
96+
fn get_string(map: &mut HashMap<String, TokenTree>, key: &str) -> String {
9697
let node = match map.remove(key) {
9798
None => return String::new(),
9899
Some(node) => node,
99100
};
100101
let literal = match node {
101-
TokenNode::Literal(literal) => literal,
102+
TokenTree::Literal(literal) => literal,
102103
_ => panic!("expected literal for {}", key),
103104
};
104105
match syn::parse::string(&literal.to_string()) {
@@ -116,13 +117,13 @@ fn get_string(map: &mut HashMap<String, Token>, key: &str) -> String {
116117
}
117118

118119
#[cfg(not(feature = "stable"))]
119-
fn get_usize(map: &mut HashMap<String, TokenNode>, key: &str) -> usize {
120+
fn get_usize(map: &mut HashMap<String, TokenTree>, key: &str) -> usize {
120121
let node = match map.remove(key) {
121122
None => return 0,
122123
Some(node) => node,
123124
};
124125
let literal = match node {
125-
TokenNode::Literal(literal) => literal,
126+
TokenTree::Literal(literal) => literal,
126127
_ => panic!("expected literal for {}", key),
127128
};
128129
match literal.to_string().parse() {
@@ -140,19 +141,17 @@ fn get_usize(map: &mut HashMap<String, Token>, key: &str) -> usize {
140141
}
141142

142143
#[cfg(not(feature = "stable"))]
143-
fn get_padding(map: &mut HashMap<String, TokenNode>) -> Option<char> {
144+
fn get_padding(map: &mut HashMap<String, TokenTree>) -> Option<char> {
144145
let node = match map.remove("padding") {
145146
None => return None,
146147
Some(node) => node,
147148
};
148149
let literal = match node {
149-
TokenNode::Term(term) if term.as_str() == "None" => return None,
150-
TokenNode::Literal(literal) => literal,
150+
TokenTree::Term(term) if term.as_str() == "None" => return None,
151+
TokenTree::Literal(literal) => literal,
151152
_ => panic!("expected literal for padding"),
152153
};
153-
Some(syn::parse::character(&literal.to_string()).expect(
154-
"expected char for padding",
155-
))
154+
Some(syn::parse::character(&literal.to_string()).expect("expected char for padding"))
156155
}
157156
#[cfg(feature = "stable")]
158157
fn get_padding(map: &mut HashMap<String, Token>) -> Option<char> {
@@ -165,18 +164,16 @@ fn get_padding(map: &mut HashMap<String, Token>) -> Option<char> {
165164
}
166165

167166
#[cfg(not(feature = "stable"))]
168-
fn get_bool(map: &mut HashMap<String, TokenNode>, key: &str) -> Option<bool> {
167+
fn get_bool(map: &mut HashMap<String, TokenTree>, key: &str) -> Option<bool> {
169168
let node = match map.remove(key) {
170169
None => return None,
171170
Some(node) => node,
172171
};
173172
let term = match node {
174-
TokenNode::Term(term) => term,
173+
TokenTree::Term(term) => term,
175174
_ => panic!("expected literal for padding"),
176175
};
177-
Some(syn::parse::boolean(term.as_str()).expect(
178-
"expected bool for padding",
179-
))
176+
Some(syn::parse::boolean(term.as_str()).expect("expected bool for padding"))
180177
}
181178
#[cfg(feature = "stable")]
182179
fn get_bool(map: &mut HashMap<String, Token>, key: &str) -> Option<bool> {
@@ -188,20 +185,16 @@ fn get_bool(map: &mut HashMap<String, Token>, key: &str) -> Option<bool> {
188185
}
189186

190187
#[cfg(not(feature = "stable"))]
191-
fn get_bit_order(map: &mut HashMap<String, TokenNode>) -> BitOrder {
188+
fn get_bit_order(map: &mut HashMap<String, TokenTree>) -> BitOrder {
192189
let node = match map.remove("bit_order") {
193190
None => return BitOrder::MostSignificantFirst,
194191
Some(node) => node,
195192
};
196193
let msb = "MostSignificantFirst";
197194
let lsb = "LeastSignificantFirst";
198195
match node {
199-
TokenNode::Term(term) if term.as_str() == msb => {
200-
BitOrder::MostSignificantFirst
201-
}
202-
TokenNode::Term(term) if term.as_str() == lsb => {
203-
BitOrder::LeastSignificantFirst
204-
}
196+
TokenTree::Term(term) if term.as_str() == msb => BitOrder::MostSignificantFirst,
197+
TokenTree::Term(term) if term.as_str() == lsb => BitOrder::LeastSignificantFirst,
205198
_ => panic!("expected {} or {} for bit_order", msb, lsb),
206199
}
207200
}
@@ -211,12 +204,8 @@ fn get_bit_order(map: &mut HashMap<String, Token>) -> BitOrder {
211204
let lsb = "LeastSignificantFirst";
212205
match map.remove("bit_order") {
213206
None => return BitOrder::MostSignificantFirst,
214-
Some(Token::Ident(ref ident)) if ident.as_ref() == msb => {
215-
BitOrder::MostSignificantFirst
216-
}
217-
Some(Token::Ident(ref ident)) if ident.as_ref() == lsb => {
218-
BitOrder::LeastSignificantFirst
219-
}
207+
Some(Token::Ident(ref ident)) if ident.as_ref() == msb => BitOrder::MostSignificantFirst,
208+
Some(Token::Ident(ref ident)) if ident.as_ref() == lsb => BitOrder::LeastSignificantFirst,
220209
Some(_) => panic!("expected {} or {} for bit_order", msb, lsb),
221210
}
222211
}
@@ -228,13 +217,12 @@ fn check_present<T>(hash_map: &HashMap<String, T>, key: &str) {
228217
}
229218

230219
#[cfg(not(feature = "stable"))]
231-
fn get_encoding(mut hash_map: &mut HashMap<String, TokenNode>) -> Encoding {
220+
fn get_encoding(mut hash_map: &mut HashMap<String, TokenTree>) -> Encoding {
232221
check_present(&hash_map, "symbols");
233222
let spec = Specification {
234223
symbols: get_string(&mut hash_map, "symbols"),
235224
bit_order: get_bit_order(&mut hash_map),
236-
check_trailing_bits: get_bool(&mut hash_map, "check_trailing_bits")
237-
.unwrap_or(true),
225+
check_trailing_bits: get_bool(&mut hash_map, "check_trailing_bits").unwrap_or(true),
238226
padding: get_padding(&mut hash_map),
239227
ignore: get_string(&mut hash_map, "ignore"),
240228
wrap: Wrap {
@@ -254,8 +242,7 @@ fn get_encoding(mut hash_map: &mut HashMap<String, Token>) -> Encoding {
254242
let spec = Specification {
255243
symbols: get_string(&mut hash_map, "symbols"),
256244
bit_order: get_bit_order(&mut hash_map),
257-
check_trailing_bits: get_bool(&mut hash_map, "check_trailing_bits")
258-
.unwrap_or(true),
245+
check_trailing_bits: get_bool(&mut hash_map, "check_trailing_bits").unwrap_or(true),
259246
padding: get_padding(&mut hash_map),
260247
ignore: get_string(&mut hash_map, "ignore"),
261248
wrap: Wrap {

0 commit comments

Comments
 (0)