1
1
import io:: reader_util;
2
+ import io:: println; //XXXXXXXXxxx
2
3
import util:: interner;
3
4
import lexer:: { reader, new_reader, next_token, is_whitespace } ;
4
5
@@ -28,7 +29,8 @@ fn read_to_eol(rdr: reader) -> str {
28
29
29
30
fn read_one_line_comment ( rdr : reader ) -> str {
30
31
let val = read_to_eol ( rdr) ;
31
- assert ( val[ 0 ] == '/' as u8 && val[ 1 ] == '/' as u8 ) ;
32
+ assert ( ( val[ 0 ] == '/' as u8 && val[ 1 ] == '/' as u8 ) ||
33
+ ( val[ 0 ] == '#' as u8 && val[ 1 ] == '!' as u8 ) ) ;
32
34
ret val;
33
35
}
34
36
@@ -53,6 +55,15 @@ fn consume_whitespace_counting_blank_lines(rdr: reader, &comments: [cmnt]) {
53
55
}
54
56
}
55
57
58
+ fn read_shebang_comment ( rdr : reader , code_to_the_left : bool ) -> cmnt {
59
+ #debug ( ">>> shebang comment" ) ;
60
+ let p = rdr. chpos ;
61
+ #debug ( "<<< shebang comment" ) ;
62
+ ret { style : if code_to_the_left { trailing } else { isolated } ,
63
+ lines : [ read_one_line_comment ( rdr) ] ,
64
+ pos : p} ;
65
+ }
66
+
56
67
fn read_line_comments ( rdr : reader , code_to_the_left : bool ) -> cmnt {
57
68
#debug ( ">>> line comments" ) ;
58
69
let p = rdr. chpos ;
@@ -134,8 +145,9 @@ fn read_block_comment(rdr: reader, code_to_the_left: bool) -> cmnt {
134
145
}
135
146
136
147
fn peeking_at_comment ( rdr : reader ) -> bool {
137
- ret rdr. curr == '/' && rdr. next ( ) == '/' ||
138
- rdr. curr == '/' && rdr. next ( ) == '*' ;
148
+ ret ( ( rdr. curr == '/' && rdr. next ( ) == '/' ) ||
149
+ ( rdr. curr == '/' && rdr. next ( ) == '*' ) ) ||
150
+ ( rdr. curr == '#' && rdr. next ( ) == '!' ) ;
139
151
}
140
152
141
153
fn consume_comment ( rdr : reader , code_to_the_left : bool , & comments: [ cmnt ] ) {
@@ -144,6 +156,8 @@ fn consume_comment(rdr: reader, code_to_the_left: bool, &comments: [cmnt]) {
144
156
comments += [ read_line_comments ( rdr, code_to_the_left) ] ;
145
157
} else if rdr. curr == '/' && rdr. next ( ) == '*' {
146
158
comments += [ read_block_comment ( rdr, code_to_the_left) ] ;
159
+ } else if rdr. curr == '#' && rdr. next ( ) == '!' {
160
+ comments += [ read_shebang_comment ( rdr, code_to_the_left) ] ;
147
161
} else { fail; }
148
162
#debug ( "<<< consume comment" ) ;
149
163
}
0 commit comments