44 const std::ostringstream &s,
48 std::istringstream in(s.str());
53 ansi_c_parser.for_has_scope=
config.ansi_c.for_has_scope;
54 ansi_c_parser.ts_18661_3_Floatn_types =
config.ansi_c.ts_18661_3_Floatn_types;
55 ansi_c_parser.__float128_is_keyword =
config.ansi_c.__float128_is_keyword;
56 ansi_c_parser.float16_type =
config.ansi_c.float16_type;
57 ansi_c_parser.bf16_type =
config.ansi_c.bf16_type;
58 ansi_c_parser.fp16_type =
config.ansi_c.fp16_type;
59 ansi_c_parser.cpp98=
false;
60 ansi_c_parser.cpp11=
false;
61 ansi_c_parser.c17 =
false;
62 ansi_c_parser.c23 =
false;
63 ansi_c_parser.mode=
config.ansi_c.mode;
67 if(ansi_c_parser.parse())
75 ansi_c_parser.parse_tree,
84 symbol_tablet::symbolst::const_iterator s_it=
85 new_symbol_table.
symbols.find(identifier);
87 if(s_it==new_symbol_table.
symbols.end())
90 message.
error() <<
"failed to produce built-in symbol '" << identifier
96 symbol_table.
add(s_it->second);
106 bool support_float16_type,
111 const std::string pattern=
' '+
id2string(identifier)+
'(';
113 std::ostringstream s;
121 return convert(identifier, s, symbol_table, mh);
127 return convert(identifier, s, symbol_table, mh);
134 return convert(identifier, s, symbol_table, mh);
141 return convert(identifier, s, symbol_table, mh);
151 return convert(identifier, s, symbol_table, mh);
154 return convert(identifier, s, symbol_table, mh);
157 return convert(identifier, s, symbol_table, mh);
160 return convert(identifier, s, symbol_table, mh);
163 return convert(identifier, s, symbol_table, mh);
166 return convert(identifier, s, symbol_table, mh);
169 return convert(identifier, s, symbol_table, mh);
171 if(
config.ansi_c.arch==
"i386" ||
172 config.ansi_c.arch==
"x86_64" ||
173 config.ansi_c.arch==
"x32")
176 return convert(identifier, s, symbol_table, mh);
179 return convert(identifier, s, symbol_table, mh);
182 return convert(identifier, s, symbol_table, mh);
185 return convert(identifier, s, symbol_table, mh);
188 return convert(identifier, s, symbol_table, mh);
191 return convert(identifier, s, symbol_table, mh);
194 return convert(identifier, s, symbol_table, mh);
197 return convert(identifier, s, symbol_table, mh);
200 return convert(identifier, s, symbol_table, mh);
202 else if(
config.ansi_c.arch==
"arm64" ||
203 config.ansi_c.arch==
"armel" ||
204 config.ansi_c.arch==
"armhf" ||
205 config.ansi_c.arch==
"arm")
208 return convert(identifier, s, symbol_table, mh);
210 else if(
config.ansi_c.arch==
"mips64el" ||
211 config.ansi_c.arch==
"mipsn32el" ||
212 config.ansi_c.arch==
"mipsel" ||
213 config.ansi_c.arch==
"mips64" ||
214 config.ansi_c.arch==
"mipsn32" ||
215 config.ansi_c.arch==
"mips")
218 return convert(identifier, s, symbol_table, mh);
220 else if(
config.ansi_c.arch==
"powerpc" ||
221 config.ansi_c.arch==
"ppc64" ||
222 config.ansi_c.arch==
"ppc64le")
225 return convert(identifier, s, symbol_table, mh);
bool builtin_factory(const irep_idt &identifier, bool support_float16_type, symbol_table_baset &symbol_table, message_handlert &mh)
Check whether given identifier is a compiler built-in.