20 #include "../string_constant.h" 25 const std::string &src)
27 assert(src.size()>=2);
29 if(src[0]==
'u' && src[1]==
'8')
31 assert(src[src.size()-1]==
'"');
34 std::basic_string<unsigned int> value=
41 value.resize(utf8_value.size());
42 for(std::size_t i=0; i<utf8_value.size(); i++)
43 value[i]=utf8_value[i];
47 else if(src[0]==
'L' || src[0]==
'u' || src[0]==
'U')
49 assert(src[src.size()-1]==
'"');
57 assert(src[src.size()-1]==
'"');
59 std::string char_value=
63 std::basic_string<unsigned int> value;
64 value.resize(char_value.size());
65 for(std::size_t i=0; i<char_value.size(); i++)
66 value[i]=char_value[i];
78 std::basic_string<unsigned int> value;
82 for(std::size_t i=0; i<src.size(); i++)
87 if(ch!=
'L' && ch!=
'u' && ch!=
'U' && ch!=
'"')
92 if((ch==
'u' || ch==
'U') && i+1<src.size() && src[i+1]==
'"')
96 std::size_t j=src.
find(
'"', i);
97 if(j==std::string::npos)
98 throw "invalid string constant `"+src+
"'";
101 for(++j; j<src.size() && src[j]!=
'"'; ++j)
105 assert(j<=src.size());
107 throw "non-terminated string constant `"+src+
"'";
109 std::string tmp_src=std::string(src, i, j-i+1);
110 std::basic_string<unsigned int> tmp_value=
112 value.append(tmp_value);
129 default: assert(
false);
133 result.
set(ID_C_string_constant,
true);
138 result.
operands().resize(value.size());
139 for(std::size_t i=0; i<value.size(); i++)
146 std::string char_value;
148 char_value.resize(value.size());
150 for(std::size_t i=0; i<value.size(); i++)
154 char_value[i]=value[i];
The type of an expression.
C/C++ Language Conversion.
void set_value(const irep_idt &value)
std::string utf32_to_utf8(const std::basic_string< unsigned int > &s)
unsignedbv_typet char32_t_type()
std::string unescape_string(const std::string &src)
std::basic_string< unsigned int > convert_one_string_literal(const std::string &src)
ANSI-C Language Conversion.
bitvector_typet index_type()
unsignedbv_typet char16_t_type()
bitvector_typet wchar_t_type()
Base class for all expressions.
exprt convert_string_literal(const std::string &src)
const typet & subtype() const
const irept & find(const irep_namet &name) const
std::basic_string< unsigned int > unescape_wide_string(const std::string &src)
void set(const irep_namet &name, const irep_idt &value)