24 for(exprt::operandst::const_iterator it=
operands.begin();
28 if(it->type().id()==ID_struct)
43 for(std::size_t i=0; i<function_call.
op1().
operands().size(); i++)
57 if(parameters.size()>ops.size())
60 ops.reserve(parameters.size());
62 for(std::size_t i=ops.size(); i<parameters.size(); i++)
64 const exprt &default_value=
65 parameters[i].default_value();
70 ops.push_back(default_value);
73 else if(parameters.size()<ops.size())
80 exprt::operandst::iterator it=ops.begin();
81 for(
const auto ¶meter : parameters)
93 assert(it!=ops.end());
94 const exprt &operand=*it;
95 typet type=parameter.type();
100 std::cout <<
"O: " << operand.
pretty() <<
'\n';
107 if(it==ops.begin() && parameter.get(ID_C_base_name)==ID_this)
109 type.
set(ID_C_reference,
true);
110 type.
set(
"#this",
true);
117 std::cout <<
"C: " <<
cpp_typecheck.to_string(operand.type())
124 operand, type, new_expr, rank))
129 std::cout <<
"OK " << rank <<
'\n';
135 std::cout <<
"NOT OK\n";
144 for( ; it!=ops.end(); ++it)
The type of an expression.
bool match(const code_typet &code_type, unsigned &distance, cpp_typecheckt &cpp_typecheck) const
std::string pretty(unsigned indent=0, unsigned max_indent=0) const
bool has_ellipsis() const
exprt::operandst operands
std::vector< parametert > parameterst
bool cpp_typecheck(cpp_parse_treet &cpp_parse_tree, symbol_tablet &symbol_table, const std::string &module, message_handlert &message_handler)
bool is_reference(const typet &type)
TO_BE_DOCUMENTED.
C++ Language Type Checking.
std::vector< exprt > operandst
bool has_class_type() const
A function call side effect.
C++ Language Type Checking.
Base class for all expressions.
const parameterst & parameters() const
void build(const side_effect_expr_function_callt &function_call)
void set(const irep_namet &name, const irep_idt &value)