    package flare.query
    {
        /**
         * Expression operator that type checks a sub-expression.
         */
        public class IsA extends Expression
        {
            private var _type:Class;
            private var _clause:Expression;

            /** The class type to check for. */
            public function get type():Class { return _type; }

            /** The sub-expression clause to type check. */
            public function get clause():Expression { return _clause; }
            public function set clause(e:*):void {
                _clause = e==null ? null : Expression.expr(e);
            }

            /**
             * @inheritDoc
             */
            public override function get numChildren():int { return _clause ? 1 : 0; }

            /**
             * Creates a new IsA operator.
             * @param type the class type to check for
             * @param clause the sub-expression clause to type check. If null,
             *  the input object (rather than a sub-property or expression result)
             *  will be type checked.
             */
            public function IsA(type:Class, clause:*=n