예제 #1
0
 private PipReference[] PipsOrderedBy(Func <PipExecutionPerformance, object> selector)
 {
     return(Analyzer.Pip2Perf
            .OrderBy(kvp => selector(kvp.Value))
            .Select(kvp => Analyzer.AsPipReference(kvp.Key))
            .ToArray());
 }
예제 #2
0
        /// <inheritdoc />
        public Possible <ObjectContext, Failure> EvaluateExpression(ThreadState threadState, int frameIndex, string expr, bool evaluateForCompletions)
        {
            if (Pip.TryParseSemiStableHash(expr, out var hash) && Analyzer.SemiStableHash2Pip.TryGetValue(hash, out var pipId))
            {
                return(new ObjectContext(context: this, Analyzer.AsPipReference(pipId)));
            }

            string translatedPath = Analyzer.Session.TranslateUserPath(expr);

            if (AbsolutePath.TryCreate(PathTable, translatedPath, out var path) && path.IsValid)
            {
                return(new ObjectContext(context: this, new AnalyzePath(path)));
            }

            var exprToEval  = evaluateForCompletions ? $"({expr})[0]" : expr;
            var maybeResult = JPath.JPath.TryEval(Evaluator, exprToEval);

            if (maybeResult.Succeeded)
            {
                return(new ObjectContext(this, maybeResult.Result));
            }
            else
            {
                return(maybeResult.Failure);
            }
        }
예제 #3
0
        /// <inheritdoc />
        public Possible <ObjectContext, Failure> EvaluateExpression(ThreadState threadState, int frameIndex, string expr, bool evaluateForCompletions)
        {
            if (Pip.TryParseSemiStableHash(expr, out var hash) && Analyzer.SemiStableHash2Pip.TryGetValue(hash, out var pipId))
            {
                return(new ObjectContext(context: this, Analyzer.AsPipReference(pipId)));
            }

            string translatedPath = Analyzer.Session.TranslateUserPath(expr);

            if (AbsolutePath.TryCreate(PathTable, translatedPath, out var path) && path.IsValid)
            {
                return(new ObjectContext(context: this, new AnalyzePath(path)));
            }

            var start        = DateTime.UtcNow;
            var exprToEval   = evaluateForCompletions ? $"({expr})[0]" : expr;
            var maybeResult  = JPath.JPath.TryEval(Evaluator, exprToEval);
            var evalDuration = DateTime.UtcNow.Subtract(start);

            if (maybeResult.Succeeded)
            {
                if (!evaluateForCompletions)
                {
                    Analysis.IgnoreResult(Evaluator.TopEnv.SetVar(LastValueVarName, maybeResult.Result));
                    Analysis.IgnoreResult(Evaluator.TopEnv.SetVar(EvalDurationVarName, Result.Scalar(evalDuration)));
                }
                return(new ObjectContext(this, maybeResult.Result));
            }
            else
            {
                return(maybeResult.Failure);
            }
        }
예제 #4
0
        private ObjectInfo FileArtifactInfo(FileArtifact f)
        {
            if (!f.IsValid)
            {
                return(new ObjectInfo("Invalid"));
            }

            return(new ObjectInfo(
                       preview: FileArtifactPreview(f),
                       properties: new[]
            {
                new Property("Path", f.Path.ToString(PathTable)),
                new Property("Kind", f.IsSourceFile ? "source" : "output"),
                new Property("RewriteCount", f.RewriteCount),
                new Property("FileContentInfo", () => Analyzer.TryGetFileContentInfo(f)),
                f.IsOutputFile ? new Property("Producer", () => Analyzer.AsPipReference(PipGraph.GetProducer(f))) : null,
                new Property("Consumers", () => PipGraph.GetConsumingPips(f.Path))
            }
                       .Where(p => p != null)));
        }