diff options
| author | Paul Stansifer <paul.stansifer@gmail.com> | 2012-06-06 12:38:29 -0700 |
|---|---|---|
| committer | Paul Stansifer <paul.stansifer@gmail.com> | 2012-06-15 12:41:41 -0700 |
| commit | 2f8be7dcbb7c5e507051210839e8b58e95d32887 (patch) | |
| tree | 701f6e4903a9235198cef40e0dea8c935394c4da /src/libsyntax | |
| parent | 1e36d216bebc9ae5b1bfd2cd013e7e707199cdf7 (diff) | |
| download | rust-2f8be7dcbb7c5e507051210839e8b58e95d32887.tar.gz rust-2f8be7dcbb7c5e507051210839e8b58e95d32887.zip | |
Bugfix: obey the tt_lexer's own invariants.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/parse.rs | 15 | ||||
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 8 |
3 files changed, 13 insertions, 20 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 382b81e1c4d..1704e3afc54 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -1,11 +1,11 @@ import std::map::hashmap; -import ast::{crate, expr_, expr_mac, mac_invoc}; +import ast::{crate, expr_, expr_mac, mac_invoc, mac_invoc_tt, + tt_delim, tt_flat}; import fold::*; import ext::base::*; import ext::qquote::{qq_helper}; -import parse::parser; -import parse::parse_expr_from_source_str; +import parse::{parser, parse_expr_from_source_str, new_parser_from_tt}; import codemap::{span, expanded_from}; @@ -49,10 +49,6 @@ fn expand_expr(exts: hashmap<str, syntax_extension>, cx: ext_ctxt, } } } - /* - mac_invoc_tt(path, body) { - let p = new_parser_from_tt(cx.sess, cx.cfg, ) - }*/ _ { cx.span_bug(mac.span, "naked syntactic bit") } } } diff --git a/src/libsyntax/parse.rs b/src/libsyntax/parse.rs index cd6fc0be31c..b483e1eb9e4 100644 --- a/src/libsyntax/parse.rs +++ b/src/libsyntax/parse.rs @@ -2,17 +2,14 @@ import dvec::extensions; export parse_sess; -export new_parse_sess; -export new_parse_sess_special_handler; +export new_parse_sess, new_parse_sess_special_handler; export next_node_id; -export new_parser_from_file; -export new_parser_etc_from_file; +export new_parser_from_file, new_parser_etc_from_file; export new_parser_from_source_str; -export parse_crate_from_file; -export parse_crate_from_crate_file; +export new_parser_from_tt; +export parse_crate_from_file, parse_crate_from_crate_file; export parse_crate_from_source_str; -export parse_expr_from_source_str; -export parse_item_from_source_str; +export parse_expr_from_source_str, parse_item_from_source_str; export parse_from_source_str; import parser::parser; @@ -199,7 +196,7 @@ fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, +path: str, } fn new_parser_from_tt(sess: parse_sess, cfg: ast::crate_cfg, - tt: ast::token_tree) -> parser { + tt: [ast::token_tree]) -> parser { let trdr = lexer::new_tt_reader(sess.span_diagnostic, sess.interner, tt); ret parser(sess, cfg, trdr as reader, parser::SOURCE_FILE) } diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 51ab3085eaf..ff4c9f5811e 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; export nextch, is_eof, bump, get_str_from; export string_reader_as_reader, tt_reader_as_reader; @@ -20,8 +20,8 @@ enum tt_frame_up { /* to break a circularity */ tt_frame_up(option<tt_frame>) } +#[doc = "an unzipping of `token_tree`s"] type tt_frame = @{ - /* invariant: readme[idx] is always a tt_flat */ readme: [ast::token_tree], mut idx: uint, up: tt_frame_up @@ -37,10 +37,10 @@ type tt_reader = @{ }; fn new_tt_reader(span_diagnostic: diagnostic::span_handler, - itr: @interner::interner<@str>, src: ast::token_tree) + itr: @interner::interner<@str>, src: [ast::token_tree]) -> tt_reader { let r = @{span_diagnostic: span_diagnostic, interner: itr, - mut cur: @{readme: [src], mut idx: 0u, + mut cur: @{readme: src, mut idx: 0u, up: tt_frame_up(option::none)}, mut cur_tok: token::EOF, /* dummy value, never read */ mut cur_chpos: 0u /* dummy value, never read */ |
