File: functionreturn.cc

package info (click to toggle)
icmake 13.05.01-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,132 kB
  • sloc: cpp: 11,595; fortran: 883; makefile: 853; sh: 546; pascal: 342
file content (26 lines) | stat: -rw-r--r-- 580 bytes parent folder | download | duplicates (3)
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
#define XERR
#include "parser.ih"

    // expr's value already pushed
    //
SemVal Parser::functionReturn(SemVal &expr) const
{
    // EXIT already handled

    if (not voidMask(d_functions.type(), expr.type()))
        Error::msg(Error::RETURN_TYPE) << d_functions.name() << "'\n";

    else if (d_functions.type() != e_void)
        expr << Opcode::pop_reg;

    else if (
        d_functions.isMain() 
        and 
        d_functions.mainInfo().returnType == e_void
    )
        expr << Opcode::push_0 << Opcode::pop_reg;

    expr << Opcode::ret;

    return move(expr);
}