unsigned index = 0x3F;
if(Literal *literal_subscript = dynamic_cast<Literal *>(binary.right.get()))
- if(literal_subscript->value.check_type<int>())
+ if(literal_subscript->value.has_type<int>())
index = literal_subscript->value.value<int>();
add_to_chain(r_reference, Assignment::Target::ARRAY, index);
}
else if(const Literal *literal_size = dynamic_cast<const Literal *>(var.array_size.get()))
{
- if(literal_size->value.check_type<int>())
+ if(literal_size->value.has_type<int>())
{
Aggregate &aggre = aggregates[&var];
aggre.declaration = &var;
template<typename T>
void ConstantFolder::convert_to_result(const Variant &value)
{
- if(value.check_type<bool>())
+ if(value.has_type<bool>())
set_result(static_cast<T>(value.value<bool>()));
- else if(value.check_type<int>())
+ else if(value.has_type<int>())
set_result(static_cast<T>(value.value<int>()));
- else if(value.check_type<unsigned>())
+ else if(value.has_type<unsigned>())
set_result(static_cast<T>(value.value<unsigned>()));
- else if(value.check_type<float>())
+ else if(value.has_type<float>())
set_result(static_cast<T>(value.value<float>()));
}
return;
RefPtr<Literal> literal = new Literal;
- if(r_constant_value.check_type<bool>())
+ if(r_constant_value.has_type<bool>())
literal->token = (r_constant_value.value<bool>() ? "true" : "false");
- else if(r_constant_value.check_type<int>())
+ else if(r_constant_value.has_type<int>())
literal->token = lexical_cast<string>(r_constant_value.value<int>());
- else if(r_constant_value.check_type<unsigned>())
+ else if(r_constant_value.has_type<unsigned>())
literal->token = lexical_cast<string>(r_constant_value.value<unsigned>())+"u";
- else if(r_constant_value.check_type<float>())
+ else if(r_constant_value.has_type<float>())
{
literal->token = lexical_cast<string>(r_constant_value.value<float>(), Fmt().precision(8));
if(literal->token.find('.')==string::npos && literal->token.find('e')==string::npos)
char oper2 = unary.oper->token[1];
if(oper=='!')
{
- if(r_constant_value.check_type<bool>())
+ if(r_constant_value.has_type<bool>())
set_result(!r_constant_value.value<bool>());
}
else if(oper=='~')
{
- if(r_constant_value.check_type<int>())
+ if(r_constant_value.has_type<int>())
set_result(~r_constant_value.value<int>());
- else if(r_constant_value.check_type<unsigned>())
+ else if(r_constant_value.has_type<unsigned>())
set_result(~r_constant_value.value<unsigned>());
}
else if(oper=='-' && !oper2)
{
- if(r_constant_value.check_type<int>())
+ if(r_constant_value.has_type<int>())
set_result(-r_constant_value.value<int>());
- else if(r_constant_value.check_type<unsigned>())
+ else if(r_constant_value.has_type<unsigned>())
set_result(-r_constant_value.value<unsigned>());
- else if(r_constant_value.check_type<float>())
+ else if(r_constant_value.has_type<float>())
set_result(-r_constant_value.value<float>());
}
}
return;
// Currently only expressions with both sides of equal types are handled.
- if(!left_value.check_same_type(r_constant_value))
+ if(!left_value.has_same_type(r_constant_value))
return;
char oper = binary.oper->token[0];
char oper2 = binary.oper->token[1];
if(oper=='&' || oper=='|' || oper=='^')
{
- if(oper2==oper && left_value.check_type<bool>())
+ if(oper2==oper && left_value.has_type<bool>())
set_result(evaluate_logical(oper, left_value.value<bool>(), r_constant_value.value<bool>()));
- else if(!oper2 && left_value.check_type<int>())
+ else if(!oper2 && left_value.has_type<int>())
set_result(evaluate_logical(oper, left_value.value<int>(), r_constant_value.value<int>()));
- else if(!oper2 && left_value.check_type<unsigned>())
+ else if(!oper2 && left_value.has_type<unsigned>())
set_result(evaluate_logical(oper, left_value.value<unsigned>(), r_constant_value.value<unsigned>()));
}
else if((oper=='<' || oper=='>') && oper2!=oper)
{
- if(left_value.check_type<int>())
+ if(left_value.has_type<int>())
set_result(evaluate_relation(binary.oper->token, left_value.value<int>(), r_constant_value.value<int>()));
- else if(left_value.check_type<unsigned>())
+ else if(left_value.has_type<unsigned>())
set_result(evaluate_relation(binary.oper->token, left_value.value<unsigned>(), r_constant_value.value<unsigned>()));
- else if(left_value.check_type<float>())
+ else if(left_value.has_type<float>())
set_result(evaluate_relation(binary.oper->token, left_value.value<float>(), r_constant_value.value<float>()));
}
else if((oper=='=' || oper=='!') && oper2=='=')
{
- if(left_value.check_type<int>())
+ if(left_value.has_type<int>())
set_result((left_value.value<int>()==r_constant_value.value<int>()) == (oper=='='));
- else if(left_value.check_type<unsigned>())
+ else if(left_value.has_type<unsigned>())
set_result((left_value.value<unsigned>()==r_constant_value.value<unsigned>()) == (oper=='='));
- else if(left_value.check_type<float>())
+ else if(left_value.has_type<float>())
set_result((left_value.value<float>()==r_constant_value.value<float>()) == (oper=='='));
}
else if(oper=='+' || oper=='-' || oper=='*' || oper=='/')
{
- if(left_value.check_type<int>())
+ if(left_value.has_type<int>())
set_result(evaluate_arithmetic(oper, left_value.value<int>(), r_constant_value.value<int>()));
- else if(left_value.check_type<unsigned>())
+ else if(left_value.has_type<unsigned>())
set_result(evaluate_arithmetic(oper, left_value.value<unsigned>(), r_constant_value.value<unsigned>()));
- else if(left_value.check_type<float>())
+ else if(left_value.has_type<float>())
set_result(evaluate_arithmetic(oper, left_value.value<float>(), r_constant_value.value<float>()));
}
else if(oper=='%' || ((oper=='<' || oper=='>') && oper2==oper))
{
- if(left_value.check_type<int>())
+ if(left_value.has_type<int>())
set_result(evaluate_int_special_op(oper, left_value.value<int>(), r_constant_value.value<int>()));
- else if(left_value.check_type<unsigned>())
+ else if(left_value.has_type<unsigned>())
set_result(evaluate_int_special_op(oper, left_value.value<unsigned>(), r_constant_value.value<unsigned>()));
}
}
if(iter.condition)
{
visit(iter.condition);
- if(r_constant && r_constant_value.check_type<bool>() && !r_constant_value.value<bool>())
+ if(r_constant && r_constant_value.has_type<bool>() && !r_constant_value.value<bool>())
{
RefPtr<Literal> literal = new Literal;
literal->token = "false";
ConstantConditionEliminator::ConstantStatus ConstantConditionEliminator::check_constant_condition(const Expression &expr)
{
if(const Literal *literal = dynamic_cast<const Literal *>(&expr))
- if(literal->value.check_type<bool>())
+ if(literal->value.has_type<bool>())
return (literal->value.value<bool>() ? CONSTANT_TRUE : CONSTANT_FALSE);
return NOT_CONSTANT;
}