diff options
author | dgp <dgp@users.sourceforge.net> | 2006-02-01 18:27:42 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2006-02-01 18:27:42 (GMT) |
commit | bf2e20ec8703a3c6e725e464bb4e7fca8af0834c (patch) | |
tree | c00a6c3b557759767b41407974391d1117ad0c25 /doc | |
parent | 2e9bf45bc4d2510a07a538c48f8103957ede3aaf (diff) | |
download | tcl-bf2e20ec8703a3c6e725e464bb4e7fca8af0834c.zip tcl-bf2e20ec8703a3c6e725e464bb4e7fca8af0834c.tar.gz tcl-bf2e20ec8703a3c6e725e464bb4e7fca8af0834c.tar.bz2 |
TIP#181 IMPLEMENTATION
* doc/Namespace.3: New command [namespace unknown]. New public
* doc/namespace.n: C routines Tcl_(Get|Set)NamespaceUnknownHandler. * doc/unknown.n: [Patch 958222].
* generic/tcl.decls:
* generic/tclBasic.c:
* generic/tclInt.h:
* generic/tclNamesp.c:
* tests/namespace.test:
* generic/tclDecls.h: make genstubs
* generic/tclStubInit.c:
Diffstat (limited to 'doc')
-rw-r--r-- | doc/Namespace.3 | 20 | ||||
-rw-r--r-- | doc/namespace.n | 13 | ||||
-rw-r--r-- | doc/unknown.n | 21 |
3 files changed, 42 insertions, 12 deletions
diff --git a/doc/Namespace.3 b/doc/Namespace.3 index 5f61f2b..7bc77f4 100644 --- a/doc/Namespace.3 +++ b/doc/Namespace.3 @@ -4,7 +4,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: Namespace.3,v 1.7 2004/10/07 15:15:38 dkf Exp $ +'\" RCS: @(#) $Id: Namespace.3,v 1.8 2006/02/01 18:27:43 dgp Exp $ '\" '\" Note that some of these functions do not seem to belong, but they '\" were all introduced with the same TIP (#139) @@ -13,7 +13,7 @@ .TH Tcl_Namespace 3 8.5 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_AppendExportList, Tcl_CreateNamespace, Tcl_DeleteNamespace, Tcl_Export, Tcl_FindCommand, Tcl_FindNamespace, Tcl_ForgetImport, Tcl_GetCurrentNamespace, Tcl_GetGloblaNamespace, Tcl_Import \- manipulate namespaces +Tcl_AppendExportList, Tcl_CreateNamespace, Tcl_DeleteNamespace, Tcl_Export, Tcl_FindCommand, Tcl_FindNamespace, Tcl_ForgetImport, Tcl_GetCurrentNamespace, Tcl_GetGloblaNamespace, Tcl_GetNamespaceUnknownHandler, Tcl_Import, Tcl_SetNamespaceUnknownHandler \- manipulate namespaces .SH SYNOPSIS .nf \fB#include <tcl.h>\fR @@ -46,6 +46,12 @@ Tcl_Namespace * .sp Tcl_Command \fBTcl_FindCommand\fR(\fIinterp, name, contextNsPtr, flags\fR) +.sp +Tcl_Obj * +\fBTcl_GetNamespaceUnknownHandler(\fIinterp, nsPtr\fR) +.sp +int +\fBTcl_SetNamespaceUnknownHandler(\fIinterp, nsPtr, handlerPtr\fR) .SH ARGUMENTS .AS Tcl_NamespaceDeleteProc allowOverwrite in/out .AP Tcl_Interp *interp in/out @@ -87,6 +93,9 @@ global namespace), \fBTCL_NAMESPACE_ONLY\fR (just for \fBTcl_FindCommand\fR; indicates that the search is always to be conducted relative to the context namespace), and \fBTCL_LEAVE_ERR_MSG\fR (indicates that an error message should be left in the interpreter if the search fails.) +.AP Tcl_Obj *handlerPtr in +A script fragment to be installed as the unknown command handler for the +namespace, or NULL to reset the handler to its default. .BE .SH DESCRIPTION @@ -143,6 +152,13 @@ namespace cannot be found, NULL is returned. \fBTcl_FindCommand\fR searches for a command named \fIname\fR within the context of the namespace \fIcontextNsPtr\fR. If the command cannot be found, NULL is returned. +.PP +\fBTcl_GetNamespaceUnknownHandler\fR returns the unknown command handler +for the namespace, or NULL if none is set. +.PP +\fBTcl_SetNamespaceUnknownHandler\fR sets the unknown command handler for +the namespace. If \fIhandlerPtr\fR is NULL, then the handler is reset to +its default. .SH "SEE ALSO" Tcl_CreateCommand, Tcl_ListObjAppendElements, Tcl_SetVar diff --git a/doc/namespace.n b/doc/namespace.n index f2327a4..150e7ee 100644 --- a/doc/namespace.n +++ b/doc/namespace.n @@ -7,7 +7,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: namespace.n,v 1.19 2006/02/01 17:48:10 dgp Exp $ +'\" RCS: @(#) $Id: namespace.n,v 1.20 2006/02/01 18:27:43 dgp Exp $ '\" .so man.macros .TH namespace n 8.5 Tcl "Tcl Built-In Commands" @@ -256,6 +256,17 @@ procedure to refer to variables in \fInamespace\fR. The command \fBupvar 0 $ns::a b\fR. \fBnamespace upvar\fR returns an empty string. .TP +\fBnamespace unknown\fR ?\fIscript\fR? +Sets or returns the unknown command handler for the current namespace. +The handler is invoked when a command called from within the namespace +cannot be found (in either the current namespace or the global namespace). +The \fIscript\fR argument, if given, should be a well +formed list representing a command name and optional arguments. When +the handler is invoked, the full invocation line will be appended to the +script and the result evaluated in the context of the namespace. The +default handler for all namespaces is \fB::unknown\fR. If no argument +is given, it returns the handler for the current namespace. +.TP \fBnamespace which\fR ?\-\fBcommand\fR? ?\-\fBvariable\fR? \fIname\fR Looks up \fIname\fR as either a command or variable and returns its fully-qualified name. diff --git a/doc/unknown.n b/doc/unknown.n index 95bb066..6ece5f3 100644 --- a/doc/unknown.n +++ b/doc/unknown.n @@ -5,7 +5,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: unknown.n,v 1.5 2004/05/30 14:13:52 dkf Exp $ +'\" RCS: @(#) $Id: unknown.n,v 1.6 2006/02/01 18:27:43 dgp Exp $ '\" .so man.macros .TH unknown n "" Tcl "Tcl Built-In Commands" @@ -23,15 +23,18 @@ This command is invoked by the Tcl interpreter whenever a script tries to invoke a command that doesn't exist. The default implementation of \fBunknown\fR is a library procedure defined when Tcl initializes an interpreter. You can override the default \fBunknown\fR to change its -functionality. Note that there is no default implementation of -\fBunknown\fR in a safe interpreter. +functionality, or you can register a new handler for individual namespaces +using the \fBnamespace unknown\fR command. Note that there is no default +implementation of \fBunknown\fR in a safe interpreter. .PP If the Tcl interpreter encounters a command name for which there -is not a defined command, then Tcl checks for the existence of -a command named \fBunknown\fR. -If there is no such command, then the interpreter returns an -error. -If the \fBunknown\fR command exists, then it is invoked with +is not a defined command (in either the current namespace, or the +global namespace), then Tcl checks for the existence of +an unknown handler for the current namespace. By default, this +handler is a command named \fB::unknown\fR. If there is no such +command, then the interpreter returns an error. +If the \fBunknown\fR command exists (or a new handler has been +registered for the current namespace), then it is invoked with arguments consisting of the fully-substituted name and arguments for the original non-existent command. The \fBunknown\fR command typically does things like searching @@ -87,7 +90,7 @@ proc \fBunknown\fR args { .CE .SH "SEE ALSO" -info(n), proc(n), interp(n), library(n) +info(n), proc(n), interp(n), library(n), namespace(n) .SH KEYWORDS error, non-existent command |