新增重新运行的函数
This commit is contained in:
@@ -91,6 +91,8 @@ namespace Convention.RScript
|
||||
Dictionary<string, RScriptVariableEntry> GetCurrentVariables();
|
||||
void Run(ExpressionParser parser);
|
||||
IEnumerator RunAsync(ExpressionParser parser);
|
||||
public void ReRun(ExpressionParser parser);
|
||||
public IEnumerator ReRunAsync(ExpressionParser parser);
|
||||
SerializableClass Compile(ExpressionParser parser);
|
||||
SerializableClass CompileFromCurrent(ExpressionParser parser);
|
||||
}
|
||||
@@ -327,6 +329,21 @@ namespace Convention.RScript
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetAndSureRunAgain(ExpressionParser parser)
|
||||
{
|
||||
StepCount = 0;
|
||||
CurrentLocalSpaceVariableNames.Clear();
|
||||
RuntimePointerStack.Clear();
|
||||
GotoPointerStack.Clear();
|
||||
CurrentLocalSpaceVariableNames.Clear();
|
||||
CurrentLocalSpaceVariableNames.Push(new());
|
||||
JumpPointerCache.Clear();
|
||||
foreach (var (name, varObject) in Variables)
|
||||
{
|
||||
parser.context.Variables[name] = varObject.data;
|
||||
}
|
||||
}
|
||||
|
||||
private void AfterRun(ExpressionParser parser)
|
||||
{
|
||||
foreach (var (varName, varValue) in parser.context.Variables)
|
||||
@@ -361,6 +378,31 @@ namespace Convention.RScript
|
||||
AfterRun(parser);
|
||||
}
|
||||
|
||||
public void ReRun(ExpressionParser parser)
|
||||
{
|
||||
ResetAndSureRunAgain(parser);
|
||||
for (CurrentRuntimePointer = 0; CurrentRuntimePointer < Sentences.Length; CurrentRuntimePointer++)
|
||||
{
|
||||
RunNextStep(parser);
|
||||
}
|
||||
AfterRun(parser);
|
||||
}
|
||||
|
||||
public IEnumerator ReRunAsync(ExpressionParser parser)
|
||||
{
|
||||
ResetAndSureRunAgain(parser);
|
||||
for (CurrentRuntimePointer = 0; CurrentRuntimePointer < Sentences.Length; CurrentRuntimePointer++)
|
||||
{
|
||||
var ret = RunNextStep(parser);
|
||||
if (ret is IEnumerator ir)
|
||||
{
|
||||
yield return ir;
|
||||
}
|
||||
yield return null;
|
||||
}
|
||||
AfterRun(parser);
|
||||
}
|
||||
|
||||
public SerializableClass Compile(ExpressionParser parser)
|
||||
{
|
||||
BeforeRun(parser);
|
||||
|
||||
@@ -145,7 +145,6 @@ namespace Convention.RScript
|
||||
context = CreateContext(SplitScript(script).ToArray(), import, variables);
|
||||
return context.RunAsync(parser);
|
||||
}
|
||||
|
||||
public SerializableClass Compile(string script, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
parser = new(new());
|
||||
@@ -173,5 +172,15 @@ namespace Convention.RScript
|
||||
context = CreateContext(data, import, variables);
|
||||
yield return context.RunAsync(parser);
|
||||
}
|
||||
public Dictionary<string, RScriptVariableEntry> ReRun()
|
||||
{
|
||||
context.ReRun(parser);
|
||||
return context.GetCurrentVariables();
|
||||
}
|
||||
public IEnumerator ReRunAsync()
|
||||
{
|
||||
return context.ReRunAsync(parser);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user