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