Bug #5766
closedxsl:evaluate, duplicated params in @with-params and child::xsl:with-param - test case evaluate-018d
100%
Description
This test is passing on SaxonJ 12 and failing on SaxonCS 12.
The test expects a type error, which is not being reported in SaxonCS.
I think the test is questionable. It supplies parameters to xsl:evaluate both using the @with-params attribute (dynamic parameters) and using a child xsl:with-param instruction. The spec says that the former take precedence. The type error comes from the xsl:with-param instruction. I think in this situation both reporting the type error and not reporting it are legitimate; but there's a question as to why SaxonJ and SaxonCS are behaving differently.
Updated by Michael Kay almost 2 years ago
On both platforms we are evaluating the xsl:with-param (unnecessarily). But for some reason on SaxonJ the select expression has been promoted to a global variable, which is evaluated eagerly, triggering the type error; but on SaxonCS this promotion has not taken place, so the value is evaluated lazily, and since it is never used, the type error is not triggered.
So the question becomes: why is the promotion to global happening in SaxonJ but not in SaxonCS?
Updated by Michael Kay almost 2 years ago
It seems the SaxonCS test driver is running with JIT compilation of template rules enabled, while the SaxonJ test driver is running with this option disabled. When JIT compilation is enabled, we don't attempt to extract global variables from templates (because we don't want to create new global variables dynamically). Both paths are legitimate, and it does no harm that we're exercising different options...
The real issue is, we shouldn't be evaluating xsl:with-param
instructions that aren't needed because they are overridden by dynamic params.
Which in turn means that the test case shouldn't be expecting the type error to be reported.
Updated by Michael Kay almost 2 years ago
I've now
(a) updated the code (12.x branch) so it doesn't evaluate the xsl:with-param if there's a dynamic parameter with the same name
(b) modified the test so it forces the xsl:with-param to be evaluated
Updated by Michael Kay almost 2 years ago
- Project changed from 20 to Saxon
- Subject changed from XSLT3 test case evaluate-018d to xsl:evaluate, duplicated params in @with-params and child::xsl:with-param - test case evaluate-018d
- Category set to XSLT conformance
- Status changed from New to Resolved
- Applies to branch 11, trunk added
- Fix Committed on Branch 11, trunk added
- Platforms .NET, Java added
Updated by Community Admin almost 2 years ago
- % Done changed from 0 to 100
- Fixed in Maintenance Release 12.0 added
Bug issue fix applied in the Saxon 12.0 Major Release. Leaving this bug marked as Resolved until fix applied
Updated by O'Neil Delpratt almost 2 years ago
- Fixed in Maintenance Release 11.5 added
Bug applied in the Saxon 11.5 Maintenance release.
Updated by O'Neil Delpratt almost 2 years ago
- Status changed from Resolved to Closed
Please register to edit this issue