From ffa7c76ed2496309330f8e738d4cd5a1e8fb0c81 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 16 Jun 2011 16:38:23 -0700 Subject: [PATCH] rustc: Change print_file to print_crate The pretty-printer needs access to the crate attributes in order to reproduce inner crate attributes in standalone .rs files Issue #487 --- src/comp/driver/rustc.rs | 4 ++-- src/comp/front/ast.rs | 4 +++- src/comp/front/parser.rs | 12 +++++++----- src/comp/pretty/pprust.rs | 7 ++++--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index a9e3748e1b50..8dfa6cb7b46f 100644 --- a/src/comp/driver/rustc.rs +++ b/src/comp/driver/rustc.rs @@ -117,8 +117,8 @@ fn pretty_print_input(session::session sess, eval::env env, str input, case (ppm_normal) { mode = ppaux::mo_untyped; } case (ppm_identified) { mode = ppaux::mo_identified; } } - pprust::print_file(sess, crate.node.module, input, std::io::stdout(), - mode); + pprust::print_crate(sess, crate, input, std::io::stdout(), + mode); } fn version(str argv0) { diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index 303c8b2909cf..86971de7cf15 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -76,7 +76,9 @@ fn def_id_of_def(def d) -> def_id { type crate = spanned[crate_]; -type crate_ = rec(vec[@crate_directive] directives, _mod module); +type crate_ = rec(vec[@crate_directive] directives, + _mod module, + vec[attribute] attrs); tag meta_visibility { export_meta; local_meta; } diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index 33ddcc6d57d0..364cd3b846e9 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -2285,13 +2285,14 @@ fn parse_native_view(&parser p) -> vec[@ast::view_item] { fn parse_crate_from_source_file(&parser p) -> @ast::crate { auto lo = p.get_lo_pos(); - // FIXME (issue #487): Do something with these attrs auto crate_attrs = parse_inner_attrs_and_next(p); auto first_item_outer_attrs = crate_attrs._1; auto m = parse_mod_items(p, token::EOF, first_item_outer_attrs); let vec[@ast::crate_directive] cdirs = []; - ret @spanned(lo, p.get_lo_pos(), rec(directives=cdirs, module=m)); + ret @spanned(lo, p.get_lo_pos(), rec(directives=cdirs, + module=m, + attrs=crate_attrs._0)); } @@ -2381,8 +2382,7 @@ fn parse_crate_directives(&parser p, token::token term) -> 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); - // FIXME (issue #487): Do something with these attrs - auto attrs = parse_inner_attrs(p); + auto crate_attrs = parse_inner_attrs(p); auto cdirs = parse_crate_directives(p, token::EOF); let vec[str] deps = []; auto cx = @@ -2396,7 +2396,9 @@ fn parse_crate_from_crate_file(&parser p) -> @ast::crate { eval::eval_crate_directives_to_mod(cx, p.get_env(), cdirs, prefix); auto hi = p.get_hi_pos(); expect(p, token::EOF); - ret @spanned(lo, hi, rec(directives=cdirs, module=m)); + ret @spanned(lo, hi, rec(directives=cdirs, + module=m, + attrs=crate_attrs)); } // // Local Variables: diff --git a/src/comp/pretty/pprust.rs b/src/comp/pretty/pprust.rs index 2ef84b2e4974..53f96e12d74e 100644 --- a/src/comp/pretty/pprust.rs +++ b/src/comp/pretty/pprust.rs @@ -27,8 +27,8 @@ import pp::inconsistent; import pp::eof; import ppaux::*; -fn print_file(session sess, ast::_mod _mod, str filename, io::writer out, - mode mode) { +fn print_crate(session sess, @ast::crate crate, str filename, + io::writer out, mode mode) { let vec[pp::breaks] boxes = []; auto r = lexer::gather_comments_and_literals(sess, filename); auto s = @@ -40,7 +40,8 @@ fn print_file(session sess, ast::_mod _mod, str filename, io::writer out, mutable cur_lit=0u, mutable boxes=boxes, mode=mode); - print_mod(s, _mod); + print_inner_attributes(s, crate.node.attrs); + print_mod(s, crate.node.module); eof(s.s); }