From f50a582126e35300bba5a3a8bec001ae6c301ed5 Mon Sep 17 00:00:00 2001 From: Paul Stansifer Date: Mon, 8 Aug 2011 14:17:33 -0700 Subject: [PATCH] Add a syntax extension to log syntax, for debugging macros. --- src/comp/rustc.rc | 2 ++ src/comp/syntax/ext/base.rs | 10 +++++++--- src/comp/syntax/ext/log_syntax.rs | 13 +++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/comp/syntax/ext/log_syntax.rs diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc index e47c6337e32..a0505f870b4 100644 --- a/src/comp/rustc.rc +++ b/src/comp/rustc.rc @@ -49,6 +49,7 @@ mod middle { mod syntax { mod ast; + mod fold; mod visit; mod codemap; @@ -67,6 +68,7 @@ mod syntax { mod simplext; mod concat_idents; mod ident_to_str; + mod log_syntax; } mod print { mod pprust; diff --git a/src/comp/syntax/ext/base.rs b/src/comp/syntax/ext/base.rs index 5aad9c5cd14..62c480ad96b 100644 --- a/src/comp/syntax/ext/base.rs +++ b/src/comp/syntax/ext/base.rs @@ -29,19 +29,23 @@ fn syntax_expander_table() -> hashmap[str, syntax_extension] { normal(ext::concat_idents::expand_syntax_ext)); syntax_expanders.insert("ident_to_str", normal(ext::ident_to_str::expand_syntax_ext)); + syntax_expanders.insert("log_syntax", + normal(ext::log_syntax::expand_syntax_ext)); ret syntax_expanders; } -obj ext_ctxt(sess: @session, crate_file_name_hack: str, +obj ext_ctxt(sess: @session, crate_file_name_hack: str, mutable backtrace: span[]) { fn crate_file_name() -> str { ret crate_file_name_hack; } + fn session() -> @session { ret sess; } + fn print_backtrace() { for sp: span in backtrace { sess.span_note(sp, "(while expanding this)") } } - + fn bt_push(sp: span) { backtrace += ~[sp]; } fn bt_pop() { ivec::pop(backtrace); } @@ -59,7 +63,7 @@ obj ext_ctxt(sess: @session, crate_file_name_hack: str, } fn span_bug(sp:span, msg: str) -> ! { self.print_backtrace(); - sess.span_bug(sp, msg); + sess.span_bug(sp, msg); } fn bug(msg: str) -> ! { self.print_backtrace(); diff --git a/src/comp/syntax/ext/log_syntax.rs b/src/comp/syntax/ext/log_syntax.rs new file mode 100644 index 00000000000..9cd745f07f7 --- /dev/null +++ b/src/comp/syntax/ext/log_syntax.rs @@ -0,0 +1,13 @@ +import std::option; +import base::*; +import syntax::ast; + +fn expand_syntax_ext(cx: &ext_ctxt, sp: codemap::span, arg: @ast::expr, + body: option::t[str]) -> @ast::expr { + + cx.print_backtrace(); + std::io::stdout().write_line(print::pprust::expr_to_str(arg)); + + //trivial expression + ret @{id: cx.next_id(), node: ast::expr_rec(~[], option::none), span: sp}; +} \ No newline at end of file