I don't think this would be too hard to do. I haven't even tried compiling this yet, so this is not a patch, but just a couple of notes on how I suspect this could be implemented.
I think it would take an additional branch in the big if block in XObjectFactory.create(Object val, XPathContext xctxt) that would look something like this:
else if (val instanceof Source)
DTM dtm = mgr.getDTM((Source) val, false, null, true, true);
int dtmRoot = dtm.getDocument();
DTMAxisIterator iter = dtm.getAxisIterator(Axis.SELF);
DTMIterator iterator = new OneStepIterator(iter, Axis.SELF);
result = new XNodeSet(iterator);
throw new org.apache.xml.utils.WrappedRuntimeException(ex);
I've adapted this by cutting and pasting out of two existing classes (Transformer and XObjectfactory) so that probably won't quite work, and needs some hacking; but the basic idea is just to convert sources into node-sets pretty much the same way they're converted when initially loading a Source into Xalan; and then end up with the same thing we'd end up with if a DTM had been passed in instead of a Source.