@@ -8,6 +8,7 @@ use crate::location::Location;
88use num_bigint:: BigInt ;
99use num_traits:: identities:: Zero ;
1010use num_traits:: Num ;
11+ use std:: char;
1112use std:: cmp:: Ordering ;
1213use std:: collections:: HashMap ;
1314use std:: str:: FromStr ;
@@ -442,22 +443,22 @@ where
442443
443444 fn unicode_literal ( & mut self , literal_number : usize ) -> Result < char , LexicalError > {
444445 let mut p: u32 = 0u32 ;
445- let unicode_error = Err ( LexicalError {
446+ let unicode_error = LexicalError {
446447 error : LexicalErrorType :: UnicodeError ,
447448 location : self . get_pos ( ) ,
448- } ) ;
449+ } ;
449450 for i in 1 ..=literal_number {
450451 match self . next_char ( ) {
451452 Some ( c) => match c. to_digit ( 16 ) {
452453 Some ( d) => p += d << ( ( literal_number - i) * 4 ) ,
453- None => return unicode_error,
454+ None => return Err ( unicode_error) ,
454455 } ,
455- None => return unicode_error,
456+ None => return Err ( unicode_error) ,
456457 }
457458 }
458- match wtf8 :: CodePoint :: from_u32 ( p ) {
459- Some ( cp ) => Ok ( cp . to_char_lossy ( ) ) ,
460- None => unicode_error,
459+ match p {
460+ 0xD800 ..= 0xDFFF => Ok ( std :: char :: REPLACEMENT_CHARACTER ) ,
461+ _ => std :: char :: from_u32 ( p ) . ok_or ( unicode_error) ,
461462 }
462463 }
463464
0 commit comments