18 if(type.
id()==ID_array)
21 apply(static_cast<exprt &>(type.
add(ID_size)));
23 else if(type.
id()==ID_pointer)
27 else if(type.
id()==ID_struct ||
34 typet &subtype=
static_cast<typet &
>(it->add(ID_type));
38 else if(type.
id()==ID_symbol)
40 type_mapt::const_iterator m_it=
49 else if(type.
id()==ID_code)
51 apply(static_cast<typet &>(type.
add(ID_return_type)));
57 if(it->id()==ID_parameter)
58 apply(static_cast<typet &>(it->add(ID_type)));
61 else if(type.
id()==ID_merged_type)
72 if(expr.
id()==ID_symbol)
74 expr_mapt::const_iterator m_it=
90 type_mapt::const_iterator t_it=
96 e.
type()=t_it->second;
100 expr_mapt::const_iterator e_it=
111 type_mapt::const_iterator t_it=
122 expr_mapt::const_iterator e_it=
133 for(type_mapt::const_iterator it=
type_map.begin();
136 out << it->first <<
" = " << it->second.pretty() <<
'\n';
138 for(expr_mapt::const_iterator it=
expr_map.begin();
141 out << it->first <<
" = " << it->second.pretty() <<
'\n';
154 template_typet::template_parameterst::const_iterator t_it=
155 template_parameters.begin();
157 if(instance.size()<template_parameters.size())
160 for(std::size_t i=instance.size();
161 i<template_parameters.size();
174 assert(instance.size()==template_parameters.size());
176 for(cpp_template_args_tct::argumentst::const_iterator
177 i_it=instance.begin();
178 i_it!=instance.end();
181 assert(t_it!=template_parameters.end());
190 if(parameter.
id()==ID_type)
192 if(parameter.
id()!=ID_type)
204 if(value.
id()==ID_type)
218 for(template_typet::template_parameterst::const_iterator
219 t_it=template_parameters.begin();
220 t_it!=template_parameters.end();
227 typet tmp(ID_unassigned);
228 tmp.
set(ID_identifier, t.
type().
get(ID_identifier));
235 tmp.
set(ID_identifier, t.
get(ID_identifier));
249 template_args.
arguments().resize(template_parameters.size());
251 for(std::size_t i=0; i<template_parameters.size(); i++)
267 return template_args;
const irept & get_nil_irep()
The type of an expression.
void set(const template_parametert ¶meter, const exprt &value)
void apply(exprt &dest) const
std::vector< template_parametert > template_parameterst
template_parameterst & template_parameters()
std::vector< irept > subt
exprt::operandst argumentst
void build(const template_typet &template_type, const cpp_template_args_tct &template_args)
bool has_default_argument() const
exprt lookup(const irep_idt &identifier) const
const irep_idt & id() const
exprt lookup_expr(const irep_idt &identifier) const
const irep_idt & get(const irep_namet &name) const
cpp_template_args_tct build_template_args(const template_typet &template_type) const
#define Forall_irep(it, irep)
typet lookup_type(const irep_idt &identifier) const
Base class for all expressions.
void build_unassigned(const template_typet &template_type)
source_locationt & add_source_location()
const source_locationt & source_location() const
irept & add(const irep_namet &name)
C++ Language Type Checking.
#define Forall_subtypes(it, type)
#define Forall_operands(it, expr)
const typet & subtype() const
void set(const irep_namet &name, const irep_idt &value)
void print(std::ostream &out) const
exprt & default_argument()