/// <inheritdoc /> public async ContextObjectPromise GetValue(ContextObject contextObject, ScopeData scopeData) { var leftValue = await LeftExpression.GetValue(contextObject, scopeData); FormatterArgumentType[] arguments; if (RightExpression != null) { arguments = new[] { new FormatterArgumentType(0, null, (await RightExpression.GetValue(contextObject, scopeData)).Value) }; } else { arguments = new FormatterArgumentType[0]; } var operatorFormatterName = "op_" + Operator.OperatorType; if (Cache == null) { Cache = leftValue.PrepareFormatterCall( leftValue.Value?.GetType() ?? typeof(object), operatorFormatterName, arguments, scopeData); } if (Cache != null /* && !Equals(Cache.Value, default(FormatterCache))*/) { return(scopeData.ParserOptions.CreateContextObject(".", await scopeData.ParserOptions.Formatters.Execute(Cache, leftValue.Value, scopeData.ParserOptions, arguments), contextObject.Parent)); } return(scopeData.ParserOptions.CreateContextObject(".", null, contextObject.Parent)); }