diff options
| author | dkf <donal.k.fellows@manchester.ac.uk> | 2024-08-18 11:14:29 (GMT) |
|---|---|---|
| committer | dkf <donal.k.fellows@manchester.ac.uk> | 2024-08-18 11:14:29 (GMT) |
| commit | fa770fdd5c38ffd5f034aa5da3738270ca196c23 (patch) | |
| tree | 31daba2127c1c0ef2584a9d4e115b2d290c685a5 /generic/tclExecute.c | |
| parent | 095db6a9ca5e7e5d1286fe4d25a4f93bea80bcd3 (diff) | |
| parent | ddfd3dd2c7125da6e26ebfb3c05511d112773993 (diff) | |
| download | tcl-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.c | 25 |
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); } |
