14 using System.Collections.Generic;
16 using System.Threading;
18 using Irony.Interpreter.Ast;
20 namespace Irony.Interpreter {
49 public StringBuilder OutputBuffer =
new StringBuilder();
54 LanguageCaseSensitive = Runtime.Language.Grammar.CaseSensitive;
58 ThreadId = Thread.CurrentThread.ManagedThreadId;
60 CurrentFrame = TopFrame;
62 Data.Init(runtime.Unassigned);
65 public object LastResult {
66 get {
return Data.LastPushedItem; }
69 Data.Init(Runtime.Unassigned);
71 public bool HasLastResult {
72 get {
return LastResult != Runtime.Unassigned; }
76 CurrentFrame =
new StackFrame(
this, methodName, CurrentFrame, parent);
79 CurrentFrame = CurrentFrame.Caller;
83 if (CurrentFrame.Values.TryGetValue(name, out value))
return true;
84 var frame = CurrentFrame.Parent;
85 while (frame != null) {
86 if (frame.Values.TryGetValue(name, out value))
return true;
93 public void SetValue(
string name,
object value) {
94 CurrentFrame.Values[name] = value;
97 public void Write(
string text) {
98 OutputBuffer.Append(text);
101 OutputBuffer.AppendLine(text);
106 public void ThrowError(
string message, params
object[] args) {
107 if (args != null && args.Length > 0)
108 message = string.Format(message, args);
void ThrowError(string message, params object[] args)
readonly bool LanguageCaseSensitive
void PushFrame(string methodName, AstNode node, StackFrame parent)
void SetValue(string name, object value)
The DynamicCallDispatcher class is responsible for fast dispatching to the implementation based on ar...
EvaluationContext(LanguageRuntime runtime)
void WriteLine(string text)
readonly ValuesTable Globals
DynamicCallDispatcher CallDispatcher
bool TryGetValue(string name, out object value)