rustc: Add a stub crate reader module for "use" directives
This commit is contained in:
parent
bb081d6611
commit
7d32f3d052
@ -1,5 +1,6 @@
|
||||
// -*- rust -*-
|
||||
|
||||
import front.creader;
|
||||
import front.parser;
|
||||
import front.token;
|
||||
import front.eval;
|
||||
@ -53,10 +54,12 @@ impure fn parse_input(session.session sess,
|
||||
impure fn compile_input(session.session sess,
|
||||
eval.env env,
|
||||
str input, str output,
|
||||
bool shared) {
|
||||
bool shared,
|
||||
vec[str] library_search_paths) {
|
||||
auto def = tup(0, 0);
|
||||
auto p = parser.new_parser(sess, env, def, input);
|
||||
auto crate = parse_input(sess, p, input);
|
||||
crate = creader.read_crates(sess, crate);
|
||||
crate = resolve.resolve_crate(sess, crate);
|
||||
crate = typeck.check_crate(sess, crate);
|
||||
trans.trans_crate(sess, crate, output, shared);
|
||||
@ -87,6 +90,7 @@ fn usage(session.session sess, str argv0) {
|
||||
log " -glue generate glue.bc file";
|
||||
log " -shared compile a shared-library crate";
|
||||
log " -pp pretty-print the input instead of compiling";
|
||||
log " -L <path> add a directory to the library search path";
|
||||
log " -h display this message";
|
||||
log "";
|
||||
log "";
|
||||
@ -111,6 +115,7 @@ impure fn main(vec[str] args) {
|
||||
auto sess = session.session(target_cfg);
|
||||
let option.t[str] input_file = none[str];
|
||||
let option.t[str] output_file = none[str];
|
||||
let vec[str] library_search_paths = vec();
|
||||
let bool do_warn = true;
|
||||
let bool shared = false;
|
||||
let bool pretty = false;
|
||||
@ -139,6 +144,14 @@ impure fn main(vec[str] args) {
|
||||
usage(sess, args.(0));
|
||||
sess.err("-o requires an argument");
|
||||
}
|
||||
} else if (_str.eq(arg, "-L")) {
|
||||
if (i+1u < len) {
|
||||
library_search_paths += vec(args.(i+1u));
|
||||
i += 1u;
|
||||
} else {
|
||||
usage(sess, args.(0));
|
||||
sess.err("-L requires an argument");
|
||||
}
|
||||
} else if (_str.eq(arg, "-h")) {
|
||||
usage(sess, args.(0));
|
||||
} else {
|
||||
@ -193,10 +206,12 @@ impure fn main(vec[str] args) {
|
||||
parts = _vec.pop[str](parts);
|
||||
parts += ".bc";
|
||||
auto ofile = _str.concat(parts);
|
||||
compile_input(sess, env, ifile, ofile, shared);
|
||||
compile_input(sess, env, ifile, ofile, shared,
|
||||
library_search_paths);
|
||||
}
|
||||
case (some[str](?ofile)) {
|
||||
compile_input(sess, env, ifile, ofile, shared);
|
||||
compile_input(sess, env, ifile, ofile, shared,
|
||||
library_search_paths);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ type ty_param = rec(ident ident, def_id id);
|
||||
// Annotations added during successive passes.
|
||||
tag ann {
|
||||
ann_none;
|
||||
ann_crate(@external_crate_info);
|
||||
ann_type(@middle.ty.t, option.t[vec[@middle.ty.t]] /* ty param substs */);
|
||||
}
|
||||
|
||||
@ -370,6 +371,9 @@ tag native_item_ {
|
||||
native_item_fn(ident, fn_decl, vec[ty_param], def_id, ann);
|
||||
}
|
||||
|
||||
// TODO: Actually store something here.
|
||||
type external_crate_info = ();
|
||||
|
||||
fn index_view_item(mod_index index, @view_item it) {
|
||||
alt (it.node) {
|
||||
case(ast.view_item_use(?id, _, _)) {
|
||||
|
28
src/comp/front/creader.rs
Normal file
28
src/comp/front/creader.rs
Normal file
@ -0,0 +1,28 @@
|
||||
// -*- rust -*-
|
||||
|
||||
import driver.session;
|
||||
import front.ast;
|
||||
import middle.fold;
|
||||
import util.common;
|
||||
import util.common.span;
|
||||
import std.map.hashmap;
|
||||
|
||||
// TODO: map to a real type here.
|
||||
type env = @hashmap[str, @ast.external_crate_info];
|
||||
|
||||
fn fold_view_item_use(&env e, &span sp, ast.ident ident,
|
||||
vec[@ast.meta_item] meta_items, ast.def_id id) -> @ast.view_item {
|
||||
// TODO: find the crate
|
||||
|
||||
auto viu = ast.view_item_use(ident, meta_items, id);
|
||||
ret @fold.respan[ast.view_item_](sp, viu);
|
||||
}
|
||||
|
||||
// Reads external crates referenced by "use" directives.
|
||||
fn read_crates(session.session sess, @ast.crate crate) -> @ast.crate {
|
||||
auto external_crates = @common.new_str_hash[@ast.external_crate_info]();
|
||||
auto f = fold_view_item_use;
|
||||
auto fld = @rec(fold_view_item_use=f with *fold.new_identity_fold[env]());
|
||||
ret fold.fold_crate[env](external_crates, fld, crate);
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ use std;
|
||||
|
||||
mod front {
|
||||
mod ast;
|
||||
mod creader;
|
||||
mod extfmt;
|
||||
mod lexer;
|
||||
mod parser;
|
||||
|
Loading…
x
Reference in New Issue
Block a user