24 const std::string &src)
26 assert(src.size()>=2);
28 if(src[0]==
'u' && src[1]==
'8')
30 assert(src[src.size()-1]==
'"');
33 std::basic_string<unsigned int> value=
40 value.resize(utf8_value.size());
41 for(std::size_t i=0; i<utf8_value.size(); i++)
42 value[i]=utf8_value[i];
46 else if(src[0]==
'L' || src[0]==
'u' || src[0]==
'U')
48 assert(src[src.size()-1]==
'"');
56 assert(src[src.size()-1]==
'"');
58 std::string char_value=
62 std::basic_string<unsigned int> value;
63 value.resize(char_value.size());
64 for(std::size_t i=0; i<char_value.size(); i++)
65 value[i]=char_value[i];
77 std::basic_string<unsigned int> value;
81 for(std::size_t i=0; i<src.size(); i++)
86 if(ch!=
'L' && ch!=
'u' && ch!=
'U' && ch!=
'"')
91 if((ch==
'u' || ch==
'U') && i+1<src.size() && src[i+1]==
'"')
95 std::size_t j=src.
find(
'"', i);
96 if(j==std::string::npos)
97 throw "invalid string constant '" + src +
"'";
100 for(++j; j<src.size() && src[j]!=
'"'; ++j)
104 assert(j<=src.size());
106 throw "non-terminated string constant '" + src +
"'";
108 std::string tmp_src=std::string(src, i, j-i+1);
109 std::basic_string<unsigned int> tmp_value=
111 value.append(tmp_value);
128 default: assert(
false);
132 result.
set(ID_C_string_constant,
true);
137 result.
operands().resize(value.size());
138 for(std::size_t i=0; i<value.size(); i++)
145 std::string char_value;
147 char_value.resize(value.size());
149 for(std::size_t i=0; i<value.size(); i++)
153 char_value[i]=value[i];