Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Span debugger #12087

Merged
merged 3 commits into from
Feb 7, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/librustc/driver/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,10 @@ pub fn compile_input(sess: Session, cfg: ast::CrateConfig, input: &Input,
let (outputs, trans) = {
let (expanded_crate, ast_map) = {
let crate = phase_1_parse_input(sess, cfg, input);
if sess.show_span() {
front::show_span::run(sess, &crate);
return;
}
if stop_after_phase_1(sess) { return; }
let loader = &mut Loader::new(sess);
phase_2_configure_and_expand(sess, loader, crate)
Expand Down
5 changes: 5 additions & 0 deletions src/librustc/driver/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ debugging_opts!(
BORROWCK_STATS,
NO_LANDING_PADS,
DEBUG_LLVM,
SHOW_SPAN,
COUNT_TYPE_SIZES,
META_STATS,
NO_OPT,
Expand Down Expand Up @@ -95,6 +96,7 @@ pub fn debugging_opts_map() -> ~[(&'static str, &'static str, u64)] {
("no-landing-pads", "omit landing pads for unwinding",
NO_LANDING_PADS),
("debug-llvm", "enable debug output from LLVM", DEBUG_LLVM),
("show-span", "show spans for compiler debugging", SHOW_SPAN),
("count-type-sizes", "count the sizes of aggregate types",
COUNT_TYPE_SIZES),
("meta-stats", "gather metadata statistics", META_STATS),
Expand Down Expand Up @@ -351,6 +353,9 @@ impl Session_ {
pub fn no_landing_pads(&self) -> bool {
self.debugging_opt(NO_LANDING_PADS)
}
pub fn show_span(&self) -> bool {
self.debugging_opt(SHOW_SPAN)
}

// DEPRECATED. This function results in a lot of allocations when they
// are not necessary.
Expand Down
36 changes: 36 additions & 0 deletions src/librustc/front/show_span.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

//! Span debugger
//!
//! This module shows spans for all expressions in the crate
//! to help with compiler debugging.

use syntax::ast;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we have a comment about what this is doing?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(What the file is doing, that is; I know what the import is doing. :P )

use syntax::visit;
use syntax::visit::Visitor;

use driver::session::Session;

struct ShowSpanVisitor {
sess: Session
}

impl Visitor<()> for ShowSpanVisitor {
fn visit_expr(&mut self, e: &ast::Expr, _: ()) {
self.sess.span_note(e.span, "expression");
visit::walk_expr(self, e, ());
}
}

pub fn run(sess: Session, crate: &ast::Crate) {
let mut v = ShowSpanVisitor { sess: sess };
visit::walk_crate(&mut v, crate, ());
}
1 change: 1 addition & 0 deletions src/librustc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ pub mod front {
pub mod std_inject;
pub mod assign_node_ids_and_map;
pub mod feature_gate;
pub mod show_span;
}

pub mod back {
Expand Down
6 changes: 3 additions & 3 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1771,7 +1771,7 @@ impl Parser {
self.commit_expr_expecting(*es.last().unwrap(), token::RPAREN);

return if es.len() == 1 && !trailing_comma {
self.mk_expr(lo, self.span.hi, ExprParen(es[0]))
self.mk_expr(lo, hi, ExprParen(es[0]))
}
else {
self.mk_expr(lo, hi, ExprTup(es))
Expand Down Expand Up @@ -1994,7 +1994,7 @@ impl Parser {
seq_sep_trailing_disallowed(token::COMMA),
|p| p.parse_expr()
);
hi = self.span.hi;
hi = self.last_span.hi;

es.unshift(e);
let nd = self.mk_method_call(i, tys, es, NoSugar);
Expand Down Expand Up @@ -2510,7 +2510,7 @@ impl Parser {
parse_decl: |&mut Parser| -> P<FnDecl>,
parse_body: |&mut Parser| -> @Expr)
-> @Expr {
let lo = self.last_span.lo;
let lo = self.span.lo;
let decl = parse_decl(self);
let body = parse_body(self);
let fakeblock = P(ast::Block {
Expand Down