Skip to content

Commit 34c32bc

Browse files
committed
---
yaml --- r: 20762 b: refs/heads/snap-stage3 c: 0bd6371 h: refs/heads/master v: v3
1 parent e9f0b34 commit 34c32bc

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: e430a699f2c60890d9b86069fd0c68a70ece7120
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 8e7fb8e8f5c7175bb18e38c266de3ccce16189bb
4+
refs/heads/snap-stage3: 0bd6371155d187ce8d8ad5c0a45ea344804f6813
55
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libsyntax/parse/parser.rs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -883,9 +883,15 @@ class parser {
883883
/* `!`, as an operator, is prefix, so we know this isn't that */
884884
if self.token == token::NOT {
885885
self.bump();
886-
let tts = self.parse_unspanned_seq(
887-
token::LBRACE, token::RBRACE, seq_sep_none(),
888-
|p| p.parse_token_tree());
886+
let tts = alt self.token {
887+
token::LPAREN | token::LBRACE | token::LBRACKET {
888+
let ket = token::flip_delimiter(self.token);
889+
self.parse_unspanned_seq(copy self.token, ket,
890+
seq_sep_none(),
891+
|p| p.parse_token_tree())
892+
}
893+
_ { self.fatal(~"expected open delimiter"); }
894+
};
889895
let hi = self.span.hi;
890896

891897
ret pexpr(self.mk_mac_expr(lo, hi, mac_invoc_tt(pth, tts)));
@@ -1083,16 +1089,6 @@ class parser {
10831089
}
10841090

10851091
fn parse_token_tree() -> token_tree {
1086-
/// what's the opposite delimiter?
1087-
fn flip(&t: token::token) -> token::token {
1088-
alt t {
1089-
token::LPAREN { token::RPAREN }
1090-
token::LBRACE { token::RBRACE }
1091-
token::LBRACKET { token::RBRACKET }
1092-
_ { fail }
1093-
}
1094-
}
1095-
10961092
fn parse_tt_tok(p: parser, delim_ok: bool) -> token_tree {
10971093
alt p.token {
10981094
token::RPAREN | token::RBRACE | token::RBRACKET
@@ -1127,7 +1123,7 @@ class parser {
11271123
11281124
ret alt self.token {
11291125
token::LPAREN | token::LBRACE | token::LBRACKET {
1130-
let ket = flip(self.token);
1126+
let ket = token::flip_delimiter(self.token);
11311127
tt_delim(vec::append(
11321128
~[parse_tt_tok(self, true)],
11331129
vec::append(
@@ -2718,9 +2714,15 @@ class parser {
27182714
let pth = self.parse_path_without_tps();
27192715
self.expect(token::NOT);
27202716
let id = self.parse_ident();
2721-
let tts = self.parse_unspanned_seq(token::LBRACE, token::RBRACE,
2722-
seq_sep_none(),
2723-
|p| p.parse_token_tree());
2717+
let tts = alt self.token {
2718+
token::LPAREN | token::LBRACE | token::LBRACKET {
2719+
let ket = token::flip_delimiter(self.token);
2720+
self.parse_unspanned_seq(copy self.token, ket,
2721+
seq_sep_none(),
2722+
|p| p.parse_token_tree())
2723+
}
2724+
_ { self.fatal(~"expected open delimiter"); }
2725+
};
27242726
let m = ast::mac_invoc_tt(pth, tts);
27252727
let m: ast::mac = {node: m,
27262728
span: {lo: self.span.lo,

branches/snap-stage3/src/libsyntax/parse/token.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,21 @@ pure fn can_begin_expr(t: token) -> bool {
225225
}
226226
}
227227

228+
/// what's the opposite delimiter?
229+
fn flip_delimiter(&t: token::token) -> token::token {
230+
alt t {
231+
token::LPAREN { token::RPAREN }
232+
token::LBRACE { token::RBRACE }
233+
token::LBRACKET { token::RBRACKET }
234+
token::RPAREN { token::LPAREN }
235+
token::RBRACE { token::LBRACE }
236+
token::RBRACKET { token::LBRACKET }
237+
_ { fail }
238+
}
239+
}
240+
241+
242+
228243
fn is_lit(t: token) -> bool {
229244
alt t {
230245
LIT_INT(_, _) { true }

0 commit comments

Comments
 (0)