diff options
| author | Paul Stansifer <paul.stansifer@gmail.com> | 2012-06-06 09:50:08 -0700 |
|---|---|---|
| committer | Paul Stansifer <paul.stansifer@gmail.com> | 2012-06-15 12:41:41 -0700 |
| commit | 1e36d216bebc9ae5b1bfd2cd013e7e707199cdf7 (patch) | |
| tree | bc39925f522d9f49baebf161a558df46a12e691d /src/libsyntax | |
| parent | 85ded92736290073b6c591c2607ee3d829cb2874 (diff) | |
| download | rust-1e36d216bebc9ae5b1bfd2cd013e7e707199cdf7.tar.gz rust-1e36d216bebc9ae5b1bfd2cd013e7e707199cdf7.zip | |
Add the interner to parse_sess.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/parse.rs | 45 |
2 files changed, 35 insertions, 14 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 8bc1f7a3433..382b81e1c4d 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -49,6 +49,10 @@ 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 29cbb9db839..cd6fc0be31c 100644 --- a/src/libsyntax/parse.rs +++ b/src/libsyntax/parse.rs @@ -2,6 +2,8 @@ import dvec::extensions; export parse_sess; +export new_parse_sess; +export new_parse_sess_special_handler; export next_node_id; export new_parser_from_file; export new_parser_etc_from_file; @@ -20,16 +22,38 @@ import ast::node_id; import util::interner; import lexer::{string_reader_as_reader, tt_reader_as_reader, reader, string_reader, tt_reader}; +import diagnostic::{span_handler, mk_span_handler, mk_handler, emitter}; type parse_sess = @{ cm: codemap::codemap, mut next_id: node_id, - span_diagnostic: diagnostic::span_handler, + span_diagnostic: span_handler, + interner: @interner::interner<@str>, // these two must be kept up to date mut chpos: uint, mut byte_pos: uint }; +fn new_parse_sess(demitter: option<emitter>) -> parse_sess { + let cm = codemap::new_codemap(); + ret @{cm: cm, + mut next_id: 1, + span_diagnostic: mk_span_handler(mk_handler(demitter), cm), + interner: @interner::mk::<@str>({|x|str::hash(*x)}, + {|x,y|str::eq(*x, *y)}), + mut chpos: 0u, mut byte_pos: 0u}; +} + +fn new_parse_sess_special_handler(sh: span_handler, cm: codemap::codemap) + -> parse_sess { + ret @{cm: cm, + mut next_id: 1, + span_diagnostic: sh, + interner: @interner::mk::<@str>({|x|str::hash(*x)}, + {|x,y|str::eq(*x, *y)}), + mut chpos: 0u, mut byte_pos: 0u}; +} + fn parse_crate_from_file(input: str, cfg: ast::crate_cfg, sess: parse_sess) -> @ast::crate { if str::ends_with(input, ".rc") { @@ -139,11 +163,8 @@ fn new_parser_etc_from_source_str(sess: parse_sess, cfg: ast::crate_cfg, let filemap = codemap::new_filemap_w_substr (name, ss, source, sess.chpos, sess.byte_pos); sess.cm.files.push(filemap); - let itr = @interner::mk::<@str>( - {|x|str::hash(*x)}, - {|x,y|str::eq(*x, *y)} - ); - let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap, itr); + let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap, + sess.interner); ret (parser(sess, cfg, srdr as reader, ftype), srdr); } @@ -166,11 +187,8 @@ fn new_parser_etc_from_file(sess: parse_sess, cfg: ast::crate_cfg, +path: str, let src = @result::unwrap(res); let filemap = codemap::new_filemap(path, src, sess.chpos, sess.byte_pos); sess.cm.files.push(filemap); - let itr = @interner::mk::<@str>( - {|x|str::hash(*x)}, - {|x,y|str::eq(*x, *y)} - ); - let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap, itr); + let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap, + sess.interner); ret (parser(sess, cfg, srdr as reader, ftype), srdr); } @@ -181,8 +199,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, - itr: @interner::interner<@str>, tt: ast::token_tree) - -> parser { - let trdr = lexer::new_tt_reader(sess.span_diagnostic, itr, tt); + 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) } |
