/// <summary> /// Compile the single item if it is possible to compile. /// It concerns those <see cref="ExpressionPart"/>s items which returns expression in <seealso cref="ExpressionPart.GetExpression(EvaluationContext, string, ref ExpressionData)"/>. /// </summary> /// <param name="context">The context of evaluation.</param> /// <param name="expressionTree">The expression tree.</param> protected virtual bool CompileSingleItem(EvaluationContext context, IList <ProcessedItem> expressionTree) { // compile single item return(ReverseLoop(expressionTree, i => { ProcessedItem item = expressionTree[i]; if (item.ItemType != null) { IExpressionPart obj = GetObject(item.ItemType); ExpressionData data = new ExpressionData(); Expression compiled = obj.GetExpression(context, item.Content, ref data); if (compiled != null) { ProcessedItem newItem = ProcessedItem.Create(compiled); expressionTree.RemoveAt(i); expressionTree.Insert(i, newItem); return true; } else if (data.TypeToCast != null) { ProcessedItem newItem = ProcessedItem.CreateCast(data.TypeToCast); expressionTree.RemoveAt(i); expressionTree.Insert(i, newItem); return true; } } return false; })); }
/// <summary> /// If it is possible to convert part into message, write the code here. /// </summary> /// <param name="context">The context of evaluation</param> /// <param name="message">The message to convert</param> /// <param name="data">Result expression data</param> /// <returns>The result expression</returns> public virtual Expression GetExpression(EvaluationContext context, string message, ref ExpressionData data) => null;