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
|
#include "parser.ih"
RuleValue Parser::unary(int operation, RuleValue const &e)
{
if (d_error)
return e;
error(e.tag() == RuleValue::FUNCTION,
"Function names have no values. Forgot argument(s)?");
RuleValue value = rvalue(e);
switch (operation)
{
case RuleValue::CHAR:
return RuleValue(value.asChar());
case RuleValue::INT:
return RuleValue(value.asInt());
case RuleValue::DOUBLE:
return RuleValue(value.asDouble());
case '-':
return RuleValue(-value);
case '~':
integral(value);
return RuleValue(~value);
default:
error(true, "Illegal operand for unary operator");
break;
}
return value; // not reached
}
|