summaryrefslogtreecommitdiffstats
path: root/doc/NRE.3
diff options
context:
space:
mode:
Diffstat (limited to 'doc/NRE.3')
-rw-r--r--doc/NRE.3272
1 files changed, 0 insertions, 272 deletions
diff --git a/doc/NRE.3 b/doc/NRE.3
deleted file mode 100644
index f76938a..0000000
--- a/doc/NRE.3
+++ /dev/null
@@ -1,272 +0,0 @@
-.\"
-.\" Copyright (c) 2008 Kevin B. Kenny.
-.\" Copyright (c) 2018 Nathan Coulter.
-.\"
-'\" See the file "license.terms" for information on usage and redistribution
-'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-'\"
-.TH NRE 3 8.6 Tcl "Tcl Library Procedures"
-.so man.macros
-.BS
-.SH NAME
-Tcl_NRCreateCommand, Tcl_NRCreateCommand2, Tcl_NRCallObjProc, Tcl_NRCallObjProc2, Tcl_NREvalObj, Tcl_NREvalObjv, Tcl_NRCmdSwap, Tcl_NRExprObj, Tcl_NRAddCallback \- Non-Recursive (stackless) evaluation of Tcl scripts.
-.SH SYNOPSIS
-.nf
-\fB#include <tcl.h>\fR
-.sp
-Tcl_Command
-\fBTcl_NRCreateCommand\fR(\fIinterp, cmdName, proc, nreProc, clientData,
- deleteProc\fR)
-.sp
-Tcl_Command
-\fBTcl_NRCreateCommand2\fR(\fIinterp, cmdName, proc2, nreProc2, clientData,
- deleteProc\fR)
-.sp
-int
-\fBTcl_NRCallObjProc\fR(\fIinterp, nreProc, clientData, objc, objv\fR)
-.sp
-int
-\fBTcl_NRCallObjProc2\fR(\fIinterp, nreProc2, clientData, objc, objv\fR)
-.sp
-int
-\fBTcl_NREvalObj\fR(\fIinterp, objPtr, flags\fR)
-.sp
-int
-\fBTcl_NREvalObjv\fR(\fIinterp, objc, objv, flags\fR)
-.sp
-int
-\fBTcl_NRCmdSwap\fR(\fIinterp, cmd, objc, objv, flags\fR)
-.sp
-int
-\fBTcl_NRExprObj\fR(\fIinterp, objPtr, resultPtr\fR)
-.sp
-void
-\fBTcl_NRAddCallback\fR(\fIinterp, postProcPtr, data0, data1, data2, data3\fR)
-.fi
-.SH ARGUMENTS
-.AS Tcl_CmdDeleteProc *interp in
-.AP Tcl_Interp *interp in
-The relevant Interpreter.
-.AP "const char" *cmdName in
-Name of the command to create.
-.AP Tcl_ObjCmdProc *proc in
-Called in order to evaluate a command. Is often just a small wrapper that uses
-\fBTcl_NRCallObjProc\fR to call \fInreProc\fR using a new trampoline. Behaves
-in the same way as the \fIproc\fR argument to \fBTcl_CreateObjCommand\fR(3)
-(\fIq.v.\fR).
-.AP Tcl_ObjCmdProc2 *proc2 in
-Called in order to evaluate a command. Is often just a small wrapper that uses
-\fBTcl_NRCallObjProc2\fR to call \fInreProc2\fR using a new trampoline. Behaves
-in the same way as the \fIproc2\fR argument to \fBTcl_CreateObjCommand2\fR(3)
-(\fIq.v.\fR).
-.AP Tcl_ObjCmdProc *nreProc in
-Called instead of \fIproc\fR when a trampoline is already in use.
-.AP Tcl_ObjCmdProc2 *nreProc2 in
-Called instead of \fIproc2\fR when a trampoline is already in use.
-.AP ClientData clientData in
-Arbitrary one-word value passed to \fIproc\fR, \fInreProc\fR, \fIdeleteProc\fR
-and \fIobjProc\fR.
-.AP Tcl_CmdDeleteProc *deleteProc in/out
-Called before \fIcmdName\fR is deleted from the interpreter, allowing for
-command-specific cleanup. May be NULL.
-.AP int objc in
-Number of items in \fIobjv\fR.
-.AP Tcl_Obj **objv in
-Words in the command.
-.AP Tcl_Obj *objPtr in
-A script or expression to evaluate.
-.AP int flags in
-As described for \fITcl_EvalObjv\fR.
-.PP
-.AP Tcl_Command cmd in
-Token to use instead of one derived from the first word of \fIobjv\fR in order
-to evaluate a command.
-.AP Tcl_Obj *resultPtr out
-Pointer to an unshared Tcl_Obj where the result of the evaluation is stored if
-the return code is TCL_OK.
-.AP Tcl_NRPostProc *postProcPtr in
-A function to push.
-.AP ClientData data0 in
-.AP ClientData data1 in
-.AP ClientData data2 in
-.AP ClientData data3 in
-\fIdata0\fR through \fIdata3\fR are four one-word values that will be passed
-to the function designated by \fIpostProcPtr\fR when it is invoked.
-.BE
-.SH DESCRIPTION
-.PP
-These functions provide an interface to the function stack that an interpreter
-iterates through to evaluate commands. The routine behind a command is
-implemented by an initial function and any additional functions that the
-routine pushes onto the stack as it progresses. The interpreter itself pushes
-functions onto the stack to react to the end of a routine and to exercise other
-forms of control such as switching between in-progress stacks and the
-evaluation of other scripts at additional levels without adding frames to the C
-stack. To execute a routine, the initial function for the routine is called
-and then a small bit of code called a \fItrampoline\fR iteratively takes
-functions off the stack and calls them, using the value of the last call as the
-value of the routine.
-.PP
-\fBTcl_NRCallObjProc\fR calls \fInreProc\fR using a new trampoline.
-.PP
-\fBTcl_NRCreateCommand\fR, an alternative to \fBTcl_CreateObjCommand\fR,
-resolves \fIcmdName\fR, which may contain namespace qualifiers, relative to the
-current namespace, creates a command by that name, and returns a token for the
-command which may be used in subsequent calls to \fBTcl_GetCommandName\fR.
-Except for a few cases noted below any existing command by the same name is
-first deleted. If \fIinterp\fR is in the process of being deleted
-\fBTcl_NRCreateCommand\fR does not create any command, does not delete any
-command, and returns NULL.
-.PP
-\fBTcl_NRCreateCommand2\fR, is an alternative to \fBTcl_NRCreateCommand\fR
-in the same way as \fBTcl_CreateObjCommand2\fR.
-.PP
-\fBTcl_NREvalObj\fR pushes a function that is like \fBTcl_EvalObjEx\fR but
-consumes no space on the C stack.
-.PP
-\fBTcl_NREvalObjv\fR pushes a function that is like \fBTcl_EvalObjv\fR but
-consumes no space on the C stack.
-.PP
-\fBTcl_NRCmdSwap\fR is like \fBTcl_NREvalObjv\fR, but uses \fIcmd\fR, a token
-previously returned by \fBTcl_CreateObjCommand\fR or
-\fBTcl_GetCommandFromObj\fR, instead of resolving the first word of \fIobjv\fR.
-. The name of this command must be the same as \fIobjv[0]\fR.
-.PP
-\fBTcl_NRExprObj\fR pushes a function that evaluates \fIobjPtr\fR as an
-expression in the same manner as \fBTcl_ExprObj\fR but without consuming space
-on the C stack.
-.PP
-All of the functions return \fBTCL_OK\fR if the evaluation of the script,
-command, or expression has been scheduled successfully. Otherwise (for example
-if the command name cannot be resolved), they return \fBTCL_ERROR\fR and store
-a message as the interpreter's result.
-.PP
-\fBTcl_NRAddCallback\fR pushes \fIpostProcPtr\fR. The signature for
-\fBTcl_NRPostProc\fR is:
-.PP
-.CS
-typedef int
-\fBTcl_NRPostProc\fR(
- \fBClientData\fR \fIdata\fR[],
- \fBTcl_Interp\fR *\fIinterp\fR,
- int \fIresult\fR);
-.CE
-.PP
-\fIdata\fR is a pointer to an array containing \fIdata0\fR through \fIdata3\fR.
-\fIresult\fR is the value returned by the previous function implementing part
-the routine.
-.SH EXAMPLE
-.PP
-The following command uses \fBTcl_EvalObjEx\fR, which consumes space on the C
-stack, to evalute a script:
-.PP
-.CS
-int
-\fITheCmdOldObjProc\fR(
- ClientData clientData,
- Tcl_Interp *interp,
- int objc,
- Tcl_Obj *const objv[])
-{
- int result;
- Tcl_Obj *objPtr;
-
- \fI... preparation ...\fR
-
- result = \fBTcl_EvalObjEx\fR(interp, objPtr, 0);
-
- \fI... postprocessing ...\fR
-
- return result;
-}
-\fBTcl_CreateObjCommand\fR(interp, "theCommand",
- \fITheCmdOldObjProc\fR, clientData, TheCmdDeleteProc);
-.CE
-.PP
-To avoid consuming space on the C stack, \fITheCmdOldObjProc\fR is renamed to
-\fITheCmdNRObjProc\fR and the postprocessing step is split into a separate
-function, \fITheCmdPostProc\fR, which is pushed onto the function stack.
-\fITcl_EvalObjEx\fR is replaced with \fITcl_NREvalObj\fR, which uses a
-trampoline instead of consuming space on the C stack. A new version of
-\fITheCmdOldObjProc\fR is just a a wrapper that uses \fBTcl_NRCallObjProc\fR to
-call \fITheCmdNRObjProc\fR:
-.PP
-.CS
-int
-\fITheCmdOldObjProc\fR(
- ClientData clientData,
- Tcl_Interp *interp,
- int objc,
- Tcl_Obj *const objv[])
-{
- return \fBTcl_NRCallObjProc\fR(interp, \fITheCmdNRObjProc\fR,
- clientData, objc, objv);
-}
-.CE
-.PP
-.CS
-int
-\fITheCmdNRObjProc\fR
- ClientData clientData,
- Tcl_Interp *interp,
- int objc,
- Tcl_Obj *const objv[])
-{
- Tcl_Obj *objPtr;
-
- \fI... preparation ...\fR
-
- \fBTcl_NRAddCallback\fR(interp, \fITheCmdPostProc\fR,
- data0, data1, data2, data3);
- /* \fIdata0 .. data3\fR are up to four one-word items to
- * pass to the postprocessing procedure */
-
- return \fBTcl_NREvalObj\fR(interp, objPtr, 0);
-}
-.CE
-.PP
-.CS
-int
-\fITheCmdNRPostProc\fR(
- ClientData data[],
- Tcl_Interp *interp,
- int result)
-{
- /* \fIdata[0] .. data[3]\fR are the four words of data
- * passed to \fBTcl_NRAddCallback\fR */
-
- \fI... postprocessing ...\fR
-
- return result;
-}
-.CE
-.PP
-Any function comprising a routine can push other functions, making it possible
-implement looping and sequencing constructs using the function stack.
-.PP
-.SH "REFERENCE COUNT MANAGEMENT"
-.PP
-The first \fIobjc\fR values in the \fIobjv\fR array passed to the functions
-\fBTcl_NRCallObjProc\fR, \fBTcl_NREvalObjv\fR, and \fBTcl_NRCmdSwap\fR should
-have a reference count of at least 1; they may have additional references
-taken during the execution.
-.PP
-The \fIobjPtr\fR argument to \fBTcl_NREvalObj\fR and \fBTcl_NRExprObj\fR
-should have a reference count of at least 1, and may have additional
-references taken to it during execution.
-.PP
-The \fIresultObj\fR argument to \fBTcl_NRExprObj\fR should be an unshared
-object.
-.PP
-Use \fBTcl_NRAddCallback\fR to schedule any required final decrementing of the
-reference counts of arguments to any of the other functions on this page, as
-with any other post-processing step in the non-recursive execution engine.
-.PP
-The
-.SH "SEE ALSO"
-Tcl_CreateCommand(3), Tcl_CreateObjCommand(3), Tcl_EvalObjEx(3), Tcl_GetCommandFromObj(3), Tcl_ExprObj(3)
-.SH KEYWORDS
-stackless, nonrecursive, execute, command, global, value, result, script
-.SH COPYRIGHT
-Copyright \(co 2008 Kevin B. Kenny.
-Copyright \(co 2018 Nathan Coulter.