22 const std::string &src)
24 assert(src.size()>=2);
26 if(src[0]==
'u' && src[1]==
'8')
28 assert(src[src.size()-1]==
'"');
31 std::basic_string<unsigned int> value=
38 value.resize(utf8_value.size());
39 for(std::size_t i=0; i<utf8_value.size(); i++)
40 value[i]=utf8_value[i];
44 else if(src[0]==
'L' || src[0]==
'u' || src[0]==
'U')
46 assert(src[src.size()-1]==
'"');
54 assert(src[src.size()-1]==
'"');
56 std::string char_value=
60 std::basic_string<unsigned int> value;
61 value.resize(char_value.size());
62 for(std::size_t i=0; i<char_value.size(); i++)
63 value[i]=char_value[i];
75 std::basic_string<unsigned int> value;
79 for(std::size_t i=0; i<src.size(); i++)
84 if(ch!=
'L' && ch!=
'u' && ch!=
'U' && ch!=
'"')
89 if((ch==
'u' || ch==
'U') && i+1<src.size() && src[i+1]==
'"')
93 std::size_t j=src.
find(
'"', i);
97 for(++j; j<src.size() && src[j]!=
'"'; ++j)
101 INVARIANT(j < src.size(),
"non-terminated string constant '" + src +
"'");
103 std::string tmp_src=std::string(src, i, j-i+1);
104 std::basic_string<unsigned int> tmp_value=
106 value.append(tmp_value);
123 default: assert(
false);
127 result.
set(ID_C_string_constant,
true);
131 result.
operands().resize(value.size());
132 for(std::size_t i=0; i<value.size(); i++)
139 std::string char_value;
141 char_value.resize(value.size());
143 for(std::size_t i=0; i<value.size(); i++)
147 char_value[i]=value[i];