if(shallow){
Type lub = TypeFactory.getInstance().voidType();
int nElems = subjectType.getArity();
for(int i = 0; i < nElems; i++)
lub = lub.lub(subjectType.getFieldType(i));
if(!lub.comparable(patType))
throw new UnexpectedType(patType, subjectType, ctx.getCurrentAST());
return new TupleElementIterator((ITuple)subjectValue);
}
return new DescendantReader(subjectValue, false);