public override void EvaluateNode(EvaluationContext context, AstMode mode) { // evaluate expression Expression.Evaluate(context, AstMode.Read); // extract last recognized pattern (it contains bound variables) var lastPattern = context.GetLastPattern(); if (lastPattern == null) { context.ThrowError("Internal error: last recognized pattern is lost"); } // with-clause if (Block != null) { Block.BlockPattern = lastPattern; Block.Evaluate(context, mode); // with-clause is always successful context.Data.Push(true); } // where-clause if (Pattern != null) { EvaluateWhereClause(lastPattern, context, mode); } }
public override void EvaluateNode(EvaluationContext context, AstMode mode) { // read variable from last recognized pattern if (mode == AstMode.Read) { if (context.GetLastPattern() == null) { context.ThrowError("No pattern recognized"); } // push variable contents onto stack var pattern = context.GetLastPattern(); context.Data.Push(pattern.GetVariable(Index)); return; } // create variable for pattern matching context.Data.Push(CreateVariable()); }