01: package net.sf.saxon.instruct;
02:
03: import net.sf.saxon.expr.XPathContext;
04: import net.sf.saxon.trans.XPathException;
05:
06: /**
07: * Interface representing a Tail Call. This is a package of information passed back by a called
08: * instruction to its caller, representing a call (and its arguments) that needs to be made
09: * by the caller. This saves stack space by unwinding the stack before making the call.
10: */
11:
12: public interface TailCall {
13:
14: /**
15: * Process this TailCall (that is, executed the template call that is packaged in this
16: * object). This may return a further TailCall, which should also be processed: this
17: * is the mechanism by which a nested set of recursive calls is converted into an iteration.
18: * @param context The dynamic context of the transformation
19: * @return a further TailCall, if the recursion continues, or null, indicating that the
20: * recursion has terminated.
21: * @throws net.sf.saxon.trans.XPathException if any error occurs processing the tail call
22: */
23:
24: public TailCall processLeavingTail(XPathContext context)
25: throws XPathException;
26:
27: }
28:
29: //
30: // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
31: // you may not use this file except in compliance with the License. You may obtain a copy of the
32: // License at http://www.mozilla.org/MPL/
33: //
34: // Software distributed under the License is distributed on an "AS IS" basis,
35: // WITHOUT WARRANTY OF ANY KIND, either express or implied.
36: // See the License for the specific language governing rights and limitations under the License.
37: //
38: // The Original Code is: all this file.
39: //
40: // The Initial Developer of the Original Code is Michael H. Kay.
41: //
42: // Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
43: //
44: // Contributor(s): none.
45: //
|