public async Task <EvaluationResult> EvaluateExpressionAsync() { VsExpression vsExpression = await _vsExpressionCreator.CreateAsync(_text, EvaluateSizeSpecifierExpressionAsync); IDebugProperty2 result; if (vsExpression.Value.StartsWith(".")) { EvaluateCommand(vsExpression.Value, out result); return(EvaluationResult.FromResult(result)); } RemoteValue remoteValue = await CreateValueFromExpressionAsync(vsExpression.Value); if (remoteValue == null) { return(EvaluationResult.Fail()); } string displayName = vsExpression.ToString(); IVariableInformation varInfo = _varInfoBuilder.Create(remoteValue, displayName, vsExpression.FormatSpecifier); result = _createPropertyDelegate.Invoke(varInfo); return(EvaluationResult.FromResult(result)); }
/// <summary> /// Evaluates a Natvis expression in the context of a variable asynchronously. /// /// Examples: /// "myData[0] == true" /// "myData[$i]" /// "MyContainer<$T1, $T2>", /// "(char*)myData,[myLength]s" /// </summary> /// <param name="expression">The expression to evaluate. Natvis tokens are resolved prior to /// evaluation, ex. $i, $Tx. </param> /// <param name="variable"></param> /// <param name="scopedNames">The Natvis tokens to resolve in expression.</param> /// <param name="displayName">The display name given to the result. If null the underlying /// debugger's context specific name is used.</param> /// <returns>The expression result.</returns> public async Task <IVariableInformation> EvaluateExpressionAsync( string expression, IVariableInformation variable, NatvisScope natvisScope, string displayName) { var vsExpression = await _vsExpressionCreator.CreateAsync( expression, async (sizeExpression) => { IVariableInformation value = await EvaluateLldbExpressionAsync( _vsExpressionCreator.Create(sizeExpression, ""), variable, natvisScope, displayName); uint size; if (!uint.TryParse(await value.ValueAsync(), out size)) { throw new ExpressionEvaluationFailed("Expression isn't a uint"); } return(size); }); return(await EvaluateLldbExpressionAsync(vsExpression, variable, natvisScope, displayName)); }
public async Task CreateWhenExpressionIsEmptyAsync() { var expression = await _expressionCreator.CreateAsync("", _evaluateSize); Assert.That(expression.Value, Is.EqualTo("")); Assert.That(expression.FormatSpecifier.Expression, Is.EqualTo("")); Assert.That(expression.FormatSpecifier.Size, Is.Null); await _evaluateSize.DidNotReceiveWithAnyArgs().Invoke(Arg.Any <string>()); }