Fixed Insertions

Felix also allows you to insert executable code literally in fixed places inside Felix code. There are two cases.

Lifting Plain Statements

Statements can be lifted with the plain cstmt statement:

proc hello() {
  cstmt """
    std::cout<< "Hello World" << ::std::endl;
    std::cout<< "C++ Embedded in Felix" << ::std::endl;
  """;
}

Lifting NonReturning Executable Statements

If the C statement does not return, use the noreturn option:

proc leave() {
  noreturn cstmt "::std::exit(0);";
}

Lifts with arguments

Lifted code can accept arguments:

proc error(x:int) {
  noreturn cstmt "::std::exit($1);" x;
}

The argument can be a tuple, the components are inserted by the usual rules for C bindings using $9 style notation.

Lifting Expressions

An expression can be lifted too, however the type must be given:

var x = cexpr[int]"42" endcexpr;

If the expression is not atomic, it is wise to enclose it in parentheses.

Lifting Variables

There is a short hand for lifting variables:

cvar[int] M_PI;

which is equivalent to:

cexpr[int]"M_PI" endcexpr;