Patch #1419
closedadd user:closure, other special extension functions
0%
Description
SourceForge user: gschadow
This patch adds special extension function capabilities to
saxon7.8 and the ability to return a closure from such
extension function and truly delay the evaluation of
anything in that closure sequence (even the first item)
up until it is really needed.
This is against saxon7.8 sources and supercedes my
earlier patch to add a saxon:closure function.
- FunctionProxy now handles "special forms" i.e. where
argument is an Expression in which case the argument is
not evaluated. This is an improvement independent from
the closure that I want.
- Closure now delays evaluation of even the first item
in the sequence. This is done by leaving inputIterator
uninitialized until the first time
ProgressiveIterator.hasNext() or .next() is called. This is
important for me to use closures of singleton expressions.
- ExpressionTool.eagerEvaluate now returns the Closure
if the exp.iterate() has returned a ProgressiveIterator.
This may be somewhat of a cludge because it seems like
this produces one ProgressiveIterator for the garbage.
But it seems to work. Ideally a Closure would itself be a
SequenceIterator then it could be returned from
FunctionProxy.iterate and from
ExpressionTool.eagerEvaluate.
Attached zip file has patches and an example closure
extension function plus a test case consisting of
closure.xsl and another extension function. Run test
case as:
saxon closure.xsl closure.xsl
or to test the effect of not using a closure:
saxon closure.xsl closure.xsl noclosure=bla
regards,
-Gunther
Files
Updated by Anonymous almost 21 years ago
SourceForge user: gschadow
Logged In: YES
user_id=575520
oops, squished a bug in the argument list adjustment, zip file
is updated.
Updated by Anonymous almost 21 years ago
SourceForge user: gschadow
Logged In: YES
user_id=575520
squished another bug. The hack in eagerEvaluate needs to
check if the expr is a closure and if so not to return the
closure again. What I learned is that there is a way for saxon
to create a Closure expression for what used to be the
ToplevelExpression. It probably only does that if the static
analysis shows that the expression is a sequence. I think it
should just always do the closure for toplevel expressions ...
but that's just me.
Updated by Anonymous about 20 years ago
SourceForge user: gschadow
Logged In: YES
user_id=575520
I closed this because of the re-submission of this and better
functionality for 8.1.1
Please register to edit this issue