Esempio n. 1
0
 /// <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;
     }));
 }
Esempio n. 2
0
 /// <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;