Files
RScript/DoRunner/ExpressionRunner.cs
2025-12-11 18:03:28 +08:00

30 lines
905 B
C#

using Convention.RScript.Parser;
using System.Collections;
using System.Diagnostics.CodeAnalysis;
namespace Convention.RScript.Runner
{
public class ExpressionRunner : IRSentenceRunner
{
public void Compile(ExpressionParser parser, RScriptSentence sentence, RScriptContext context)
{
parser.Compile(sentence.content);
}
[return: MaybeNull]
public object Run(ExpressionParser parser, RScriptSentence sentence, RScriptContext context)
{
return parser.Evaluate(sentence.content);
}
[return: MaybeNull]
public IEnumerator RunAsync(ExpressionParser parser, RScriptSentence sentence, RScriptContext context)
{
var result = parser.Evaluate(sentence.content);
if(result is IEnumerator ir)
yield return ir;
yield return null;
}
}
}