Skip to content

Commit 2f355b7

Browse files
Sawyer47alexcrichton
authored andcommitted
Simplify creating a parser from a token tree
Closes #15306
1 parent 4a6fcc5 commit 2f355b7

File tree

8 files changed

+14
-46
lines changed

8 files changed

+14
-46
lines changed

src/libfourcc/lib.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ use syntax::codemap::{Span, mk_sp};
5959
use syntax::ext::base;
6060
use syntax::ext::base::{ExtCtxt, MacExpr};
6161
use syntax::ext::build::AstBuilder;
62-
use syntax::parse;
6362
use syntax::parse::token;
6463
use syntax::parse::token::InternedString;
6564
use rustc::plugin::Registry;
@@ -135,11 +134,7 @@ struct Ident {
135134

136135
fn parse_tts(cx: &ExtCtxt,
137136
tts: &[ast::TokenTree]) -> (Gc<ast::Expr>, Option<Ident>) {
138-
let p = &mut parse::new_parser_from_tts(cx.parse_sess(),
139-
cx.cfg(),
140-
tts.iter()
141-
.map(|x| (*x).clone())
142-
.collect());
137+
let p = &mut cx.new_parser_from_tts(tts);
143138
let ex = p.parse_expr();
144139
let id = if p.token == token::EOF {
145140
None

src/libhexfloat/lib.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ use syntax::codemap::{Span, mk_sp};
5454
use syntax::ext::base;
5555
use syntax::ext::base::{ExtCtxt, MacExpr};
5656
use syntax::ext::build::AstBuilder;
57-
use syntax::parse;
5857
use syntax::parse::token;
5958
use rustc::plugin::Registry;
6059

@@ -167,11 +166,7 @@ struct Ident {
167166

168167
fn parse_tts(cx: &ExtCtxt,
169168
tts: &[ast::TokenTree]) -> (Gc<ast::Expr>, Option<Ident>) {
170-
let p = &mut parse::new_parser_from_tts(cx.parse_sess(),
171-
cx.cfg(),
172-
tts.iter()
173-
.map(|x| (*x).clone())
174-
.collect());
169+
let p = &mut cx.new_parser_from_tts(tts);
175170
let ex = p.parse_expr();
176171
let id = if p.token == token::EOF {
177172
None

src/libregex_macros/lib.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ use syntax::ast;
3232
use syntax::codemap;
3333
use syntax::ext::build::AstBuilder;
3434
use syntax::ext::base::{ExtCtxt, MacResult, MacExpr, DummyResult};
35-
use syntax::parse;
3635
use syntax::parse::token;
3736
use syntax::print::pprust;
3837

@@ -615,8 +614,7 @@ fn exec<'t>(which: ::regex::native::MatchKind, input: &'t str,
615614
/// Looks for a single string literal and returns it.
616615
/// Otherwise, logs an error with cx.span_err and returns None.
617616
fn parse(cx: &mut ExtCtxt, tts: &[ast::TokenTree]) -> Option<String> {
618-
let mut parser = parse::new_parser_from_tts(cx.parse_sess(), cx.cfg(),
619-
Vec::from_slice(tts));
617+
let mut parser = cx.new_parser_from_tts(tts);
620618
let entry = cx.expand_expr(parser.parse_expr());
621619
let regex = match entry.node {
622620
ast::ExprLit(lit) => {

src/libsyntax/ext/asm.rs

+1-7
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use ast;
1616
use codemap::Span;
1717
use ext::base;
1818
use ext::base::*;
19-
use parse;
2019
use parse::token::InternedString;
2120
use parse::token;
2221

@@ -48,12 +47,7 @@ static OPTIONS: &'static [&'static str] = &["volatile", "alignstack", "intel"];
4847

4948
pub fn expand_asm(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
5049
-> Box<base::MacResult> {
51-
let mut p = parse::new_parser_from_tts(cx.parse_sess(),
52-
cx.cfg(),
53-
tts.iter()
54-
.map(|x| (*x).clone())
55-
.collect());
56-
50+
let mut p = cx.new_parser_from_tts(tts);
5751
let mut asm = InternedString::new("");
5852
let mut asm_str_style = None;
5953
let mut outputs = Vec::new();

src/libsyntax/ext/base.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use codemap::{CodeMap, Span, ExpnInfo};
1515
use ext;
1616
use ext::expand;
1717
use parse;
18+
use parse::parser;
1819
use parse::token;
1920
use parse::token::{InternedString, intern, str_to_ident};
2021
use util::small_vector::SmallVector;
@@ -433,6 +434,11 @@ impl<'a> ExtCtxt<'a> {
433434
}
434435
}
435436

437+
pub fn new_parser_from_tts(&self, tts: &[ast::TokenTree])
438+
-> parser::Parser<'a> {
439+
parse::tts_to_parser(self.parse_sess, Vec::from_slice(tts), self.cfg())
440+
}
441+
436442
pub fn codemap(&self) -> &'a CodeMap { &self.parse_sess.span_diagnostic.cm }
437443
pub fn parse_sess(&self) -> &'a parse::ParseSess { self.parse_sess }
438444
pub fn cfg(&self) -> ast::CrateConfig { self.cfg.clone() }
@@ -586,11 +592,7 @@ pub fn get_single_str_from_tts(cx: &ExtCtxt,
586592
pub fn get_exprs_from_tts(cx: &mut ExtCtxt,
587593
sp: Span,
588594
tts: &[ast::TokenTree]) -> Option<Vec<Gc<ast::Expr>>> {
589-
let mut p = parse::new_parser_from_tts(cx.parse_sess(),
590-
cx.cfg(),
591-
tts.iter()
592-
.map(|x| (*x).clone())
593-
.collect());
595+
let mut p = cx.new_parser_from_tts(tts);
594596
let mut es = Vec::new();
595597
while p.token != token::EOF {
596598
es.push(cx.expand_expr(p.parse_expr()));

src/libsyntax/ext/cfg.rs

+1-7
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,11 @@ use attr::*;
2424
use parse::attr::ParserAttr;
2525
use parse::token::InternedString;
2626
use parse::token;
27-
use parse;
2827

2928

3029
pub fn expand_cfg(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
3130
-> Box<base::MacResult> {
32-
let mut p = parse::new_parser_from_tts(cx.parse_sess(),
33-
cx.cfg(),
34-
tts.iter()
35-
.map(|x| (*x).clone())
36-
.collect());
37-
31+
let mut p = cx.new_parser_from_tts(tts);
3832
let mut cfgs = Vec::new();
3933
// parse `cfg!(meta_item, meta_item(x,y), meta_item="foo", ...)`
4034
while p.token != token::EOF {

src/libsyntax/ext/format.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use ext::base;
1616
use ext::build::AstBuilder;
1717
use parse::token::InternedString;
1818
use parse::token;
19-
use rsparse = parse;
2019

2120
use parse = fmt_macros;
2221
use std::collections::HashMap;
@@ -81,11 +80,7 @@ fn parse_args(ecx: &mut ExtCtxt, sp: Span, allow_method: bool,
8180
let mut names = HashMap::<String, Gc<ast::Expr>>::new();
8281
let mut order = Vec::new();
8382

84-
let mut p = rsparse::new_parser_from_tts(ecx.parse_sess(),
85-
ecx.cfg(),
86-
tts.iter()
87-
.map(|x| (*x).clone())
88-
.collect());
83+
let mut p = ecx.new_parser_from_tts(tts);
8984
// Parse the leading function expression (maybe a block, maybe a path)
9085
let invocation = if allow_method {
9186
let e = p.parse_expr();

src/libsyntax/ext/quote.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use ext::base;
1515
use ext::build::AstBuilder;
1616
use parse::token::*;
1717
use parse::token;
18-
use parse;
1918

2019
use std::gc::Gc;
2120

@@ -583,11 +582,7 @@ fn expand_tts(cx: &ExtCtxt, sp: Span, tts: &[ast::TokenTree])
583582
// it has to do with transition away from supporting old-style macros, so
584583
// try removing it when enough of them are gone.
585584

586-
let mut p = parse::new_parser_from_tts(cx.parse_sess(),
587-
cx.cfg(),
588-
tts.iter()
589-
.map(|x| (*x).clone())
590-
.collect());
585+
let mut p = cx.new_parser_from_tts(tts);
591586
p.quote_depth += 1u;
592587

593588
let cx_expr = p.parse_expr();

0 commit comments

Comments
 (0)