diff options
| author | Paul Stansifer <paul.stansifer@gmail.com> | 2012-07-02 18:07:33 -0700 |
|---|---|---|
| committer | Paul Stansifer <paul.stansifer@gmail.com> | 2012-07-05 18:09:31 -0700 |
| commit | f94065372001f5d34b4fde73f2e6dea8aba28212 (patch) | |
| tree | e0c5508c8f1a4cf1693a8e5f5cdc00d28983a8fd /src/libsyntax/parse | |
| parent | 0c6fe6470e6a19899bd32add0a282d3ae2a97b8a (diff) | |
| download | rust-f94065372001f5d34b4fde73f2e6dea8aba28212.tar.gz rust-f94065372001f5d34b4fde73f2e6dea8aba28212.zip | |
Update the new macro demo.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 4d564563d10..c36acc572ab 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1114,22 +1114,36 @@ class parser { /* temporary */ fn parse_tt_mac_demo() -> @expr { + + let name_idx = @mut 0u; let ms = self.parse_seq(token::LBRACE, token::RBRACE, common::seq_sep_none(), - |p| p.parse_matcher(@mut 0u)).node; - let tt = self.parse_token_tree(); - //let tt_rhs = self.parse_token_tree(); - alt tt { - tt_delim(tts) { + |p| p.parse_matcher(name_idx)).node; + self.quote_depth += 1u; + let tt_rhs= self.parse_token_tree(); + self.quote_depth -= 1u; + let tt_readme = self.parse_token_tree(); + alt (tt_readme, tt_rhs) { + (tt_delim(tts), tt_delim(tts_rhs)) { let rdr = lexer::new_tt_reader(self.reader.span_diag(), self.reader.interner(), none, tts) as reader; - ext::tt::earley_parser::parse(self.sess, self.cfg, rdr, ms); + + let matches = ext::tt::earley_parser::parse + (self.sess, self.cfg, rdr, ms); + + let transcriber = ext::tt::transcribe::new_tt_reader + (self.reader.span_diag(), self.reader.interner(), + some(matches), tts_rhs); + let res_parser = parser(self.sess, self.cfg, + transcriber as reader, + SOURCE_FILE); + + ret res_parser.parse_expr(); } _ { fail; } } - ret self.mk_expr(0u, 0u, expr_break); } fn parse_matcher(name_idx: @mut uint) -> matcher { |
