Add the interner to parse_sess.

This commit is contained in:
Paul Stansifer 2012-06-06 09:50:08 -07:00
parent 85ded92736
commit 1e36d216be
9 changed files with 47 additions and 104 deletions

View File

@ -238,15 +238,7 @@ fn load_link(mis: [@ast::meta_item]) -> (option<str>,
}
fn load_crate(filename: str) -> option<crate> {
let cm = codemap::new_codemap();
let handler = diagnostic::mk_handler(none);
let sess = @{
cm: cm,
mut next_id: 1,
span_diagnostic: diagnostic::mk_span_handler(handler, cm),
mut chpos: 0u,
mut byte_pos: 0u
};
let sess = parse::new_parse_sess(none);
let c = parse::parse_crate_from_crate_file(filename, [], sess);
let mut name = none;

View File

@ -416,15 +416,7 @@ fn check_compiling(filename: str) -> happiness {
fn parse_and_print(code: @str) -> str {
let filename = "tmp.rs";
let cm = codemap::new_codemap();
let handler = diagnostic::mk_handler(none);
let sess = @{
cm: cm,
mut next_id: 1,
span_diagnostic: diagnostic::mk_span_handler(handler, cm),
mut chpos: 0u,
mut byte_pos: 0u
};
let sess = parse::new_parse_sess(option::none);
write_file(filename, *code);
let crate = parse::parse_crate_from_source_str(
filename, code, [], sess);
@ -566,15 +558,7 @@ fn check_variants(files: [str], cx: context) {
}
log(error, "check_variants: " + file);
let cm = codemap::new_codemap();
let handler = diagnostic::mk_handler(none);
let sess = @{
cm: cm,
mut next_id: 1,
span_diagnostic: diagnostic::mk_span_handler(handler, cm),
mut chpos: 0u,
mut byte_pos: 0u
};
let sess = parse::new_parse_sess(option::none);
let crate =
parse::parse_crate_from_source_str(
file,

View File

@ -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") }
}
}

View File

@ -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)
}

View File

@ -508,8 +508,7 @@ fn build_session(sopts: @session::options,
}
fn build_session_(
sopts: @session::options,
codemap: codemap::codemap,
sopts: @session::options, cm: codemap::codemap,
demitter: diagnostic::emitter,
span_diagnostic_handler: diagnostic::span_handler
) -> session {
@ -523,14 +522,9 @@ fn build_session_(
@{targ_cfg: target_cfg,
opts: sopts,
cstore: cstore,
parse_sess: @{
cm: codemap,
mut next_id: 1,
span_diagnostic: span_diagnostic_handler,
mut chpos: 0u,
mut byte_pos: 0u
},
codemap: codemap,
parse_sess:
parse::new_parse_sess_special_handler(span_diagnostic_handler, cm),
codemap: cm,
// For a library crate, this is always none
mut main_fn: none,
span_diagnostic: span_diagnostic_handler,

View File

@ -1018,20 +1018,6 @@ fn decode_item_ast(par_doc: ebml::doc) -> @ast::item {
@ast::deserialize_item(d)
}
#[cfg(test)]
fn new_parse_sess() -> parse::parse_sess {
let cm = codemap::new_codemap();
let handler = diagnostic::mk_handler(option::none);
let sess = @{
cm: cm,
mut next_id: 1,
span_diagnostic: diagnostic::mk_span_handler(handler, cm),
mut chpos: 0u,
mut byte_pos: 0u
};
ret sess;
}
#[cfg(test)]
iface fake_ext_ctxt {
fn cfg() -> ast::crate_cfg;
@ -1044,7 +1030,7 @@ type fake_session = ();
#[cfg(test)]
impl of fake_ext_ctxt for fake_session {
fn cfg() -> ast::crate_cfg { [] }
fn parse_sess() -> parse::parse_sess { new_parse_sess() }
fn parse_sess() -> parse::parse_sess { parse::new_parse_sess(none) }
}
#[cfg(test)]

View File

@ -27,15 +27,7 @@ mod test {
import syntax::codemap;
import syntax::diagnostic;
let cm = codemap::new_codemap();
let handler = diagnostic::mk_handler(none);
let parse_sess = @{
cm: cm,
mut next_id: 0,
span_diagnostic: diagnostic::mk_span_handler(handler, cm),
mut chpos: 0u,
mut byte_pos: 0u
};
let parse_sess = syntax::parse::new_parse_sess(none);
let parser = parse::new_parser_from_source_str(
parse_sess, [], "-", codemap::fss_none, @source);

View File

@ -10,27 +10,14 @@ import syntax::parse;
export from_file, from_str, from_file_sess, from_str_sess;
fn new_parse_sess() -> parse::parse_sess {
let cm = codemap::new_codemap();
let handler = diagnostic::mk_handler(none);
let sess = @{
cm: cm,
mut next_id: 1,
span_diagnostic: diagnostic::mk_span_handler(handler, cm),
mut chpos: 0u,
mut byte_pos: 0u
};
ret sess;
}
fn from_file(file: str) -> @ast::crate {
parse::parse_crate_from_file(
file, [], new_parse_sess())
file, [], parse::new_parse_sess(none))
}
fn from_str(source: str) -> @ast::crate {
parse::parse_crate_from_source_str(
"-", @source, [], new_parse_sess())
"-", @source, [], parse::new_parse_sess(none))
}
fn from_file_sess(sess: session::session, file: str) -> @ast::crate {

View File

@ -11,19 +11,6 @@ import syntax::codemap;
import syntax::parse;
import syntax::print::*;
fn new_parse_sess() -> parse::parse_sess {
let cm = codemap::new_codemap();
let handler = diagnostic::mk_handler(option::none);
let sess = @{
cm: cm,
mut next_id: 1,
span_diagnostic: diagnostic::mk_span_handler(handler, cm),
mut chpos: 0u,
mut byte_pos: 0u
};
ret sess;
}
iface fake_ext_ctxt {
fn cfg() -> ast::crate_cfg;
fn parse_sess() -> parse::parse_sess;
@ -33,7 +20,7 @@ type fake_session = ();
impl of fake_ext_ctxt for fake_session {
fn cfg() -> ast::crate_cfg { [] }
fn parse_sess() -> parse::parse_sess { new_parse_sess() }
fn parse_sess() -> parse::parse_sess { parse::new_parse_sess(none) }
}
fn mk_ctxt() -> fake_ext_ctxt {