Revert "librustc: Make unqualified identifier searches terminate at the nearest module scope. r=tjc"

This reverts commit a8d37af247.
This commit is contained in:
Patrick Walton 2013-01-08 19:29:16 -08:00
parent a8d37af247
commit 44ab00ee37
250 changed files with 453 additions and 1342 deletions

View file

@ -10,6 +10,8 @@
//! The main parser interface
#[legacy_exports];
use ast::node_id;
use ast;
use codemap::{span, CodeMap, FileMap, CharPos, BytePos};
@ -22,47 +24,70 @@ use parse::token::{ident_interner, mk_ident_interner};
use util::interner;
use core::io;
use core::option::{None, Option, Some};
use core::path::Path;
use core::result::{Err, Ok, Result};
use core::result;
export parser;
export common;
export lexer;
export token;
export comments;
export prec;
export classify;
export attr;
export obsolete;
export parse_sess;
export new_parse_sess, new_parse_sess_special_handler;
export next_node_id;
export new_parser_from_file, new_parser_etc_from_file;
export new_parser_from_source_str;
export new_parser_from_tts;
export new_sub_parser_from_file;
export parse_crate_from_file, parse_crate_from_crate_file;
export parse_crate_from_source_str;
export parse_expr_from_source_str, parse_item_from_source_str;
export parse_stmt_from_source_str;
export parse_tts_from_source_str;
export parse_from_source_str;
#[legacy_exports]
pub mod lexer;
mod lexer;
#[legacy_exports]
pub mod parser;
mod parser;
#[legacy_exports]
pub mod token;
mod token;
#[legacy_exports]
pub mod comments;
mod comments;
#[legacy_exports]
pub mod attr;
mod attr;
#[legacy_exports]
/// Common routines shared by parser mods
#[legacy_exports]
pub mod common;
mod common;
/// Functions dealing with operator precedence
#[legacy_exports]
pub mod prec;
mod prec;
/// Routines the parser uses to classify AST nodes
#[legacy_exports]
pub mod classify;
mod classify;
/// Reporting obsolete syntax
#[legacy_exports]
pub mod obsolete;
mod obsolete;
pub type parse_sess = @{
type parse_sess = @{
cm: @codemap::CodeMap,
mut next_id: node_id,
span_diagnostic: span_handler,
interner: @ident_interner,
};
pub fn new_parse_sess(demitter: Option<emitter>) -> parse_sess {
fn new_parse_sess(demitter: Option<emitter>) -> parse_sess {
let cm = @CodeMap::new();
return @{cm: cm,
mut next_id: 1,
@ -71,7 +96,7 @@ pub fn new_parse_sess(demitter: Option<emitter>) -> parse_sess {
};
}
pub fn new_parse_sess_special_handler(sh: span_handler, cm: @codemap::CodeMap)
fn new_parse_sess_special_handler(sh: span_handler, cm: @codemap::CodeMap)
-> parse_sess {
return @{cm: cm,
mut next_id: 1,
@ -80,17 +105,15 @@ pub fn new_parse_sess_special_handler(sh: span_handler, cm: @codemap::CodeMap)
};
}
pub fn parse_crate_from_file(input: &Path, cfg: ast::crate_cfg,
fn parse_crate_from_file(input: &Path, cfg: ast::crate_cfg,
sess: parse_sess) -> @ast::crate {
let p = new_crate_parser_from_file(sess, cfg, input);
let r = p.parse_crate_mod(cfg);
return r;
}
pub fn parse_crate_from_source_str(name: ~str,
source: @~str,
cfg: ast::crate_cfg,
sess: parse_sess) -> @ast::crate {
fn parse_crate_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
sess: parse_sess) -> @ast::crate {
let p = new_parser_from_source_str(sess, cfg, name,
codemap::FssNone, source);
let r = p.parse_crate_mod(cfg);
@ -98,10 +121,8 @@ pub fn parse_crate_from_source_str(name: ~str,
return r;
}
pub fn parse_expr_from_source_str(name: ~str,
source: @~str,
cfg: ast::crate_cfg,
sess: parse_sess) -> @ast::expr {
fn parse_expr_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
sess: parse_sess) -> @ast::expr {
let p = new_parser_from_source_str(sess, cfg, name,
codemap::FssNone, source);
let r = p.parse_expr();
@ -109,12 +130,9 @@ pub fn parse_expr_from_source_str(name: ~str,
return r;
}
pub fn parse_item_from_source_str(name: ~str,
source: @~str,
cfg: ast::crate_cfg,
+attrs: ~[ast::attribute],
sess: parse_sess)
-> Option<@ast::item> {
fn parse_item_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
+attrs: ~[ast::attribute],
sess: parse_sess) -> Option<@ast::item> {
let p = new_parser_from_source_str(sess, cfg, name,
codemap::FssNone, source);
let r = p.parse_item(attrs);
@ -122,11 +140,9 @@ pub fn parse_item_from_source_str(name: ~str,
return r;
}
pub fn parse_stmt_from_source_str(name: ~str,
source: @~str,
cfg: ast::crate_cfg,
+attrs: ~[ast::attribute],
sess: parse_sess) -> @ast::stmt {
fn parse_stmt_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
+attrs: ~[ast::attribute],
sess: parse_sess) -> @ast::stmt {
let p = new_parser_from_source_str(sess, cfg, name,
codemap::FssNone, source);
let r = p.parse_stmt(attrs);
@ -134,10 +150,8 @@ pub fn parse_stmt_from_source_str(name: ~str,
return r;
}
pub fn parse_tts_from_source_str(name: ~str,
source: @~str,
cfg: ast::crate_cfg,
sess: parse_sess) -> ~[ast::token_tree] {
fn parse_tts_from_source_str(name: ~str, source: @~str, cfg: ast::crate_cfg,
sess: parse_sess) -> ~[ast::token_tree] {
let p = new_parser_from_source_str(sess, cfg, name,
codemap::FssNone, source);
p.quote_depth += 1u;
@ -146,7 +160,7 @@ pub fn parse_tts_from_source_str(name: ~str,
return r;
}
pub fn parse_from_source_str<T>(f: fn (p: Parser) -> T,
fn parse_from_source_str<T>(f: fn (p: Parser) -> T,
name: ~str, ss: codemap::FileSubstr,
source: @~str, cfg: ast::crate_cfg,
sess: parse_sess)
@ -162,7 +176,7 @@ pub fn parse_from_source_str<T>(f: fn (p: Parser) -> T,
move r
}
pub fn next_node_id(sess: parse_sess) -> node_id {
fn next_node_id(sess: parse_sess) -> node_id {
let rv = sess.next_id;
sess.next_id += 1;
// ID 0 is reserved for the crate and doesn't actually exist in the AST
@ -170,7 +184,7 @@ pub fn next_node_id(sess: parse_sess) -> node_id {
return rv;
}
pub fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
+name: ~str, +ss: codemap::FileSubstr,
source: @~str) -> Parser {
let filemap = sess.cm.new_filemap_w_substr(name, ss, source);
@ -179,7 +193,7 @@ pub fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
return Parser(sess, cfg, srdr as reader);
}
pub fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
path: &Path) -> Result<Parser, ~str> {
match io::read_whole_file_str(path) {
result::Ok(move src) => {
@ -197,7 +211,7 @@ pub fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
/// Create a new parser for an entire crate, handling errors as appropriate
/// if the file doesn't exist
pub fn new_crate_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
fn new_crate_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
path: &Path) -> Parser {
match new_parser_from_file(sess, cfg, path) {
Ok(move parser) => move parser,
@ -209,7 +223,7 @@ pub fn new_crate_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
/// Create a new parser based on a span from an existing parser. Handles
/// error messages correctly when the file does not exist.
pub fn new_sub_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
fn new_sub_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
path: &Path, sp: span) -> Parser {
match new_parser_from_file(sess, cfg, path) {
Ok(move parser) => move parser,
@ -219,7 +233,7 @@ pub fn new_sub_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg,
}
}
pub fn new_parser_from_tts(sess: parse_sess, cfg: ast::crate_cfg,
fn new_parser_from_tts(sess: parse_sess, cfg: ast::crate_cfg,
tts: ~[ast::token_tree]) -> Parser {
let trdr = lexer::new_tt_reader(sess.span_diagnostic, sess.interner,
None, tts);