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