internal object Execute(string source, string filePath = null)
{
var oldCurentExecFolder = Context.CurrentExecFolder;
var currentExecFolder = filePath == null
? Directory.GetCurrentDirectory()
: Path.GetDirectoryName(filePath);
Context.CurrentExecFolder = currentExecFolder;
if (currentExecFolder != null)
Directory.SetCurrentDirectory(currentExecFolder);
try
{
var lexer = new Lexer(source, filePath);
var parser = new Parser(lexer);
var ast = parser.Parse();
return ast.Accept(this);
}
finally
{
Context.CurrentExecFolder = oldCurentExecFolder;
if (oldCurentExecFolder != null)
Directory.SetCurrentDirectory(oldCurentExecFolder);
}
}