@@ -1258,7 +1258,11 @@ bool Converter::GetFmtArg(clang::Expr *arg, std::string &fmt,
12581258 std::string &fmt_args, const char *&fmt_trait,
12591259 std::string &fmt_width) {
12601260 std::string arg_str = Mapper::ToString (arg);
1261- if (clang::isa<clang::StringLiteral>(arg->IgnoreImplicit ())) {
1261+ if (auto *str_lit =
1262+ clang::dyn_cast<clang::StringLiteral>(arg->IgnoreImplicit ())) {
1263+ if (!IsAsciiStringLiteral (str_lit)) {
1264+ return false ;
1265+ }
12621266 auto str = GetEscapedStringLiteral (arg);
12631267 std::string_view trim (str);
12641268 // Delete " from string
@@ -1299,6 +1303,8 @@ bool Converter::GetRawArg(clang::Expr *arg, std::string &raw_args) {
12991303 raw_args += " (&(" + str + " )[..(" + str + " ).len() - 1]" ;
13001304 } else if (Mapper::ToString (arg).contains (" std::endl" )) {
13011305 raw_args += " (&[b'\\ n']" ;
1306+ } else if (clang::isa<clang::StringLiteral>(arg->IgnoreImplicit ())) {
1307+ raw_args += " (b" + GetEscapedStringLiteral (arg);
13021308 } else {
13031309 return false ;
13041310 }
@@ -1712,8 +1718,7 @@ bool Converter::VisitCharacterLiteral(clang::CharacterLiteral *expr) {
17121718 return false ;
17131719}
17141720
1715- std::string Converter::GetEscapedCharLiteral (char character,
1716- bool byte_string) const {
1721+ std::string Converter::GetEscapedCharLiteral (char character) const {
17171722 switch (character) {
17181723 case ' "' :
17191724 return " \\\" " ;
@@ -1731,7 +1736,7 @@ std::string Converter::GetEscapedCharLiteral(char character,
17311736 return " \\ 0" ;
17321737 }
17331738 auto uc = static_cast <unsigned char >(character);
1734- if (uc < 0x20 || uc == 0x7F || (byte_string && uc > 0x7F ) ) {
1739+ if (uc < 0x20 || uc >= 0x7F ) {
17351740 return std::format (" \\ x{:02x}" , uc);
17361741 }
17371742 return std::string (1 , character);
@@ -1750,15 +1755,14 @@ std::string Converter::GetEscapedUTF8CharLiteral(clang::Expr *expr) const {
17501755}
17511756
17521757std::string Converter::GetEscapedStringLiteral (clang::Expr *expr,
1753- uint64_t pad_nulls,
1754- bool byte_string) const {
1758+ uint64_t pad_nulls) const {
17551759 auto str_expr = clang::dyn_cast<clang::StringLiteral>(expr->IgnoreCasts ());
17561760 assert (str_expr);
17571761 auto raw = str_expr->getString ();
17581762 std::string out;
17591763 out.push_back (' "' );
17601764 for (unsigned char c : raw) {
1761- out += GetEscapedCharLiteral (static_cast <char >(c), byte_string );
1765+ out += GetEscapedCharLiteral (static_cast <char >(c));
17621766 }
17631767 for (uint64_t i = 0 ; i < pad_nulls; ++i) {
17641768 out += " \\ 0" ;
@@ -1779,12 +1783,12 @@ bool Converter::VisitStringLiteral(clang::StringLiteral *expr) {
17791783 ? arr_size - expr->getString ().size ()
17801784 : 0 ;
17811785 StrCat (token::kStar ,
1782- std::format (" b{}" , GetEscapedStringLiteral (expr, pad, true )));
1786+ std::format (" b{}" , GetEscapedStringLiteral (expr, pad)));
17831787 return false ;
17841788 }
17851789 StrCat (token::kStar );
17861790 }
1787- StrCat (std::format (" b{}" , GetEscapedStringLiteral (expr, 1 , true )));
1791+ StrCat (std::format (" b{}" , GetEscapedStringLiteral (expr, 1 )));
17881792 return false ;
17891793}
17901794
0 commit comments