@@ -71,6 +71,7 @@ fn parse_token_list(file: &str) -> HashMap<String, Token> {
7171 "IDENT" => id ( ) ,
7272 "PLUS" => BINOP ( PLUS ) ,
7373 "LIT_CHAR" => LIT_CHAR ( Name ( 0 ) ) ,
74+ "LIT_BYTE" => LIT_BYTE ( Name ( 0 ) ) ,
7475 "EQ" => EQ ,
7576 "RBRACKET" => RBRACKET ,
7677 "COMMENT" => COMMENT ,
@@ -124,7 +125,7 @@ fn str_to_binop(s: &str) -> BinOp {
124125 }
125126}
126127
127- /// Assuming a raw string/binary literal, strip out the leading/trailing
128+ /// Assuming a string/binary literal, strip out the leading/trailing
128129/// hashes and surrounding quotes/raw/binary prefix.
129130fn fix ( mut lit : & str ) -> ast:: Name {
130131 if lit. char_at ( 0 ) == 'r' {
@@ -143,6 +144,15 @@ fn fix(mut lit: &str) -> ast::Name {
143144 parse:: token:: intern ( lit. slice ( leading_hashes + 1 , lit. len ( ) - leading_hashes - 1 ) )
144145}
145146
147+ /// Assuming a char/byte literal, strip the 'b' prefix and the single quotes.
148+ fn fixchar ( mut lit : & str ) -> ast:: Name {
149+ if lit. char_at ( 0 ) == 'b' {
150+ lit = lit. slice_from ( 1 ) ;
151+ }
152+
153+ parse:: token:: intern ( lit. slice ( 1 , lit. len ( ) - 1 ) )
154+ }
155+
146156fn count ( lit : & str ) -> uint {
147157 lit. chars ( ) . take_while ( |c| * c == '#' ) . count ( )
148158}
@@ -167,7 +177,8 @@ fn parse_antlr_token(s: &str, tokens: &HashMap<String, Token>) -> TokenAndSpan {
167177 BINOPEQ ( ..) => BINOPEQ ( str_to_binop ( content. slice_to ( content. len ( ) - 1 ) ) ) ,
168178 LIT_STR ( ..) => LIT_STR ( fix ( content) ) ,
169179 LIT_STR_RAW ( ..) => LIT_STR_RAW ( fix ( content) , count ( content) ) ,
170- LIT_CHAR ( ..) => LIT_CHAR ( nm) ,
180+ LIT_CHAR ( ..) => LIT_CHAR ( fixchar ( content) ) ,
181+ LIT_BYTE ( ..) => LIT_BYTE ( fixchar ( content) ) ,
171182 DOC_COMMENT ( ..) => DOC_COMMENT ( nm) ,
172183 LIT_INTEGER ( ..) => LIT_INTEGER ( nm) ,
173184 LIT_FLOAT ( ..) => LIT_FLOAT ( nm) ,
0 commit comments