protected override QilNode VisitTypeAssert(QilTargetType local0) {
QilNode local1 = local0[0];
QilNode local2 = local0[1];
if (this[XmlILOptimization.FoldNone]) {
if ( (object) ( (local1).XmlType ) == (object) XmlQueryTypeFactory.None ) {
if (AllowReplace(XmlILOptimization.FoldNone, local0)) {
return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(local1)));
}
}
}
if (this[XmlILOptimization.EliminateTypeAssert]) {
if (local2.NodeType == QilNodeType.LiteralType) {
XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
if ( (local1).XmlType .NeverSubtypeOf(local3) ) {
if (AllowReplace(XmlILOptimization.EliminateTypeAssert, local0)) {
return Replace(XmlILOptimization.EliminateTypeAssert, local0, VisitError(f.Error(VisitLiteralString(f.LiteralString("")))));
}
}
}
}
if (this[XmlILOptimization.EliminateTypeAssert]) {
if (local2.NodeType == QilNodeType.LiteralType) {
XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
if ( (local1).XmlType .Prime .NeverSubtypeOf( local3.Prime ) ) {
if (AllowReplace(XmlILOptimization.EliminateTypeAssert, local0)) {
return Replace(XmlILOptimization.EliminateTypeAssert, local0, VisitConditional(f.Conditional(VisitIsEmpty(f.IsEmpty(local1)), VisitSequence(f.Sequence()), VisitError(f.Error(VisitLiteralString(f.LiteralString("")))))));
}
}
}
}
if (this[XmlILOptimization.EliminateTypeAssertOptional]) {
if (local2.NodeType == QilNodeType.LiteralType) {
XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
if ( (local1).XmlType .IsSubtypeOf(local3) ) {
if (AllowReplace(XmlILOptimization.EliminateTypeAssertOptional, local0)) {
return Replace(XmlILOptimization.EliminateTypeAssertOptional, local0, local1);
}
}
}
}
return NoReplace(local0);
}