From b453c3c72825f70499819d97b879c805cac1e5b1 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Tue, 3 May 2011 15:50:56 -0700 Subject: [PATCH] Start sketching --depend support in rustc. --- src/comp/driver/rustc.rs | 1 + src/comp/front/eval.rs | 12 ++++++++++++ src/comp/front/parser.rs | 7 ++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index 634c6512b2a..a6f6ae05062 100644 --- a/src/comp/driver/rustc.rs +++ b/src/comp/driver/rustc.rs @@ -142,6 +142,7 @@ options: --ls list the symbols defined by a crate file -L add a directory to the library search path --noverify suppress LLVM verification step (slight speedup) + --depend print dependencies, in makefile-rule form --parse-only parse only; do not compile, assemble, or link -O optimize -S compile only; do not assemble or link diff --git a/src/comp/front/eval.rs b/src/comp/front/eval.rs index 06fa9cea0f5..a1b3392c609 100644 --- a/src/comp/front/eval.rs +++ b/src/comp/front/eval.rs @@ -24,8 +24,15 @@ tag val { val_str(str); } +tag eval_mode { + mode_depend; + mode_parse; +} + type env = vec[tup(ident, val)]; type ctx = @rec(parser p, + eval_mode mode, + mutable vec[str] deps, session.session sess, mutable uint chpos); @@ -383,6 +390,11 @@ fn eval_crate_directive(ctx cx, auto full_path = prefix + std.fs.path_sep() + file_path; + if (cx.mode == mode_depend) { + cx.deps += vec(full_path); + ret; + } + auto start_id = cx.p.next_def_id(); auto p0 = new_parser(cx.sess, e, start_id, full_path, cx.chpos); auto m0 = parse_mod_items(p0, token.EOF); diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index 4beb5afc260..904efc2ea4e 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -2497,7 +2497,12 @@ fn parse_crate_from_crate_file(parser p) -> @ast.crate { auto lo = p.get_lo_pos(); auto prefix = std.fs.dirname(p.get_filemap().name); auto cdirs = parse_crate_directives(p, token.EOF); - auto cx = @rec(p=p, sess=p.get_session(), mutable chpos=p.get_chpos()); + let vec[str] deps = vec(); + auto cx = @rec(p=p, + mode=eval.mode_parse, + mutable deps = deps, + sess=p.get_session(), + mutable chpos=p.get_chpos()); auto m = eval.eval_crate_directives_to_mod(cx, p.get_env(), cdirs, prefix); auto hi = p.get_hi_pos();