@@ -5,6 +5,8 @@ import std::option;
5
5
import driver:: session:: session;
6
6
import front:: ast;
7
7
import front:: lexer;
8
+ import front:: codemap;
9
+ import front:: codemap:: codemap;
8
10
import middle:: ty;
9
11
import util:: common;
10
12
import pp;
@@ -34,6 +36,7 @@ tag mode {
34
36
}
35
37
36
38
type ps = @rec ( pp:: printer s,
39
+ option:: t[ codemap] cm ,
37
40
option:: t[ vec[ lexer:: cmnt ] ] comments ,
38
41
mutable uint cur_cmnt ,
39
42
mode mode) ;
@@ -42,6 +45,7 @@ fn print_file(session sess, ast::_mod _mod, str filename, io::writer out,
42
45
mode mode) {
43
46
auto cmnts = lexer:: gather_comments ( sess, filename) ;
44
47
auto s = @rec ( s=pp:: mk_printer ( out, default_columns) ,
48
+ cm=option:: some[ codemap] ( sess. get_codemap ( ) ) ,
45
49
comments=option:: some[ vec[ lexer:: cmnt] ] ( cmnts) ,
46
50
mutable cur_cmnt=0 u,
47
51
mode=mode) ;
@@ -52,6 +56,7 @@ fn print_file(session sess, ast::_mod _mod, str filename, io::writer out,
52
56
fn ty_to_str ( & @ast:: ty ty) -> str {
53
57
auto writer = io:: string_writer ( ) ;
54
58
auto s = @rec ( s=pp:: mk_printer ( writer. get_writer ( ) , default_columns) ,
59
+ cm=option:: none[ codemap] ,
55
60
comments=option:: none[ vec[ lexer:: cmnt] ] ,
56
61
mutable cur_cmnt=0 u,
57
62
mode=mo_untyped) ;
@@ -63,6 +68,7 @@ fn ty_to_str(&@ast::ty ty) -> str {
63
68
fn block_to_str ( & ast:: block blk) -> str {
64
69
auto writer = io:: string_writer ( ) ;
65
70
auto s = @rec ( s=pp:: mk_printer ( writer. get_writer ( ) , default_columns) ,
71
+ cm=option:: none[ codemap] ,
66
72
comments=option:: none[ vec[ lexer:: cmnt] ] ,
67
73
mutable cur_cmnt=0 u,
68
74
mode=mo_untyped) ;
@@ -76,6 +82,7 @@ fn block_to_str(&ast::block blk) -> str {
76
82
fn pat_to_str ( & @ast:: pat p) -> str {
77
83
auto writer = io:: string_writer ( ) ;
78
84
auto s = @rec ( s=pp:: mk_printer ( writer. get_writer ( ) , default_columns) ,
85
+ cm=option:: none[ codemap] ,
79
86
comments=option:: none[ vec[ lexer:: cmnt] ] ,
80
87
mutable cur_cmnt=0 u,
81
88
mode=mo_untyped) ;
@@ -1099,9 +1106,22 @@ fn maybe_print_comment(ps s, uint pos) {
1099
1106
}
1100
1107
1101
1108
fn maybe_print_line_comment ( ps s, common:: span span) -> bool {
1109
+ auto cm;
1110
+ alt ( s. cm ) {
1111
+ case ( option:: some[ codemap] ( ?ccm) ) {
1112
+ cm = ccm;
1113
+ }
1114
+ case ( _) {
1115
+ ret false ;
1116
+ }
1117
+ }
1102
1118
alt ( next_comment ( s) ) {
1103
1119
case ( option:: some[ lexer:: cmnt] ( ?cmnt) ) {
1104
- if ( span. hi + 4 u >= cmnt. pos ) {
1120
+ if ( cmnt. style != lexer:: trailing) { ret false ; }
1121
+
1122
+ auto span_line = codemap:: lookup_pos ( cm, span. hi ) ;
1123
+ auto comment_line = codemap:: lookup_pos ( cm, cmnt. pos ) ;
1124
+ if ( span_line. line == comment_line. line ) {
1105
1125
word ( s. s , " " ) ;
1106
1126
print_comment ( s, cmnt) ;
1107
1127
s. cur_cmnt += 1 u;
@@ -1128,12 +1148,11 @@ fn print_remaining_comments(ps s) {
1128
1148
fn print_comment ( ps s, lexer:: cmnt cmnt) {
1129
1149
alt ( cmnt. style ) {
1130
1150
case ( lexer:: isolated) {
1131
- cbox ( s. s , 0 u ) ;
1151
+ zerobreak ( s. s ) ;
1132
1152
for ( str line in cmnt. lines) {
1133
- zerobreak ( s. s ) ;
1134
1153
word_and_eol ( s. s , line) ;
1154
+ zerobreak ( s. s ) ;
1135
1155
}
1136
- end ( s. s ) ;
1137
1156
zerobreak ( s. s ) ;
1138
1157
}
1139
1158
case ( lexer:: trailing) {
0 commit comments