8#ifndef HPP_ALIB_EXPRESSIONS_DETAIL_VIRTUAL_MACHINE
9#define HPP_ALIB_EXPRESSIONS_DETAIL_VIRTUAL_MACHINE
11#if !defined (HPP_ALIB_EXPRESSIONS_EXPRESSION)
15#ifndef HPP_ALIB_ENUMS_UNDERLYING_INTEGRAL
21namespace alib {
namespace expressions {
212 + static_cast<
uinteger>(idxOriginal ) )
232 const String& functionOrOp,
bool isOperator,
239 + static_cast<
uinteger>(idxOriginal ) )
270 + static_cast<
uinteger>(idxOriginal ) )
@ Subroutine
Invokes another program.
@ FlagEOC
Flags a command to be the last of a conditional.
@ CmdMask
Used to mask the command out of an opcode.
@ Function
Invokes a C++ callback function.
@ Constant
Pushes a constant to the stack.
@ JumpIfFalse
Jumps if top of the stack indicates false.
Command(CallbackDecl callback, integer qtyFunctionArgs, const Box &resultType, const String &functionOrOp, bool isOperator, integer idxOriginal, integer idxNormalized)
void SetEndOfConditionalFlag()
DecompileInfoType DecompileType
Command(const Box &value, bool isOptimization, integer idxOriginal, integer idxNormalized)
@ AutoCast
Command results from an automatically inserted cast.
@ UnaryOp
Command results from an unary operator.
@ BinaryOp
Command results from a binary operator.
@ OptimizationConstant
Command results from a constant resulting from an optimization.
@ LiteralConstant
Command results from a literal constant.
@ Unconditional
Denotes Jump.
@ Conditional
Denotes JumpIfFalse.
uinteger ExpressionPositions
Command(JumpType jumpType, integer idxOriginal, integer idxNormalized)
bool IsConditionalJump() const
static ALIB_API void run(Program &program, Scope &scope)
integer PC
Type definition for a program counter.
static ALIB_API alib::Box Run(Program &program, Scope &scope)
static ALIB_API AString DbgList(Program &program)
static ALIB_API AST * Decompile(Program &program, MonoAllocator &allocator)
#define ALIB_ENUMS_MAKE_BITWISE(TEnum)
#define ALIB_ENUMS_ASSIGN_RECORD(TEnum, TRecord)
#define ALIB_BOXING_VTABLE_DECLARE(TMapped, Identifier)
Box(*)(Scope &scope, ArgIterator argsBegin, ArgIterator argsEnd) CallbackDecl
lang::uinteger uinteger
Type alias in namespace alib.
expressions::CompilerPlugin CompilerPlugin
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
OperationParam(CallbackDecl callback)
OperationParam(Program *program)
Box Value
A constant value to push to the stack.
Program * NestedProgram
The nested virtual machine program to invoke.
PC Distance
A distance to jump.
OperationParam(integer distance)
CallbackDecl Callback
A C++ callback function to invoke.
OperationParam(Box value)