Exemplo n.º 1
0
        public async Task <EvaluateResult> EvaluateAsync()
        {
            if (State == BlockState.Done)
            {
                return(EvaluateResult.None());
            }

            State = BlockState.InProgress;

            if (_loopInstructions.State == BlockState.Done)
            {
                _loopInstructions.Reset();
            }

            if (_loopInstructions.State == BlockState.New &&
                !await _evaluator.EvaluateConditionAsync(_loop.Condition, _ctx.Variable,
                                                         _ctx.NatvisScope))
            {
                State = BlockState.Done;
                return(EvaluateResult.None());
            }

            EvaluateResult result = await _loopInstructions.EvaluateAsync();

            if (result.Type == ResultType.Break)
            {
                State = BlockState.Done;
                return(EvaluateResult.None());
            }

            return(result);
        }
Exemplo n.º 2
0
        public async Task <EvaluateResult> EvaluateAsync()
        {
            if (State == BlockState.Done)
            {
                return(EvaluateResult.None());
            }

            State = BlockState.Done;

            return(await _evaluator.EvaluateConditionAsync(_breakType.Condition, _ctx.Variable,
                                                           _ctx.NatvisScope)
                       ? EvaluateResult.Break()
                       : EvaluateResult.None());
        }
Exemplo n.º 3
0
        public async Task <EvaluateResult> EvaluateAsync()
        {
            if (State == BlockState.Done)
            {
                return(EvaluateResult.None());
            }

            State = BlockState.Done;

            if (await _evaluator.EvaluateConditionAsync(_exec.Condition, _ctx.Variable,
                                                        _ctx.NatvisScope))
            {
                await _evaluator.EvaluateExpressionAsync(_exec.Value, _ctx.Variable,
                                                         _ctx.NatvisScope, null);
            }

            return(EvaluateResult.None());
        }
Exemplo n.º 4
0
        public async Task <EvaluateResult> EvaluateAsync()
        {
            if (State == BlockState.Done)
            {
                return(EvaluateResult.None());
            }

            State = BlockState.Done;

            if (!await _evaluator.EvaluateConditionAsync(_customListItem.Condition, _ctx.Variable,
                                                         _ctx.NatvisScope))
            {
                return(EvaluateResult.None());
            }

            string name = await EvaluateItemNameAsync(_customListItem.Name, _ctx);

            IVariableInformation result = await _evaluator.EvaluateExpressionAsync(
                _customListItem.Value, _ctx.Variable, _ctx.NatvisScope, name);

            return(EvaluateResult.Some(result));
        }
        protected async Task EvaluateUpToAsync(int to)
        {
            if (_store.ValidationError != null || _hasEvaluationError)
            {
                return;
            }

            try
            {
                await InitContextAsync();

                while (_lastIndex < to && _blocks.State != BlockState.Done)
                {
                    EvaluateResult result = await _blocks.EvaluateAsync();

                    if (result.Type == ResultType.Var)
                    {
                        _store.SaveVariable(_lastIndex, result.Data);
                        _lastIndex++;
                    }
                }
            }
            catch (ExpressionEvaluationFailed ex)
            {
                ErrorVariableInformation error =
                    NatvisErrorUtils.LogAndGetExpandChildrenValidationError(
                        Optional ? NatvisLoggingLevel.WARNING : NatvisLoggingLevel.ERROR, _logger,
                        VisualizerName, _variable?.TypeName, ex.Message);

                _hasEvaluationError = true;

                if (_lastIndex != 0 || !Optional)
                {
                    _store.SaveVariable(_lastIndex, error);
                    _lastIndex++;
                }
            }
        }
Exemplo n.º 6
0
        public async Task <EvaluateResult> EvaluateAsync()
        {
            if (State == BlockState.Done)
            {
                return(EvaluateResult.None());
            }

            State = BlockState.InProgress;

            if (_trueBlock == null)
            {
                for (int i = 0; i < _conditionGroup.ConditionalCode.Count; i++)
                {
                    ConditionalCodeBlock branch = _conditionGroup.ConditionalCode[i];
                    if (await _evaluator.EvaluateConditionAsync(branch.Condition, _ctx.Variable,
                                                                _ctx.NatvisScope))
                    {
                        _trueBlock = _innerBlocks[i];
                        break;
                    }
                }

                if (_trueBlock == null)
                {
                    State = BlockState.Done;
                    return(EvaluateResult.None());
                }
            }

            EvaluateResult result = await _trueBlock.EvaluateAsync();

            if (_trueBlock.State == BlockState.Done)
            {
                State = BlockState.Done;
            }

            return(result);
        }
Exemplo n.º 7
0
        public async Task <EvaluateResult> EvaluateAsync()
        {
            if (_position >= _blocks.Count)
            {
                State = BlockState.Done;
                return(EvaluateResult.None());
            }

            State = BlockState.InProgress;

            ICodeBlock     currentBlock = _blocks[_position];
            EvaluateResult result       = await currentBlock.EvaluateAsync();

            if (result.Type == ResultType.Break)
            {
                State = BlockState.Done;
            }
            else if (currentBlock.State == BlockState.Done)
            {
                _position++;
            }

            return(result);
        }