about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/comp/pretty/pprust.rs27
-rw-r--r--src/comp/util/common.rs7
2 files changed, 30 insertions, 4 deletions
diff --git a/src/comp/pretty/pprust.rs b/src/comp/pretty/pprust.rs
index cd2d5f70a9c..7128ffbe23a 100644
--- a/src/comp/pretty/pprust.rs
+++ b/src/comp/pretty/pprust.rs
@@ -5,6 +5,8 @@ import std::option;
 import driver::session::session;
 import front::ast;
 import front::lexer;
+import front::codemap;
+import front::codemap::codemap;
 import middle::ty;
 import util::common;
 import pp;
@@ -34,6 +36,7 @@ tag mode {
 }
 
 type ps = @rec(pp::printer s,
+               option::t[codemap] cm,
                option::t[vec[lexer::cmnt]] comments,
                mutable uint cur_cmnt,
                mode mode);
@@ -42,6 +45,7 @@ fn print_file(session sess, ast::_mod _mod, str filename, io::writer out,
               mode mode) {
     auto cmnts = lexer::gather_comments(sess, filename);
     auto s = @rec(s=pp::mk_printer(out, default_columns),
+                  cm=option::some[codemap](sess.get_codemap()),
                   comments=option::some[vec[lexer::cmnt]](cmnts),
                   mutable cur_cmnt=0u,
                   mode=mode);
@@ -52,6 +56,7 @@ fn print_file(session sess, ast::_mod _mod, str filename, io::writer out,
 fn ty_to_str(&@ast::ty ty) -> str {
     auto writer = io::string_writer();
     auto s = @rec(s=pp::mk_printer(writer.get_writer(), default_columns),
+                  cm=option::none[codemap],
                   comments=option::none[vec[lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -63,6 +68,7 @@ fn ty_to_str(&@ast::ty ty) -> str {
 fn block_to_str(&ast::block blk) -> str {
     auto writer = io::string_writer();
     auto s = @rec(s=pp::mk_printer(writer.get_writer(), default_columns),
+                  cm=option::none[codemap],
                   comments=option::none[vec[lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -76,6 +82,7 @@ fn block_to_str(&ast::block blk) -> str {
 fn pat_to_str(&@ast::pat p) -> str {
     auto writer = io::string_writer();
     auto s = @rec(s=pp::mk_printer(writer.get_writer(), default_columns),
+                  cm=option::none[codemap],
                   comments=option::none[vec[lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -1099,9 +1106,22 @@ fn maybe_print_comment(ps s, uint pos) {
 }
 
 fn maybe_print_line_comment(ps s, common::span span) -> bool {
+    auto cm;
+    alt (s.cm) {
+        case (option::some[codemap](?ccm)) {
+            cm = ccm;
+        }
+        case (_) {
+            ret false;
+        }
+    }
     alt (next_comment(s)) {
         case (option::some[lexer::cmnt](?cmnt)) {
-            if (span.hi + 4u >= cmnt.pos) {
+            if (cmnt.style != lexer::trailing) { ret false; }
+
+            auto span_line = codemap::lookup_pos(cm, span.hi);
+            auto comment_line = codemap::lookup_pos(cm, cmnt.pos);
+            if (span_line.line == comment_line.line) {
                 word(s.s, " ");
                 print_comment(s, cmnt);
                 s.cur_cmnt += 1u;
@@ -1128,12 +1148,11 @@ fn print_remaining_comments(ps s) {
 fn print_comment(ps s, lexer::cmnt cmnt) {
     alt (cmnt.style) {
         case (lexer::isolated) {
-            cbox(s.s, 0u);
+            zerobreak(s.s);
             for (str line in cmnt.lines) {
-                zerobreak(s.s);
                 word_and_eol(s.s, line);
+                zerobreak(s.s);
             }
-            end(s.s);
             zerobreak(s.s);
         }
         case (lexer::trailing) {
diff --git a/src/comp/util/common.rs b/src/comp/util/common.rs
index e23e79f28bd..88123740ac1 100644
--- a/src/comp/util/common.rs
+++ b/src/comp/util/common.rs
@@ -8,6 +8,7 @@ import std::option::some;
 import front::ast;
 import front::ast::ty;
 import front::ast::pat;
+import front::codemap::codemap;
 import middle::walk;
 
 import std::io::stdout;
@@ -129,6 +130,7 @@ fn expr_to_str(&@ast::expr e) -> str {
   let str_writer s = string_writer();
   auto out_ = mk_printer(s.get_writer(), 80u);
   auto out = @rec(s=out_,
+                  cm=none[codemap],
                   comments=none[vec[front::lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -140,6 +142,7 @@ fn ty_to_str(&ty t) -> str {
   let str_writer s = string_writer();
   auto out_ = mk_printer(s.get_writer(), 80u);
   auto out = @rec(s=out_,
+                  cm=none[codemap],
                   comments=none[vec[front::lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -167,6 +170,7 @@ fn block_to_str(&ast::block b) -> str {
   let str_writer s = string_writer();
   auto out_ = mk_printer(s.get_writer(), 80u);
   auto out = @rec(s=out_,
+                  cm=none[codemap],
                   comments=none[vec[front::lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -179,6 +183,7 @@ fn item_to_str(&@ast::item i) -> str {
   let str_writer s = string_writer();
   auto out_ = mk_printer(s.get_writer(), 80u);
   auto out = @rec(s=out_,
+                  cm=none[codemap],
                   comments=none[vec[front::lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -202,6 +207,7 @@ fn fun_to_str(&ast::_fn f, str name, vec[ast::ty_param] params) -> str {
  let str_writer s = string_writer();
   auto out_ = mk_printer(s.get_writer(), 80u);
   auto out = @rec(s=out_,
+                  cm=none[codemap],
                   comments=none[vec[front::lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);
@@ -222,6 +228,7 @@ fn stmt_to_str(&ast::stmt st) -> str {
   let str_writer s = string_writer();
   auto out_ = mk_printer(s.get_writer(), 80u);
   auto out = @rec(s=out_,
+                  cm=none[codemap],
                   comments=none[vec[front::lexer::cmnt]],
                   mutable cur_cmnt=0u,
                   mode=mo_untyped);