private static EvaluationResult Exists(Context context, ModuleLiteral env, EvaluationStackFrame args) { var directory = Args.AsDirectory(args, 0); // TODO: fail if the input directory is not on a read-only mount. bool exists = context.FrontEndHost.Engine.DirectoryExists(directory.Path); return(EvaluationResult.Create(exists)); }
private ObjectLiteral BuildExecuteOutputs(Context context, ModuleLiteral env, ProcessOutputs processOutputs, bool isService) { var entry = context.TopStack; using (var empty = EvaluationStackFrame.Empty()) { var getOutputFile = new Closure( env, FunctionLikeExpression.CreateAmbient(ExecuteResultGetOutputFile, m_getOutputFileSignature, GetOutputFile, m_getOutputFileStatistic), frame: empty); var getOutputDirectory = new Closure( env, FunctionLikeExpression.CreateAmbient(ExecuteResultGetOutputDirectory, m_getOutputDirectorySignature, GetOutputDirectory, m_getOutputDirectoryStatistic), frame: empty); var getOutputFiles = new Closure( env, FunctionLikeExpression.CreateAmbient(ExecuteResultGetOutputFiles, m_getOutputFilesSignature, GetOutputFiles, m_getOutputFilesStatistic), frame: empty); var getRequiredOutputFiles = new Closure( env, FunctionLikeExpression.CreateAmbient(ExecuteResultGetRequiredOutputFiles, m_getRequiredOutputFilesSignature, GetRequiredOutputFiles, m_getRequiredOutputFilesStatistic), frame: empty); var bindings = new List <Binding>(isService ? 6 : 5) { new Binding(ExecuteResultGetOutputFile, getOutputFile, location: default), new Binding(ExecuteResultGetOutputDirectory, getOutputDirectory, location: default), new Binding(ExecuteResultGetOutputFiles, getOutputFiles, location: default), new Binding(ExecuteResultGetRequiredOutputFiles, getRequiredOutputFiles, location: default), new Binding(ExecuteResultProcessOutputs, new EvaluationResult(processOutputs), location: default), }; if (isService) { bindings.Add(new Binding(CreateServiceResultServiceId, processOutputs.ProcessPipId, location: default)); } return(ObjectLiteral.Create(bindings, entry.InvocationLocation, entry.Path)); } // Local functions EvaluationResult GetOutputFile(Context contextArg, ModuleLiteral envArg, EvaluationStackFrame args) { var outputPath = Args.AsPathOrUndefined(args, 0, false); if (outputPath.IsValid && processOutputs.TryGetOutputFile(outputPath, out var file)) { return(EvaluationResult.Create(file)); } return(EvaluationResult.Undefined); } EvaluationResult GetOutputDirectory(Context contextArg, ModuleLiteral envArg, EvaluationStackFrame args) { var outputDir = Args.AsDirectory(args, 0); if (outputDir.IsValid && processOutputs.TryGetOutputDirectory(outputDir.Path, out var output)) { return(EvaluationResult.Create(output)); } return(EvaluationResult.Undefined); } EvaluationResult GetOutputFiles(Context contextArg, ModuleLiteral envArg, EvaluationStackFrame args) { var outputFiles = processOutputs.GetOutputFiles().Select(f => EvaluationResult.Create(f)).ToArray(); return(EvaluationResult.Create(ArrayLiteral.CreateWithoutCopy(outputFiles, entry.InvocationLocation, entry.Path))); } EvaluationResult GetRequiredOutputFiles(Context contextArg, ModuleLiteral envArg, EvaluationStackFrame args) { var outputFiles = processOutputs.GetRequiredOutputFiles().Select(f => EvaluationResult.Create(f)).ToArray(); return(EvaluationResult.Create(ArrayLiteral.CreateWithoutCopy(outputFiles, entry.InvocationLocation, entry.Path))); } }