Пример #1
0
        public WRC WalkExpr(Expr expr)
        {
            if (expr == null)
            {
                return(WRC.Continue);
            }
            C.ASSERTCOVERAGE(E.ExprHasProperty(expr, EP.TokenOnly));
            C.ASSERTCOVERAGE(E.ExprHasProperty(expr, EP.Reduced));
            WRC rc = ExprCallback(this, expr);

            if (rc == WRC.Continue && !E.ExprHasAnyProperty(expr, EP.TokenOnly))
            {
                if (WalkExpr(expr.Left) != 0)
                {
                    return(WRC.Abort);
                }
                if (WalkExpr(expr.Right) != 0)
                {
                    return(WRC.Abort);
                }
                if (E.ExprHasProperty(expr, EP.xIsSelect))
                {
                    if (WalkSelect(expr.x.Select) != 0)
                    {
                        return(WRC.Abort);
                    }
                }
                else
                {
                    if (WalkExprList(expr.x.List) != 0)
                    {
                        return(WRC.Abort);
                    }
                }
            }
            return(rc & WRC.Abort);
        }
Пример #2
0
        public WRC WalkSelect(Select p)
        {
            if (p == null || SelectCallback == null)
            {
                return(WRC.Continue);
            }
            WRC rc = WRC.Continue;

            while (p != null)
            {
                rc = SelectCallback(this, p);
                if (rc != 0)
                {
                    break;
                }
                if (WalkSelectExpr(p) != 0 || WalkSelectFrom(p) != 0)
                {
                    WalkerDepth--;
                    return(WRC.Abort);
                }
                p = p.Prior;
            }
            return(rc & WRC.Abort);
        }