11import io:: reader_util;
2+ import io:: println; //XXXXXXXXxxx
23import util:: interner;
34import lexer:: { reader, new_reader, next_token, is_whitespace } ;
45
@@ -28,7 +29,8 @@ fn read_to_eol(rdr: reader) -> str {
2829
2930fn read_one_line_comment ( rdr : reader ) -> str {
3031 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 ) ) ;
3234 ret val;
3335}
3436
@@ -53,6 +55,15 @@ fn consume_whitespace_counting_blank_lines(rdr: reader, &comments: [cmnt]) {
5355 }
5456}
5557
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+
5667fn read_line_comments ( rdr : reader , code_to_the_left : bool ) -> cmnt {
5768 #debug ( ">>> line comments" ) ;
5869 let p = rdr. chpos ;
@@ -134,8 +145,9 @@ fn read_block_comment(rdr: reader, code_to_the_left: bool) -> cmnt {
134145}
135146
136147fn 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 ( ) == '!' ) ;
139151}
140152
141153fn 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]) {
144156 comments += [ read_line_comments ( rdr, code_to_the_left) ] ;
145157 } else if rdr. curr == '/' && rdr. next ( ) == '*' {
146158 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) ] ;
147161 } else { fail; }
148162 #debug ( "<<< consume comment" ) ;
149163}
0 commit comments