about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
diff options
context:
space:
mode:
authorPaul Stansifer <paul.stansifer@gmail.com>2012-07-02 18:07:33 -0700
committerPaul Stansifer <paul.stansifer@gmail.com>2012-07-05 18:09:31 -0700
commitf94065372001f5d34b4fde73f2e6dea8aba28212 (patch)
treee0c5508c8f1a4cf1693a8e5f5cdc00d28983a8fd /src/libsyntax/parse/parser.rs
parent0c6fe6470e6a19899bd32add0a282d3ae2a97b8a (diff)
downloadrust-f94065372001f5d34b4fde73f2e6dea8aba28212.tar.gz
rust-f94065372001f5d34b4fde73f2e6dea8aba28212.zip
Update the new macro demo.
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
-rw-r--r--src/libsyntax/parse/parser.rs28
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 {