summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2020-07-17 10:42:29 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2020-07-17 10:42:29 (GMT)
commit9598926f42bd5ffbd6c7e9b7022f39382e8d29b8 (patch)
tree135a349c7149231cac59d6f74253bed7f75e7361
parent3cb9dde39efd7d4045d85e21a69a57aa146c4ab5 (diff)
downloadtcl-9598926f42bd5ffbd6c7e9b7022f39382e8d29b8.zip
tcl-9598926f42bd5ffbd6c7e9b7022f39382e8d29b8.tar.gz
tcl-9598926f42bd5ffbd6c7e9b7022f39382e8d29b8.tar.bz2
New TIP #581 implementation
-rw-r--r--doc/CrtAlias.329
-rw-r--r--doc/interp.n6
-rw-r--r--generic/tclDecls.h3
-rw-r--r--generic/tclIntDecls.h2
-rw-r--r--generic/tclInterp.c5
-rw-r--r--tests/interp.test8
6 files changed, 46 insertions, 7 deletions
diff --git a/doc/CrtAlias.3 b/doc/CrtAlias.3
index 72912bc..f9c912d 100644
--- a/doc/CrtAlias.3
+++ b/doc/CrtAlias.3
@@ -8,7 +8,7 @@
.so man.macros
.BS
.SH NAME
-Tcl_IsSafe, Tcl_MakeSafe, Tcl_CreateSlave, Tcl_GetSlave, Tcl_GetMaster, Tcl_GetInterpPath, Tcl_CreateAlias, Tcl_CreateAliasObj, Tcl_GetAlias, Tcl_GetAliasObj, Tcl_ExposeCommand, Tcl_HideCommand \- manage multiple Tcl interpreters, aliases and hidden commands
+Tcl_IsSafe, Tcl_MakeSafe, Tcl_CreateChild, Tcl_CreateSlave, Tcl_GetChild, Tcl_GetSlave, Tcl_GetParent, Tcl_GetMaster, Tcl_GetInterpPath, Tcl_CreateAlias, Tcl_CreateAliasObj, Tcl_GetAlias, Tcl_GetAliasObj, Tcl_ExposeCommand, Tcl_HideCommand \- manage multiple Tcl interpreters, aliases and hidden commands
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
@@ -19,12 +19,27 @@ int
int
\fBTcl_MakeSafe\fR(\fIinterp\fR)
.sp
+.VS "TIP 581"
+Tcl_Interp *
+\fBTcl_CreateChild\fR(\fIinterp, name, isSafe\fR)
+.VE "TIP 581"
+.sp
Tcl_Interp *
\fBTcl_CreateSlave\fR(\fIinterp, name, isSafe\fR)
.sp
+.VS "TIP 581"
+Tcl_Interp *
+\fBTcl_GetChild\fR(\fIinterp, name\fR)
+.VE "TIP 581"
+.sp
Tcl_Interp *
\fBTcl_GetSlave\fR(\fIinterp, name\fR)
.sp
+.VS "TIP 581"
+Tcl_Interp *
+\fBTcl_GetParent\fR(\fIinterp\fR)
+.VE "TIP 581"
+.sp
Tcl_Interp *
\fBTcl_GetMaster\fR(\fIinterp\fR)
.sp
@@ -133,6 +148,10 @@ slave in which Tcl code has access only to set of Tcl commands defined as
see the manual entry for the Tcl \fBinterp\fR command for details.
If the creation of the new slave interpreter failed, \fBNULL\fR is returned.
.PP
+.VS "TIP 581"
+\fBTcl_CreateChild\fR is a synonym for \fBTcl_CreateSlave\fR.
+.VE "TIP 581"
+.PP
\fBTcl_IsSafe\fR returns \fB1\fR if \fIinterp\fR is
.QW safe
(was created with the \fBTCL_SAFE_INTERPRETER\fR flag specified),
@@ -154,10 +173,18 @@ may be a better choice, since it creates interpreters in a known-safe state.
\fIinterp\fR. The slave interpreter is identified by \fIslaveName\fR.
If no such slave interpreter exists, \fBNULL\fR is returned.
.PP
+.VS "TIP 581"
+\fBTcl_GetChild\fR is a synonym for \fBTcl_GetSlave\fR.
+.VE "TIP 581"
+.PP
\fBTcl_GetMaster\fR returns a pointer to the master interpreter of
\fIinterp\fR. If \fIinterp\fR has no master (it is a
top-level interpreter) then \fBNULL\fR is returned.
.PP
+.VS "TIP 581"
+\fBTcl_GetParent\fR is a synonym for \fBTcl_GetMaster\fR.
+.VE "TIP 581"
+.PP
\fBTcl_GetInterpPath\fR stores in the result of \fIaskingInterp\fR
the relative path between \fIaskingInterp\fR and \fIslaveInterp\fR;
\fIslaveInterp\fR must be a slave of \fIaskingInterp\fR. If the computation
diff --git a/doc/interp.n b/doc/interp.n
index 9fcd055..9f975d0 100644
--- a/doc/interp.n
+++ b/doc/interp.n
@@ -377,6 +377,12 @@ Returns a Tcl list of the names of all the slave interpreters associated
with the interpreter identified by \fIpath\fR. If \fIpath\fR is omitted,
the invoking interpreter is used.
.TP
+.VS "TIP 581"
+\fBinterp\fR \fBchildren\fR ?\fIpath\fR?
+.
+Synonym for . \fBinterp\fR \fBslaves\fR ?\fIpath\fR?
+.VE "TIP 581"
+.TP
\fBinterp\fR \fBtarget\fR \fIpath alias\fR
.
Returns a Tcl list describing the target interpreter for an alias. The
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index e341731..e0854d6 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -3974,5 +3974,8 @@ extern const TclStubs *tclStubsPtr;
#undef Tcl_GlobalEvalObj
#define Tcl_GlobalEvalObj(interp,objPtr) \
Tcl_EvalObjEx((interp),(objPtr),TCL_EVAL_GLOBAL)
+#define Tcl_CreateChild Tcl_CreateSlave
+#define Tcl_GetChild Tcl_GetSlave
+#define Tcl_GetParent Tcl_GetMaster
#endif /* _TCLDECLS */
diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h
index 7560d11..ffe0e17 100644
--- a/generic/tclIntDecls.h
+++ b/generic/tclIntDecls.h
@@ -1422,4 +1422,6 @@ extern const TclIntStubs *tclIntStubsPtr;
#undef TclCopyChannelOld
#undef TclSockMinimumBuffersOld
+#define TclSetChildCancelFlags TclSetSlaveCancelFlags
+
#endif /* _TCLINTDECLS */
diff --git a/generic/tclInterp.c b/generic/tclInterp.c
index ac66324..6e99913 100644
--- a/generic/tclInterp.c
+++ b/generic/tclInterp.c
@@ -611,7 +611,7 @@ NRInterpCmd(
int index;
static const char *const options[] = {
"alias", "aliases", "bgerror", "cancel",
- "create", "debug", "delete",
+ "children", "create", "debug", "delete",
"eval", "exists", "expose",
"hide", "hidden", "issafe",
"invokehidden", "limit", "marktrusted", "recursionlimit",
@@ -620,7 +620,7 @@ NRInterpCmd(
};
enum option {
OPT_ALIAS, OPT_ALIASES, OPT_BGERROR, OPT_CANCEL,
- OPT_CREATE, OPT_DEBUG, OPT_DELETE,
+ OPT_CHILDREN, OPT_CREATE, OPT_DEBUG, OPT_DELETE,
OPT_EVAL, OPT_EXISTS, OPT_EXPOSE,
OPT_HIDE, OPT_HIDDEN, OPT_ISSAFE,
OPT_INVOKEHID, OPT_LIMIT, OPT_MARKTRUSTED,OPT_RECLIMIT,
@@ -1008,6 +1008,7 @@ NRInterpCmd(
return TCL_ERROR;
}
return SlaveRecursionLimit(interp, slaveInterp, objc - 3, objv + 3);
+ case OPT_CHILDREN:
case OPT_SLAVES: {
InterpInfo *iiPtr;
Tcl_Obj *resultPtr;
diff --git a/tests/interp.test b/tests/interp.test
index 5b7b157..df94678 100644
--- a/tests/interp.test
+++ b/tests/interp.test
@@ -32,7 +32,7 @@ test interp-1.1 {options for interp command} -returnCodes error -body {
} -result {wrong # args: should be "interp cmd ?arg ...?"}
test interp-1.2 {options for interp command} -returnCodes error -body {
interp frobox
-} -result {bad option "frobox": must be alias, aliases, bgerror, cancel, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
+} -result {bad option "frobox": must be alias, aliases, bgerror, cancel, children, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
test interp-1.3 {options for interp command} {
interp delete
} ""
@@ -50,13 +50,13 @@ test interp-1.6 {options for interp command} -returnCodes error -body {
} -result {wrong # args: should be "interp slaves ?path?"}
test interp-1.7 {options for interp command} -returnCodes error -body {
interp hello
-} -result {bad option "hello": must be alias, aliases, bgerror, cancel, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
+} -result {bad option "hello": must be alias, aliases, bgerror, cancel, children, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
test interp-1.8 {options for interp command} -returnCodes error -body {
interp -froboz
-} -result {bad option "-froboz": must be alias, aliases, bgerror, cancel, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
+} -result {bad option "-froboz": must be alias, aliases, bgerror, cancel, children, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
test interp-1.9 {options for interp command} -returnCodes error -body {
interp -froboz -safe
-} -result {bad option "-froboz": must be alias, aliases, bgerror, cancel, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
+} -result {bad option "-froboz": must be alias, aliases, bgerror, cancel, children, create, debug, delete, eval, exists, expose, hide, hidden, issafe, invokehidden, limit, marktrusted, recursionlimit, slaves, share, target, or transfer}
test interp-1.10 {options for interp command} -returnCodes error -body {
interp target
} -result {wrong # args: should be "interp target path alias"}