1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/*******************************************************************\
Module:
Author: Daniel Kroening, kroening@kroening.com
\*******************************************************************/
#include "c_typecheck_base.h"
#include "c_typecast.h"
void c_typecheck_baset::implicit_typecast(
exprt &expr,
const typet &dest_type)
{
c_typecastt c_typecast(*this);
typet src_type=expr.type();
c_typecast.implicit_typecast(expr, dest_type);
for(std::list<std::string>::const_iterator
it=c_typecast.errors.begin();
it!=c_typecast.errors.end();
it++)
{
error().source_location=expr.find_source_location();
error() << "in expression `" << to_string(expr) << "':\n"
<< "conversion from `"
<< to_string(src_type) << "' to `"
<< to_string(dest_type) << "': "
<< *it << eom;
}
if(!c_typecast.errors.empty())
throw 0; // give up
for(std::list<std::string>::const_iterator
it=c_typecast.warnings.begin();
it!=c_typecast.warnings.end();
it++)
{
warning().source_location=expr.find_source_location();
warning() << "warning: conversion from `"
<< to_string(src_type)
<< "' to `"
<< to_string(dest_type)
<< "': " << *it << eom;
}
}
void c_typecheck_baset::implicit_typecast_arithmetic(
exprt &expr1,
exprt &expr2)
{
c_typecastt c_typecast(*this);
c_typecast.implicit_typecast_arithmetic(expr1, expr2);
}
void c_typecheck_baset::implicit_typecast_arithmetic(exprt &expr)
{
c_typecastt c_typecast(*this);
c_typecast.implicit_typecast_arithmetic(expr);
}
|