diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2013-02-14 21:50:03 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2013-02-27 19:42:09 -0500 |
| commit | c623d21e388315df672951fcb8efb5000923ab3d (patch) | |
| tree | 8c7116e7df304166ccafcc30b21c19bf30788f75 /src/libsyntax/parse/common.rs | |
| parent | 061a2237230d3abcdb30ecb8987e5de17e67a58e (diff) | |
| download | rust-c623d21e388315df672951fcb8efb5000923ab3d.tar.gz rust-c623d21e388315df672951fcb8efb5000923ab3d.zip | |
Introduce lifetime declarations into the lists of type parameters.
Major changes are: - replace ~[ty_param] with Generics structure, which includes both OptVec<TyParam> and OptVec<Lifetime>; - the use of syntax::opt_vec to avoid allocation for empty lists; cc #4846
Diffstat (limited to 'src/libsyntax/parse/common.rs')
| -rw-r--r-- | src/libsyntax/parse/common.rs | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/src/libsyntax/parse/common.rs b/src/libsyntax/parse/common.rs index 57d62d628dc..a92eb2db42a 100644 --- a/src/libsyntax/parse/common.rs +++ b/src/libsyntax/parse/common.rs @@ -20,6 +20,9 @@ use core::option::{None, Option, Some}; use core::option; use std::oldmap::HashMap; +use opt_vec; +use opt_vec::OptVec; + // SeqSep : a sequence separator (token) // and whether a trailing separator is allowed. pub struct SeqSep { @@ -221,10 +224,10 @@ pub impl Parser { // parse a sequence bracketed by '<' and '>', stopping // before the '>'. - fn parse_seq_to_before_gt<T:Copy>(sep: Option<token::Token>, - f: fn(Parser) -> T) -> ~[T] { + fn parse_seq_to_before_gt<T: Copy>(sep: Option<token::Token>, + f: fn(Parser) -> T) -> OptVec<T> { let mut first = true; - let mut v = ~[]; + let mut v = opt_vec::Empty; while *self.token != token::GT && *self.token != token::BINOP(token::SHR) { match sep { @@ -236,29 +239,16 @@ pub impl Parser { } v.push(f(self)); } - return v; } - fn parse_seq_to_gt<T:Copy>(sep: Option<token::Token>, - f: fn(Parser) -> T) -> ~[T] { + fn parse_seq_to_gt<T: Copy>(sep: Option<token::Token>, + f: fn(Parser) -> T) -> OptVec<T> { let v = self.parse_seq_to_before_gt(sep, f); self.expect_gt(); - return v; } - // parse a sequence bracketed by '<' and '>' - fn parse_seq_lt_gt<T:Copy>(sep: Option<token::Token>, - f: fn(Parser) -> T) -> spanned<~[T]> { - let lo = self.span.lo; - self.expect(token::LT); - let result = self.parse_seq_to_before_gt::<T>(sep, f); - let hi = self.span.hi; - self.expect_gt(); - return spanned(lo, hi, result); - } - // parse a sequence, including the closing delimiter. The function // f must consume tokens until reaching the next separator or // closing bracket. |
