about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorPaul Stansifer <paul.stansifer@gmail.com>2012-06-07 15:33:59 -0700
committerPaul Stansifer <paul.stansifer@gmail.com>2012-06-15 12:41:41 -0700
commitd03c04b6ead225860b21b3540681a2ba58b220df (patch)
tree6f019252dc26b782c89d11312c85f7b93c433acb /src/libsyntax/parse
parent2f8be7dcbb7c5e507051210839e8b58e95d32887 (diff)
downloadrust-d03c04b6ead225860b21b3540681a2ba58b220df.tar.gz
rust-d03c04b6ead225860b21b3540681a2ba58b220df.zip
Make tt lexers duplicatible.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/lexer.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs
index ff4c9f5811e..f0a9d7dd302 100644
--- a/src/libsyntax/parse/lexer.rs
+++ b/src/libsyntax/parse/lexer.rs
@@ -4,7 +4,7 @@ import diagnostic;
 import ast::{tt_delim,tt_flat};
 
 export reader, string_reader, new_string_reader, is_whitespace;
-export tt_reader,  new_tt_reader;
+export tt_reader,  new_tt_reader, dup_tt_reader;
 export nextch, is_eof, bump, get_str_from;
 export string_reader_as_reader, tt_reader_as_reader;
 
@@ -49,6 +49,22 @@ fn new_tt_reader(span_diagnostic: diagnostic::span_handler,
     ret r;
 }
 
+pure fn dup_tt_frame(&&f: tt_frame) -> tt_frame {
+    @{readme: f.readme, mut idx: f.idx,
+      up: alt f.up {
+        tt_frame_up(o_f) {
+          tt_frame_up(option::map(o_f, dup_tt_frame))
+        }
+      }
+     }
+}
+
+pure fn dup_tt_reader(&&r: tt_reader) -> tt_reader {
+    @{span_diagnostic: r.span_diagnostic, interner: r.interner,
+      mut cur: dup_tt_frame(r.cur),
+      mut cur_tok: r.cur_tok, mut cur_chpos: r.cur_chpos}
+}
+
 type string_reader = @{
     span_diagnostic: diagnostic::span_handler,
     src: @str,