#include <intcomp.h>
Public Types | |
Public Member Functions | |
virtual void | addLoad (const String &name, bool isFilename) |
Adds a direct load request to the module being compiled. | |
virtual void | addNamespace (const String &nspace, const String &alias, bool full=false, bool filename=false) |
Adds a known namespace. | |
t_ret_type | compileAll (const String &input) |
t_ret_type | compileNext (const String &input) |
Compile another codeslice from a string. | |
t_ret_type | compileNext (Stream *input) |
Compile another code slice coming from the stream. | |
void | interactive (bool iactive) |
Sets or resets interactive mode. | |
bool | interactive () const |
InteractiveCompiler (ModuleLoader *loader, VMachine *vm) | |
Create the interactive compiler. | |
void | loader (ModuleLoader *l) |
ModuleLoader * | loader () const |
VMachine * | vm () const |
~InteractiveCompiler () |
This compiler is meant to incrementally compile, load dependencies and execute on the fly single statements.
For this reason, the compiler is provided with a VM and a flexy module; the compiler independently creates the module (which may be referenced and taken also externally) and exposes a function that allows incremental compilation. Using compileNext(), this class independently loads dependencies as they are found, executes statements and fills the module symbol table.
The compiler may be provided with a VM generated from the outside, or it will create a standard VM on its own (which can be configured at a later moment.
e_nothing |
Do-nothing statements (comments, whitespaces .
..) |
e_more | We need more to finish the current statement. |
e_incomplete | Incomplete context. |
e_decl |
Statement was a complete declaration (function, object, class.
..) |
e_statement |
Normal statement (assignment, if block, while block.
..) |
e_expression | Stand alone expression (sum, sub, single value). |
e_call |
Special expression consisting of a single call to a sub expression.
Usually, the user expects a return value. |
e_terminated |
Falcon::InteractiveCompiler::InteractiveCompiler | ( | ModuleLoader * | loader, | |
VMachine * | vm | |||
) |
Create the interactive compiler.
If a VM is not provided, it will be automatically created. Notice that the compiler will apply its error handler to the loader at compile time.
Falcon::InteractiveCompiler::~InteractiveCompiler | ( | ) |
virtual void Falcon::InteractiveCompiler::addLoad | ( | const String & | name, | |
bool | isFilename | |||
) | [virtual] |
Adds a direct load request to the module being compiled.
name | The name of the module to be loaded | |
isFilename | True if the name to be loaded is actually a filename path. |
Reimplemented from Falcon::Compiler.
virtual void Falcon::InteractiveCompiler::addNamespace | ( | const String & | nspace, | |
const String & | alias, | |||
bool | full = false , |
|||
bool | filename = false | |||
) | [virtual] |
Adds a known namespace.
nspace | The namespace to be added (as module name). | |
alias | If not empty, will be the alias under which the module will be locally known. | |
full | If true, import all symbols. | |
filename | If true, the load request was for a direct filename. |
Reimplemented from Falcon::Compiler.
t_ret_type Falcon::InteractiveCompiler::compileAll | ( | const String & | input | ) |
t_ret_type Falcon::InteractiveCompiler::compileNext | ( | const String & | input | ) |
t_ret_type Falcon::InteractiveCompiler::compileNext | ( | Stream * | input | ) |
Compile another code slice coming from the stream.
The calling application will receive the control back when the compilation, and eventually the execution of the needed steps are completed.
The return value may be one of the t_ret_type enumeration, and the calling application can take proper actions.
A return indicating error won't block the compiler nor invalidate, which is still available to compile incrementally other code slices.
void Falcon::InteractiveCompiler::interactive | ( | bool | iactive | ) | [inline] |
Sets or resets interactive mode.
In interactive mode, the compiler accepts one statement at a time and transforms expressions into "return [expression]" statements to allow their value to be visible after the execution.
Also, the lexer is configured so that it can accept partial elements from streams and tell back about a partial status to the compiler.
bool Falcon::InteractiveCompiler::interactive | ( | ) | const [inline] |
void Falcon::InteractiveCompiler::loader | ( | ModuleLoader * | l | ) | [inline] |
ModuleLoader* Falcon::InteractiveCompiler::loader | ( | ) | const [inline] |
VMachine* Falcon::InteractiveCompiler::vm | ( | ) | const [inline] |