libsyntax: change attr::parse_seq_* to take &Token
This commit is contained in:
@@ -28,7 +28,7 @@ pub impl proto_parser for parser::Parser {
|
|||||||
let proto = protocol(id, *self.span);
|
let proto = protocol(id, *self.span);
|
||||||
|
|
||||||
self.parse_seq_to_before_end(
|
self.parse_seq_to_before_end(
|
||||||
token::EOF,
|
&token::EOF,
|
||||||
SeqSep {
|
SeqSep {
|
||||||
sep: None,
|
sep: None,
|
||||||
trailing_sep_allowed: false,
|
trailing_sep_allowed: false,
|
||||||
@@ -65,8 +65,8 @@ pub impl proto_parser for parser::Parser {
|
|||||||
|
|
||||||
// parse the messages
|
// parse the messages
|
||||||
self.parse_unspanned_seq(
|
self.parse_unspanned_seq(
|
||||||
token::LBRACE,
|
&token::LBRACE,
|
||||||
token::RBRACE,
|
&token::RBRACE,
|
||||||
SeqSep {
|
SeqSep {
|
||||||
sep: Some(token::COMMA),
|
sep: Some(token::COMMA),
|
||||||
trailing_sep_allowed: true,
|
trailing_sep_allowed: true,
|
||||||
@@ -80,8 +80,8 @@ pub impl proto_parser for parser::Parser {
|
|||||||
|
|
||||||
let args = if *self.token == token::LPAREN {
|
let args = if *self.token == token::LPAREN {
|
||||||
self.parse_unspanned_seq(
|
self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
SeqSep {
|
SeqSep {
|
||||||
sep: Some(token::COMMA),
|
sep: Some(token::COMMA),
|
||||||
trailing_sep_allowed: true,
|
trailing_sep_allowed: true,
|
||||||
@@ -98,8 +98,8 @@ pub impl proto_parser for parser::Parser {
|
|||||||
let name = *self.interner.get(self.parse_ident());
|
let name = *self.interner.get(self.parse_ident());
|
||||||
let ntys = if *self.token == token::LT {
|
let ntys = if *self.token == token::LT {
|
||||||
self.parse_unspanned_seq(
|
self.parse_unspanned_seq(
|
||||||
token::LT,
|
&token::LT,
|
||||||
token::GT,
|
&token::GT,
|
||||||
SeqSep {
|
SeqSep {
|
||||||
sep: Some(token::COMMA),
|
sep: Some(token::COMMA),
|
||||||
trailing_sep_allowed: true,
|
trailing_sep_allowed: true,
|
||||||
|
|||||||
@@ -152,8 +152,8 @@ impl parser_attr for Parser {
|
|||||||
|
|
||||||
fn parse_meta_seq() -> ~[@ast::meta_item] {
|
fn parse_meta_seq() -> ~[@ast::meta_item] {
|
||||||
self.parse_seq(
|
self.parse_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_disallowed(token::COMMA),
|
seq_sep_trailing_disallowed(token::COMMA),
|
||||||
|p| p.parse_meta_item()
|
|p| p.parse_meta_item()
|
||||||
).node
|
).node
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ pub impl Parser {
|
|||||||
// f must consume tokens until reaching the next separator or
|
// f must consume tokens until reaching the next separator or
|
||||||
// closing bracket.
|
// closing bracket.
|
||||||
fn parse_seq_to_end<T: Copy>(
|
fn parse_seq_to_end<T: Copy>(
|
||||||
ket: token::Token,
|
ket: &token::Token,
|
||||||
sep: SeqSep,
|
sep: SeqSep,
|
||||||
f: fn(Parser) -> T
|
f: fn(Parser) -> T
|
||||||
) -> ~[T] {
|
) -> ~[T] {
|
||||||
@@ -308,13 +308,13 @@ pub impl Parser {
|
|||||||
// f must consume tokens until reaching the next separator or
|
// f must consume tokens until reaching the next separator or
|
||||||
// closing bracket.
|
// closing bracket.
|
||||||
fn parse_seq_to_before_end<T: Copy>(
|
fn parse_seq_to_before_end<T: Copy>(
|
||||||
ket: token::Token,
|
ket: &token::Token,
|
||||||
sep: SeqSep,
|
sep: SeqSep,
|
||||||
f: fn(Parser) -> T
|
f: fn(Parser) -> T
|
||||||
) -> ~[T] {
|
) -> ~[T] {
|
||||||
let mut first: bool = true;
|
let mut first: bool = true;
|
||||||
let mut v: ~[T] = ~[];
|
let mut v: ~[T] = ~[];
|
||||||
while *self.token != ket {
|
while *self.token != *ket {
|
||||||
match sep.sep {
|
match sep.sep {
|
||||||
Some(ref t) => {
|
Some(ref t) => {
|
||||||
if first { first = false; }
|
if first { first = false; }
|
||||||
@@ -322,22 +322,22 @@ pub impl Parser {
|
|||||||
}
|
}
|
||||||
_ => ()
|
_ => ()
|
||||||
}
|
}
|
||||||
if sep.trailing_sep_allowed && *self.token == ket { break; }
|
if sep.trailing_sep_allowed && *self.token == *ket { break; }
|
||||||
v.push(f(self));
|
v.push(f(self));
|
||||||
}
|
}
|
||||||
v
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse a sequence, including the closing delimiter. The function
|
// parse a sequence, including the closing delimiter. The function
|
||||||
// f must consume tokens until reaching the next separator or
|
// f must consume tokens until reaching the next separator or
|
||||||
// closing bracket.
|
// closing bracket.
|
||||||
fn parse_unspanned_seq<T: Copy>(
|
fn parse_unspanned_seq<T: Copy>(
|
||||||
+bra: token::Token,
|
bra: &token::Token,
|
||||||
+ket: token::Token,
|
ket: &token::Token,
|
||||||
sep: SeqSep,
|
sep: SeqSep,
|
||||||
f: fn(Parser) -> T
|
f: fn(Parser) -> T
|
||||||
) -> ~[T] {
|
) -> ~[T] {
|
||||||
self.expect(&bra);
|
self.expect(bra);
|
||||||
let result = self.parse_seq_to_before_end(ket, sep, f);
|
let result = self.parse_seq_to_before_end(ket, sep, f);
|
||||||
self.bump();
|
self.bump();
|
||||||
result
|
result
|
||||||
@@ -346,13 +346,13 @@ pub impl Parser {
|
|||||||
// NB: Do not use this function unless you actually plan to place the
|
// NB: Do not use this function unless you actually plan to place the
|
||||||
// spanned list in the AST.
|
// spanned list in the AST.
|
||||||
fn parse_seq<T: Copy>(
|
fn parse_seq<T: Copy>(
|
||||||
+bra: token::Token,
|
bra: &token::Token,
|
||||||
+ket: token::Token,
|
ket: &token::Token,
|
||||||
sep: SeqSep,
|
sep: SeqSep,
|
||||||
f: fn(Parser) -> T
|
f: fn(Parser) -> T
|
||||||
) -> spanned<~[T]> {
|
) -> spanned<~[T]> {
|
||||||
let lo = self.span.lo;
|
let lo = self.span.lo;
|
||||||
self.expect(&bra);
|
self.expect(bra);
|
||||||
let result = self.parse_seq_to_before_end(ket, sep, f);
|
let result = self.parse_seq_to_before_end(ket, sep, f);
|
||||||
let hi = self.span.hi;
|
let hi = self.span.hi;
|
||||||
self.bump();
|
self.bump();
|
||||||
|
|||||||
@@ -421,8 +421,8 @@ pub impl Parser {
|
|||||||
self.expect(&token::GT);
|
self.expect(&token::GT);
|
||||||
}
|
}
|
||||||
let inputs = self.parse_unspanned_seq(
|
let inputs = self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_disallowed(token::COMMA),
|
seq_sep_trailing_disallowed(token::COMMA),
|
||||||
|p| p.parse_arg_general(false)
|
|p| p.parse_arg_general(false)
|
||||||
);
|
);
|
||||||
@@ -432,8 +432,8 @@ pub impl Parser {
|
|||||||
|
|
||||||
fn parse_trait_methods() -> ~[trait_method] {
|
fn parse_trait_methods() -> ~[trait_method] {
|
||||||
do self.parse_unspanned_seq(
|
do self.parse_unspanned_seq(
|
||||||
token::LBRACE,
|
&token::LBRACE,
|
||||||
token::RBRACE,
|
&token::RBRACE,
|
||||||
seq_sep_none()
|
seq_sep_none()
|
||||||
) |p| {
|
) |p| {
|
||||||
let attrs = p.parse_outer_attributes();
|
let attrs = p.parse_outer_attributes();
|
||||||
@@ -628,8 +628,8 @@ pub impl Parser {
|
|||||||
ty_ptr(self.parse_mt())
|
ty_ptr(self.parse_mt())
|
||||||
} else if *self.token == token::LBRACE {
|
} else if *self.token == token::LBRACE {
|
||||||
let elems = self.parse_unspanned_seq(
|
let elems = self.parse_unspanned_seq(
|
||||||
token::LBRACE,
|
&token::LBRACE,
|
||||||
token::RBRACE,
|
&token::RBRACE,
|
||||||
seq_sep_trailing_allowed(token::COMMA),
|
seq_sep_trailing_allowed(token::COMMA),
|
||||||
|p| p.parse_ty_field()
|
|p| p.parse_ty_field()
|
||||||
);
|
);
|
||||||
@@ -1190,7 +1190,7 @@ pub impl Parser {
|
|||||||
// Vector with two or more elements.
|
// Vector with two or more elements.
|
||||||
self.bump();
|
self.bump();
|
||||||
let remaining_exprs = self.parse_seq_to_end(
|
let remaining_exprs = self.parse_seq_to_end(
|
||||||
token::RBRACKET,
|
&token::RBRACKET,
|
||||||
seq_sep_trailing_allowed(token::COMMA),
|
seq_sep_trailing_allowed(token::COMMA),
|
||||||
|p| p.parse_expr()
|
|p| p.parse_expr()
|
||||||
);
|
);
|
||||||
@@ -1246,8 +1246,8 @@ pub impl Parser {
|
|||||||
|
|
||||||
let ket = token::flip_delimiter(&*self.token);
|
let ket = token::flip_delimiter(&*self.token);
|
||||||
let tts = self.parse_unspanned_seq(
|
let tts = self.parse_unspanned_seq(
|
||||||
*self.token,
|
© *self.token,
|
||||||
ket,
|
&ket,
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree()
|
|p| p.parse_token_tree()
|
||||||
);
|
);
|
||||||
@@ -1339,8 +1339,8 @@ pub impl Parser {
|
|||||||
match *self.token {
|
match *self.token {
|
||||||
token::LPAREN if self.permits_call() => {
|
token::LPAREN if self.permits_call() => {
|
||||||
let es = self.parse_unspanned_seq(
|
let es = self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_disallowed(token::COMMA),
|
seq_sep_trailing_disallowed(token::COMMA),
|
||||||
|p| p.parse_expr()
|
|p| p.parse_expr()
|
||||||
);
|
);
|
||||||
@@ -1363,8 +1363,8 @@ pub impl Parser {
|
|||||||
// expr(...)
|
// expr(...)
|
||||||
token::LPAREN if self.permits_call() => {
|
token::LPAREN if self.permits_call() => {
|
||||||
let es = self.parse_unspanned_seq(
|
let es = self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_disallowed(token::COMMA),
|
seq_sep_trailing_disallowed(token::COMMA),
|
||||||
|p| p.parse_expr()
|
|p| p.parse_expr()
|
||||||
);
|
);
|
||||||
@@ -1434,8 +1434,8 @@ pub impl Parser {
|
|||||||
|
|
||||||
if *p.token == token::LPAREN {
|
if *p.token == token::LPAREN {
|
||||||
let seq = p.parse_seq(
|
let seq = p.parse_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree()
|
|p| p.parse_token_tree()
|
||||||
);
|
);
|
||||||
@@ -1471,7 +1471,7 @@ pub impl Parser {
|
|||||||
~[parse_any_tt_tok(self)],
|
~[parse_any_tt_tok(self)],
|
||||||
vec::append(
|
vec::append(
|
||||||
self.parse_seq_to_before_end(
|
self.parse_seq_to_before_end(
|
||||||
ket,
|
&ket,
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree()
|
|p| p.parse_token_tree()
|
||||||
),
|
),
|
||||||
@@ -2320,8 +2320,8 @@ pub impl Parser {
|
|||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
args = self.parse_unspanned_seq(
|
args = self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_disallowed(
|
seq_sep_trailing_disallowed(
|
||||||
token::COMMA
|
token::COMMA
|
||||||
),
|
),
|
||||||
@@ -2470,8 +2470,8 @@ pub impl Parser {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let tts = self.parse_unspanned_seq(
|
let tts = self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree()
|
|p| p.parse_token_tree()
|
||||||
);
|
);
|
||||||
@@ -2780,8 +2780,8 @@ pub impl Parser {
|
|||||||
{
|
{
|
||||||
let args_or_capture_items: ~[arg_or_capture_item] =
|
let args_or_capture_items: ~[arg_or_capture_item] =
|
||||||
self.parse_unspanned_seq(
|
self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_disallowed(token::COMMA),
|
seq_sep_trailing_disallowed(token::COMMA),
|
||||||
parse_arg_fn
|
parse_arg_fn
|
||||||
);
|
);
|
||||||
@@ -2865,7 +2865,7 @@ pub impl Parser {
|
|||||||
self.bump();
|
self.bump();
|
||||||
let sep = seq_sep_trailing_disallowed(token::COMMA);
|
let sep = seq_sep_trailing_disallowed(token::COMMA);
|
||||||
args_or_capture_items = self.parse_seq_to_before_end(
|
args_or_capture_items = self.parse_seq_to_before_end(
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
sep,
|
sep,
|
||||||
parse_arg_fn
|
parse_arg_fn
|
||||||
);
|
);
|
||||||
@@ -2882,7 +2882,7 @@ pub impl Parser {
|
|||||||
} else {
|
} else {
|
||||||
let sep = seq_sep_trailing_disallowed(token::COMMA);
|
let sep = seq_sep_trailing_disallowed(token::COMMA);
|
||||||
args_or_capture_items = self.parse_seq_to_before_end(
|
args_or_capture_items = self.parse_seq_to_before_end(
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
sep,
|
sep,
|
||||||
parse_arg_fn
|
parse_arg_fn
|
||||||
);
|
);
|
||||||
@@ -2910,8 +2910,8 @@ pub impl Parser {
|
|||||||
~[]
|
~[]
|
||||||
} else {
|
} else {
|
||||||
self.parse_unspanned_seq(
|
self.parse_unspanned_seq(
|
||||||
token::BINOP(token::OR),
|
&token::BINOP(token::OR),
|
||||||
token::BINOP(token::OR),
|
&token::BINOP(token::OR),
|
||||||
seq_sep_trailing_disallowed(token::COMMA),
|
seq_sep_trailing_disallowed(token::COMMA),
|
||||||
|p| p.parse_fn_block_arg()
|
|p| p.parse_fn_block_arg()
|
||||||
)
|
)
|
||||||
@@ -3112,7 +3112,7 @@ pub impl Parser {
|
|||||||
|
|
||||||
fn parse_trait_ref_list(ket: &token::Token) -> ~[@trait_ref] {
|
fn parse_trait_ref_list(ket: &token::Token) -> ~[@trait_ref] {
|
||||||
self.parse_seq_to_before_end(
|
self.parse_seq_to_before_end(
|
||||||
*ket,
|
ket,
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_trait_ref()
|
|p| p.parse_trait_ref()
|
||||||
)
|
)
|
||||||
@@ -3163,8 +3163,8 @@ pub impl Parser {
|
|||||||
// It's a tuple-like struct.
|
// It's a tuple-like struct.
|
||||||
is_tuple_like = true;
|
is_tuple_like = true;
|
||||||
fields = do self.parse_unspanned_seq(
|
fields = do self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_allowed(token::COMMA)
|
seq_sep_trailing_allowed(token::COMMA)
|
||||||
) |p| {
|
) |p| {
|
||||||
let lo = p.span.lo;
|
let lo = p.span.lo;
|
||||||
@@ -3729,8 +3729,8 @@ pub impl Parser {
|
|||||||
} else if *self.token == token::LPAREN {
|
} else if *self.token == token::LPAREN {
|
||||||
all_nullary = false;
|
all_nullary = false;
|
||||||
let arg_tys = self.parse_unspanned_seq(
|
let arg_tys = self.parse_unspanned_seq(
|
||||||
token::LPAREN,
|
&token::LPAREN,
|
||||||
token::RPAREN,
|
&token::RPAREN,
|
||||||
seq_sep_trailing_disallowed(token::COMMA),
|
seq_sep_trailing_disallowed(token::COMMA),
|
||||||
|p| p.parse_ty(false)
|
|p| p.parse_ty(false)
|
||||||
);
|
);
|
||||||
@@ -3982,8 +3982,8 @@ pub impl Parser {
|
|||||||
token::LPAREN | token::LBRACE => {
|
token::LPAREN | token::LBRACE => {
|
||||||
let ket = token::flip_delimiter(&*self.token);
|
let ket = token::flip_delimiter(&*self.token);
|
||||||
self.parse_unspanned_seq(
|
self.parse_unspanned_seq(
|
||||||
*self.token,
|
© *self.token,
|
||||||
ket,
|
&ket,
|
||||||
seq_sep_none(),
|
seq_sep_none(),
|
||||||
|p| p.parse_token_tree()
|
|p| p.parse_token_tree()
|
||||||
)
|
)
|
||||||
@@ -4074,8 +4074,8 @@ pub impl Parser {
|
|||||||
// foo::bar::{a,b,c}
|
// foo::bar::{a,b,c}
|
||||||
token::LBRACE => {
|
token::LBRACE => {
|
||||||
let idents = self.parse_unspanned_seq(
|
let idents = self.parse_unspanned_seq(
|
||||||
token::LBRACE,
|
&token::LBRACE,
|
||||||
token::RBRACE,
|
&token::RBRACE,
|
||||||
seq_sep_trailing_allowed(token::COMMA),
|
seq_sep_trailing_allowed(token::COMMA),
|
||||||
|p| p.parse_path_list_ident()
|
|p| p.parse_path_list_ident()
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user