diff options
| author | Paul Stansifer <paul.stansifer@gmail.com> | 2012-06-07 15:33:59 -0700 |
|---|---|---|
| committer | Paul Stansifer <paul.stansifer@gmail.com> | 2012-06-15 12:41:41 -0700 |
| commit | d03c04b6ead225860b21b3540681a2ba58b220df (patch) | |
| tree | 6f019252dc26b782c89d11312c85f7b93c433acb /src/libsyntax/parse | |
| parent | 2f8be7dcbb7c5e507051210839e8b58e95d32887 (diff) | |
| download | rust-d03c04b6ead225860b21b3540681a2ba58b220df.tar.gz rust-d03c04b6ead225860b21b3540681a2ba58b220df.zip | |
Make tt lexers duplicatible.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 18 |
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, |
