De-@ codemap and diagnostic.
This commit is contained in:
parent
0bb6de3076
commit
871e570810
33 changed files with 311 additions and 356 deletions
|
@ -13,13 +13,13 @@
|
|||
|
||||
use ast;
|
||||
use codemap::{Span, CodeMap, FileMap};
|
||||
use codemap;
|
||||
use diagnostic::{SpanHandler, mk_span_handler, default_handler};
|
||||
use parse::attr::ParserAttr;
|
||||
use parse::parser::Parser;
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::io::File;
|
||||
use std::rc::Rc;
|
||||
use std::str;
|
||||
use std::vec_ng::Vec;
|
||||
|
||||
|
@ -40,26 +40,20 @@ pub mod obsolete;
|
|||
|
||||
// info about a parsing session.
|
||||
pub struct ParseSess {
|
||||
cm: @codemap::CodeMap, // better be the same as the one in the reader!
|
||||
span_diagnostic: @SpanHandler, // better be the same as the one in the reader!
|
||||
span_diagnostic: SpanHandler, // better be the same as the one in the reader!
|
||||
/// Used to determine and report recursive mod inclusions
|
||||
included_mod_stack: RefCell<Vec<Path> >,
|
||||
included_mod_stack: RefCell<Vec<Path>>,
|
||||
}
|
||||
|
||||
pub fn new_parse_sess() -> ParseSess {
|
||||
let cm = @CodeMap::new();
|
||||
ParseSess {
|
||||
cm: cm,
|
||||
span_diagnostic: mk_span_handler(default_handler(), cm),
|
||||
span_diagnostic: mk_span_handler(default_handler(), CodeMap::new()),
|
||||
included_mod_stack: RefCell::new(Vec::new()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_parse_sess_special_handler(sh: @SpanHandler,
|
||||
cm: @codemap::CodeMap)
|
||||
-> ParseSess {
|
||||
pub fn new_parse_sess_special_handler(sh: SpanHandler) -> ParseSess {
|
||||
ParseSess {
|
||||
cm: cm,
|
||||
span_diagnostic: sh,
|
||||
included_mod_stack: RefCell::new(Vec::new()),
|
||||
}
|
||||
|
@ -175,40 +169,36 @@ pub fn parse_tts_from_source_str(name: ~str,
|
|||
|
||||
// Create a new parser from a source string
|
||||
pub fn new_parser_from_source_str<'a>(sess: &'a ParseSess,
|
||||
cfg: ast::CrateConfig,
|
||||
name: ~str,
|
||||
source: ~str)
|
||||
-> Parser<'a> {
|
||||
filemap_to_parser(sess,string_to_filemap(sess,source,name),cfg)
|
||||
cfg: ast::CrateConfig,
|
||||
name: ~str,
|
||||
source: ~str)
|
||||
-> Parser<'a> {
|
||||
filemap_to_parser(sess, string_to_filemap(sess, source, name), cfg)
|
||||
}
|
||||
|
||||
/// Create a new parser, handling errors as appropriate
|
||||
/// if the file doesn't exist
|
||||
pub fn new_parser_from_file<'a>(
|
||||
sess: &'a ParseSess,
|
||||
cfg: ast::CrateConfig,
|
||||
path: &Path
|
||||
) -> Parser<'a> {
|
||||
filemap_to_parser(sess,file_to_filemap(sess,path,None),cfg)
|
||||
pub fn new_parser_from_file<'a>(sess: &'a ParseSess,
|
||||
cfg: ast::CrateConfig,
|
||||
path: &Path) -> Parser<'a> {
|
||||
filemap_to_parser(sess, file_to_filemap(sess, path, None), cfg)
|
||||
}
|
||||
|
||||
/// Given a session, a crate config, a path, and a span, add
|
||||
/// the file at the given path to the codemap, and return a parser.
|
||||
/// On an error, use the given span as the source of the problem.
|
||||
pub fn new_sub_parser_from_file<'a>(
|
||||
sess: &'a ParseSess,
|
||||
cfg: ast::CrateConfig,
|
||||
path: &Path,
|
||||
sp: Span
|
||||
) -> Parser<'a> {
|
||||
filemap_to_parser(sess,file_to_filemap(sess,path,Some(sp)),cfg)
|
||||
pub fn new_sub_parser_from_file<'a>(sess: &'a ParseSess,
|
||||
cfg: ast::CrateConfig,
|
||||
path: &Path,
|
||||
sp: Span) -> Parser<'a> {
|
||||
filemap_to_parser(sess, file_to_filemap(sess, path, Some(sp)), cfg)
|
||||
}
|
||||
|
||||
/// Given a filemap and config, return a parser
|
||||
pub fn filemap_to_parser<'a>(sess: &'a ParseSess,
|
||||
filemap: @FileMap,
|
||||
filemap: Rc<FileMap>,
|
||||
cfg: ast::CrateConfig) -> Parser<'a> {
|
||||
tts_to_parser(sess,filemap_to_tts(sess,filemap),cfg)
|
||||
tts_to_parser(sess, filemap_to_tts(sess, filemap), cfg)
|
||||
}
|
||||
|
||||
// must preserve old name for now, because quote! from the *existing*
|
||||
|
@ -216,7 +206,7 @@ pub fn filemap_to_parser<'a>(sess: &'a ParseSess,
|
|||
pub fn new_parser_from_tts<'a>(sess: &'a ParseSess,
|
||||
cfg: ast::CrateConfig,
|
||||
tts: Vec<ast::TokenTree>) -> Parser<'a> {
|
||||
tts_to_parser(sess,tts,cfg)
|
||||
tts_to_parser(sess, tts, cfg)
|
||||
}
|
||||
|
||||
|
||||
|
@ -225,7 +215,7 @@ pub fn new_parser_from_tts<'a>(sess: &'a ParseSess,
|
|||
/// Given a session and a path and an optional span (for error reporting),
|
||||
/// add the path to the session's codemap and return the new filemap.
|
||||
pub fn file_to_filemap(sess: &ParseSess, path: &Path, spanopt: Option<Span>)
|
||||
-> @FileMap {
|
||||
-> Rc<FileMap> {
|
||||
let err = |msg: &str| {
|
||||
match spanopt {
|
||||
Some(sp) => sess.span_diagnostic.span_fatal(sp, msg),
|
||||
|
@ -251,17 +241,17 @@ pub fn file_to_filemap(sess: &ParseSess, path: &Path, spanopt: Option<Span>)
|
|||
// given a session and a string, add the string to
|
||||
// the session's codemap and return the new filemap
|
||||
pub fn string_to_filemap(sess: &ParseSess, source: ~str, path: ~str)
|
||||
-> @FileMap {
|
||||
sess.cm.new_filemap(path, source)
|
||||
-> Rc<FileMap> {
|
||||
sess.span_diagnostic.cm.new_filemap(path, source)
|
||||
}
|
||||
|
||||
// given a filemap, produce a sequence of token-trees
|
||||
pub fn filemap_to_tts(sess: &ParseSess, filemap: @FileMap)
|
||||
pub fn filemap_to_tts(sess: &ParseSess, filemap: Rc<FileMap>)
|
||||
-> Vec<ast::TokenTree> {
|
||||
// it appears to me that the cfg doesn't matter here... indeed,
|
||||
// parsing tt's probably shouldn't require a parser at all.
|
||||
let cfg = Vec::new();
|
||||
let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap);
|
||||
let srdr = lexer::new_string_reader(&sess.span_diagnostic, filemap);
|
||||
let mut p1 = Parser(sess, cfg, ~srdr);
|
||||
p1.parse_all_token_trees()
|
||||
}
|
||||
|
@ -270,7 +260,7 @@ pub fn filemap_to_tts(sess: &ParseSess, filemap: @FileMap)
|
|||
pub fn tts_to_parser<'a>(sess: &'a ParseSess,
|
||||
tts: Vec<ast::TokenTree>,
|
||||
cfg: ast::CrateConfig) -> Parser<'a> {
|
||||
let trdr = lexer::new_tt_reader(sess.span_diagnostic, None, tts);
|
||||
let trdr = lexer::new_tt_reader(&sess.span_diagnostic, None, tts);
|
||||
Parser(sess, cfg, ~trdr)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue