Skip to content

Commit 72a9b51

Browse files
committed
convert proc macro to "#[proc_macro]"/"proc macros 1.2"
rust-lang/rust#40129
1 parent 1e0965f commit 72a9b51

File tree

4 files changed

+41
-69
lines changed

4 files changed

+41
-69
lines changed

vtree_macros/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ syn = "0.11.6"
1010
synom = "0.11.0"
1111

1212
[lib]
13-
crate-type = ["dylib"]
14-
plugin = true
13+
proc-macro = true
14+
crate-type = ["proc-macro"]

vtree_macros/src/generator.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
use syntax::parse::{ParseSess, filemap_to_tts};
2-
use syntax::tokenstream::TokenStream;
31
use regex::{Regex, Captures};
42
use syn::Ident;
53
use quote::Tokens;
6-
use NodeChildType;
7-
use ParsedData;
8-
use Node;
4+
use parser::{ParsedData, NodeChildType, Node};
95
use std::iter::once;
106

117
fn to_snake_case(s: &str) -> String {
@@ -552,7 +548,7 @@ fn gen_all_nodes_from_group_impls<'a>(pd: &'a ParsedData) -> impl Iterator<Item
552548
})
553549
}
554550

555-
pub fn generate_defs(pd: ParsedData) -> TokenStream {
551+
pub fn generate_defs(pd: ParsedData) -> String {
556552
let all_nodes_ident = Ident::new("AllNodes");
557553
let node_defs = gen_node_defs(&pd);
558554
let group_defs = pd.group_name_to_nodes
@@ -575,9 +571,5 @@ pub fn generate_defs(pd: ParsedData) -> TokenStream {
575571
#(#all_nodes_from_group_impls)*
576572
};
577573
println!("{}", defs);
578-
let source_str = defs.as_str();
579-
let sess = ParseSess::new();
580-
let filemap =
581-
sess.codemap().new_filemap("<procmacro_lex>".to_string(), None, source_str.to_owned());
582-
filemap_to_tts(&sess, filemap).into_iter().collect()
574+
defs.into_string()
583575
}

vtree_macros/src/lib.rs

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,28 @@
1-
#![feature(plugin_registrar, rustc_private)]
1+
#![feature(plugin_registrar)]
22
#![feature(conservative_impl_trait)]
3+
#![feature(proc_macro)]
34
#![recursion_limit = "128"]
45

56
#[macro_use]
67
extern crate quote;
7-
extern crate syntax;
8-
extern crate syntax_pos;
9-
extern crate rustc_plugin;
108
#[macro_use]
119
extern crate lazy_static;
1210
extern crate regex;
1311
extern crate syn;
1412
#[macro_use]
1513
extern crate synom;
14+
extern crate proc_macro;
1615

1716
mod parser;
1817
mod generator;
1918

2019
use parser::parse_nodes;
2120
use generator::generate_defs;
21+
use proc_macro::TokenStream;
2222

23-
use syntax::ext::base::{ExtCtxt, ProcMacro};
24-
use syntax::symbol::Symbol;
25-
use syntax_pos::Span;
26-
use rustc_plugin::Registry;
27-
use syntax::ext::base::SyntaxExtension;
28-
use syntax::tokenstream::TokenStream;
29-
use std::collections::HashMap;
30-
31-
#[derive(Debug, Clone)]
32-
pub enum NodeChildType {
33-
Single,
34-
Optional,
35-
Multi,
36-
}
37-
38-
#[derive(Debug, Clone)]
39-
pub struct NodeChild {
40-
name: syn::Ident,
41-
group: syn::Ident,
42-
child_type: NodeChildType,
43-
}
44-
45-
#[derive(Debug, Clone)]
46-
pub struct Node {
47-
name: syn::Ident,
48-
params_type: Option<syn::Path>,
49-
fields: Vec<NodeChild>,
50-
}
51-
52-
#[derive(Debug, Clone)]
53-
pub struct ParsedData {
54-
nodes: Vec<Node>,
55-
group_name_to_nodes: HashMap<syn::Ident, Vec<Node>>,
56-
}
57-
58-
struct MacroDefineNodes;
59-
impl ProcMacro for MacroDefineNodes {
60-
fn expand<'ctx>(&self, _: &'ctx mut ExtCtxt, _: Span, ts: TokenStream) -> TokenStream {
61-
let input = ts.to_string();
62-
let pd = parse_nodes(&input);
63-
generate_defs(pd)
64-
}
65-
}
66-
67-
#[plugin_registrar]
68-
pub fn plugin_registrar(reg: &mut Registry) {
69-
reg.register_syntax_extension(Symbol::intern("define_nodes"),
70-
SyntaxExtension::ProcMacro(Box::new(MacroDefineNodes)));
23+
#[proc_macro]
24+
pub fn define_nodes(input: TokenStream) -> TokenStream {
25+
let input = input.to_string();
26+
let pd = parse_nodes(&input);
27+
generate_defs(pd).parse().unwrap()
7128
}

vtree_macros/src/parser.rs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
11
use syn::parse::{ident, path};
22
use syn::{Ident, Path};
33
use std::collections::HashMap;
4-
use NodeChildType;
5-
use Node;
6-
use NodeChild;
7-
use ParsedData;
4+
5+
#[derive(Debug, Clone)]
6+
pub enum NodeChildType {
7+
Single,
8+
Optional,
9+
Multi,
10+
}
11+
12+
#[derive(Debug, Clone)]
13+
pub struct NodeChild {
14+
pub name: Ident,
15+
pub group: Ident,
16+
pub child_type: NodeChildType,
17+
}
18+
19+
#[derive(Debug, Clone)]
20+
pub struct Node {
21+
pub name: Ident,
22+
pub params_type: Option<Path>,
23+
pub fields: Vec<NodeChild>,
24+
}
25+
26+
#[derive(Debug, Clone)]
27+
pub struct ParsedData {
28+
pub nodes: Vec<Node>,
29+
pub group_name_to_nodes: HashMap<Ident, Vec<Node>>,
30+
}
831

932
named!(parse -> Vec<(Ident, Option<Path>, Option<Ident>, Vec<(Ident, NodeChildType, Ident)>)>,
1033
terminated_list!(punct!(","), tuple!(

0 commit comments

Comments
 (0)