summaryrefslogtreecommitdiffstats
path: root/generic/tclExecute.c
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2024-08-18 11:14:29 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2024-08-18 11:14:29 (GMT)
commitfa770fdd5c38ffd5f034aa5da3738270ca196c23 (patch)
tree31daba2127c1c0ef2584a9d4e115b2d290c685a5 /generic/tclExecute.c
parent095db6a9ca5e7e5d1286fe4d25a4f93bea80bcd3 (diff)
parentddfd3dd2c7125da6e26ebfb3c05511d112773993 (diff)
downloadtcl-fa770fdd5c38ffd5f034aa5da3738270ca196c23.zip
tcl-fa770fdd5c38ffd5f034aa5da3738270ca196c23.tar.gz
tcl-fa770fdd5c38ffd5f034aa5da3738270ca196c23.tar.bz2
Introduce TclNewNamespaceObj() to factor out a common idiom
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r--generic/tclExecute.c25
1 files changed, 6 insertions, 19 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index f6a18f7..6910c29 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -2470,7 +2470,7 @@ TEBCresume(
}
case INST_TAILCALL: {
- Tcl_Obj *listPtr, *nsObjPtr;
+ Tcl_Obj *listPtr;
opnd = TclGetUInt1AtPtr(pc+1);
@@ -2506,8 +2506,8 @@ TEBCresume(
*/
listPtr = Tcl_NewListObj(opnd, &OBJ_AT_DEPTH(opnd-1));
- nsObjPtr = Tcl_NewStringObj(iPtr->varFramePtr->nsPtr->fullName, -1);
- TclListObjSetElement(interp, listPtr, 0, nsObjPtr);
+ TclListObjSetElement(NULL, listPtr, 0, TclNewNamespaceObj(
+ (Tcl_Namespace *) iPtr->varFramePtr->nsPtr));
if (iPtr->varFramePtr->tailcallPtr) {
Tcl_DecrRefCount(iPtr->varFramePtr->tailcallPtr);
}
@@ -4315,18 +4315,10 @@ TEBCresume(
* Start of general introspector instructions.
*/
- case INST_NS_CURRENT: {
- Namespace *currNsPtr = (Namespace *) TclGetCurrentNamespace(interp);
-
- if (currNsPtr == (Namespace *) TclGetGlobalNamespace(interp)) {
- TclNewLiteralStringObj(objResultPtr, "::");
- } else {
- TclNewStringObj(objResultPtr, currNsPtr->fullName,
- strlen(currNsPtr->fullName));
- }
+ case INST_NS_CURRENT:
+ objResultPtr = TclNewNamespaceObj(TclGetCurrentNamespace(interp));
TRACE_WITH_OBJ(("=> "), objResultPtr);
NEXT_INST_F(1, 0, 1);
- }
break;
case INST_COROUTINE_NAME: {
CoroutineData *corPtr = iPtr->execEnvPtr->corPtr;
@@ -4683,12 +4675,7 @@ TEBCresume(
goto gotError;
}
- /*
- * TclOO objects *never* have the global namespace as their NS.
- */
-
- TclNewStringObj(objResultPtr, oPtr->namespacePtr->fullName,
- strlen(oPtr->namespacePtr->fullName));
+ objResultPtr = TclNewNamespaceObj(oPtr->namespacePtr);
TRACE_WITH_OBJ(("%.30s => ", O2S(OBJ_AT_TOS)), objResultPtr);
NEXT_INST_F(1, 1, 1);
}