public IObservable <IParseResult <TResult> > Parse(IObservableCursor <TSource> source)
        {
#if !SILVERLIGHT && !PORT_45 && !PORT_40
            using (ParserTraceSources.TraceQueryCompilation(name))
#endif
            {
                IObservable <IParseResult <TResult> > results;

                if (parserFactory == null)
                {
                    results = parse(source);

                    Contract.Assume(results != null);
                }
                else
                {
                    var parser = parserFactory.Value;

                    Contract.Assume(parser != null);

                    results = parser.Parse(source);
                }

                return(results);
            }
        }