File: _unary.cc

package info (click to toggle)
bisonc%2B%2B 6.09.02-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,984 kB
  • sloc: cpp: 9,375; ansic: 1,505; fortran: 1,134; makefile: 1,062; sh: 526; yacc: 84; lex: 60
file content (39 lines) | stat: -rw-r--r-- 794 bytes parent folder | download | duplicates (10)
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
}