Interpreter

This is the main interface for the host application to interact with scripts.

class Interpreter : INodeVisitor {}

Constructors

this
this()

Constructs a new Interpreter with a global context. Note that all calls to evaluate run in a new context below the global context. This allows keywords such as let and const to not pollute the global namespace. However, scripts can use var to declare variables that are global.

Members

Functions

callFunction
ScriptAny callFunction(ScriptFunction func, ScriptAny thisObj, ScriptAny[] args)

Calls a script function. Can throw ScriptRuntimeException.

evaluate
ScriptAny evaluate(string code)

This is the main entry point for evaluating a script program.

forceSetGlobal
void forceSetGlobal(string name, T value, bool isConst)

Sets a global variable or constant without checking whether or not the variable or const was already declared. This is used by host applications to define custom functions or objects.

forceUnsetGlobal
void forceUnsetGlobal(string name)

Unsets a variable or constant in the global context. Used by host applications to remove items that were loaded by the standard library load functions.

initializeStdlib
void initializeStdlib()

Initializes the Mildew standard library, such as Object, Math, and console namespaces. This is optional and is not called by the constructor. For a script to use these methods this must be called first.

visitArrayIndexNode
Variant visitArrayIndexNode(ArrayIndexNode ainode)

handle array index

visitArrayLiteralNode
Variant visitArrayLiteralNode(ArrayLiteralNode alnode)

return an array from an array literal node

visitBinaryOpNode
Variant visitBinaryOpNode(BinaryOpNode bonode)

processes binary operations including assignment

visitBlockStatementNode
Variant visitBlockStatementNode(BlockStatementNode bsnode)

handles {block} statement

visitBreakStatementNode
Variant visitBreakStatementNode(BreakStatementNode bsnode)

handle break statements

visitClassDeclarationStatementNode
Variant visitClassDeclarationStatementNode(ClassDeclarationStatementNode cdsnode)

handle class declaration

visitClassLiteralNode
Variant visitClassLiteralNode(ClassLiteralNode clnode)

handle class literals

visitContinueStatementNode
Variant visitContinueStatementNode(ContinueStatementNode csnode)

handle continue statements

visitDeleteStatementNode
Variant visitDeleteStatementNode(DeleteStatementNode dsnode)

handle delete statement

visitDoWhileStatementNode
Variant visitDoWhileStatementNode(DoWhileStatementNode dwsnode)

handles do-while statement

visitExpressionStatementNode
Variant visitExpressionStatementNode(ExpressionStatementNode esnode)

handle expression statements

visitForOfStatementNode
Variant visitForOfStatementNode(ForOfStatementNode fosnode)

handles for-of (and for-in) loops

visitForStatementNode
Variant visitForStatementNode(ForStatementNode fsnode)

handles for(;;) statements

visitFunctionCallNode
Variant visitFunctionCallNode(FunctionCallNode fcnode)

handles function calls

visitFunctionDeclarationStatementNode
Variant visitFunctionDeclarationStatementNode(FunctionDeclarationStatementNode fdsnode)

handle function declarations

visitFunctionLiteralNode
Variant visitFunctionLiteralNode(FunctionLiteralNode flnode)

handles function literals

visitIfStatementNode
Variant visitIfStatementNode(IfStatementNode isnode)

handles if statements

visitLiteralNode
Variant visitLiteralNode(LiteralNode lnode)

extract a VisitResult from a LiteralNode

visitMemberAccessNode
Variant visitMemberAccessNode(MemberAccessNode manode)

handle dot operator

visitNewExpressionNode
Variant visitNewExpressionNode(NewExpressionNode nenode)

handles new expression

visitObjectLiteralNode
Variant visitObjectLiteralNode(ObjectLiteralNode olnode)

generates object from object literal node

visitPostfixOpNode
Variant visitPostfixOpNode(PostfixOpNode ponode)

handle constructs such as i++ and i--

visitReturnStatementNode
Variant visitReturnStatementNode(ReturnStatementNode rsnode)

handles return statements

visitSuperCallStatementNode
Variant visitSuperCallStatementNode(SuperCallStatementNode scsnode)

handle super constructor calls TODO use super as reference to base class with correct "this"

visitSwitchStatementNode
Variant visitSwitchStatementNode(SwitchStatementNode ssnode)

handles switch case statements

visitTerniaryOpNode
Variant visitTerniaryOpNode(TerniaryOpNode tonode)

handles : ? operator

visitThrowStatementNode
Variant visitThrowStatementNode(ThrowStatementNode tsnode)

handles throw statements

visitTryCatchBlockStatementNode
Variant visitTryCatchBlockStatementNode(TryCatchBlockStatementNode tcbsnode)

handle try catch block statements

visitUnaryOpNode
Variant visitUnaryOpNode(UnaryOpNode uonode)

returns a value from a unary operation

visitVarAccessNode
Variant visitVarAccessNode(VarAccessNode vanode)

handles variable access

visitVarDeclarationStatementNode
Variant visitVarDeclarationStatementNode(VarDeclarationStatementNode vdsnode)

handles var, let, and const declarations

visitWhileStatementNode
Variant visitWhileStatementNode(WhileStatementNode wsnode)

handles while statements

Structs

VisitResult
struct VisitResult

holds information from visiting nodes TODO redesign this as a union

Meta