Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


Compiler implementation of the D programming language.

Source: dinterpret.d

struct CtfeStack;
The values of all CTFE variables
struct CompiledCtfeFunction;
CTFE-object code for a single function
Currently only counts the number of local variables in the function
void ctfeCompile(FuncDeclaration fd);
Compile this function for CTFE. At present, this merely allocates variables.
Expression ctfeInterpret(Expression e);
Entry point for CTFE. A compile-time result is required. Give an error if not possible.
e must be semantically valid expression. In other words, it should not contain any ErrorExps in it. But, CTFE interpretation will cross over functions and may invoke a function that contains ErrorStatement in its body. If that, the "CTFE failed because of previous errors" error is raised.
Expression interpret(FuncDeclaration fd, InterState* istate, Expressions* arguments, Expression thisarg);
Attempt to interpret a function given the arguments.

Input: istate state for calling function (NULL if none) arguments function arguments thisarg 'this', if a needThis() function, NULL if not.

Return result expression if successful, TOKcantexp if not, or CTFEExp if function returned void.

Expression interpret(Statement s, InterState* istate);
Interpret the statement.
NULL continue to next statement TOKcantexp cannot interpret statement at compile time !NULL expression from return statement, or thrown exception
Expression interpret_length(InterState* istate, Expression earg);
Special Functions
bool hasValue(VarDeclaration vd);
CTFE Sanity Checks