2 * ------------------------------------------------------------------------
4 * DESCRIPTION: Object-Oriented Extensions to Tcl
6 * This file contains procedures that belong in the Tcl/Tk core.
7 * Hopefully, they'll migrate there soon.
9 * ========================================================================
10 * AUTHOR: Arnulf Wiedemann
12 * ========================================================================
13 * Copyright (c) 1993-1998 Lucent Technologies, Inc.
14 * ------------------------------------------------------------------------
15 * See the file "license.terms" for information on usage and redistribution
16 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
22 Itcl_SetCallFrameResolver(
24 Tcl_Resolve *resolvePtr)
26 CallFrame *framePtr = ((Interp *)interp)->framePtr;
27 if (framePtr != NULL) {
28 #ifdef ITCL_USE_MODIFIED_TCL_H
29 framePtr->isProcCallFrame |= FRAME_HAS_RESOLVER;
30 framePtr->resolvePtr = resolvePtr;
31 #elif defined(__cplusplus)
40 _Tcl_SetNamespaceResolver(
42 Tcl_Resolve *resolvePtr)
47 #ifdef ITCL_USE_MODIFIED_TCL_H
48 ((Namespace *)nsPtr)->resolvePtr = resolvePtr;
49 #elif defined(__cplusplus)
57 TCL_UNUSED(Tcl_Interp *),
64 if ((nsPtr == NULL) || (varName == NULL)) {
68 varPtr = TclVarHashCreateVar(&((Namespace *)nsPtr)->varTable,
70 TclSetVarNamespaceVar(varPtr);
71 return (Tcl_Var)varPtr;
78 Var *varPtr = (Var *)var;
80 VarHashRefCount(varPtr)++;
87 Var *varPtr = (Var *)var;
89 VarHashRefCount(varPtr)--;
90 TclCleanupVar(varPtr, NULL);
94 Itcl_GetUplevelCallFrame(
102 framePtr = ((Interp *)interp)->varFramePtr;
103 while ((framePtr != NULL) && (level-- > 0)) {
104 framePtr = framePtr->callerVarPtr;
106 if (framePtr == NULL) {
109 return (Tcl_CallFrame *)framePtr;
113 Itcl_ActivateCallFrame(
115 Tcl_CallFrame *framePtr)
117 Interp *iPtr = (Interp*)interp;
118 CallFrame *oldFramePtr;
120 oldFramePtr = iPtr->varFramePtr;
121 iPtr->varFramePtr = (CallFrame *) framePtr;
123 return (Tcl_CallFrame *) oldFramePtr;
127 Itcl_GetUplevelNamespace(
135 framePtr = ((Interp *)interp)->framePtr;
136 while ((framePtr != NULL) && (level-- > 0)) {
137 framePtr = framePtr->callerVarPtr;
139 if (framePtr == NULL) {
142 return (Tcl_Namespace *)framePtr->nsPtr;
146 Itcl_GetCallFrameClientData(
149 /* suggested fix for SF bug #250 use varFramePtr instead of framePtr
150 * seems to have no side effect concerning test suite, but does NOT fix the bug
152 CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
153 if (framePtr == NULL) {
156 return framePtr->clientData;
160 Itcl_SetCallFrameNamespace(
162 Tcl_Namespace *nsPtr)
164 CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
165 if (framePtr == NULL) {
168 ((Interp *)interp)->varFramePtr->nsPtr = (Namespace *)nsPtr;
173 Itcl_GetCallVarFrameObjc(
176 CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
177 if (framePtr == NULL) {
180 return framePtr->objc;
184 Itcl_GetCallVarFrameObjv(
187 CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
188 if (framePtr == NULL) {
191 return framePtr->objv;
195 Itcl_GetCallFrameObjc(
198 CallFrame *framePtr = ((Interp *)interp)->framePtr;
199 if (framePtr == NULL) {
202 return ((Interp *)interp)->framePtr->objc;
206 Itcl_GetCallFrameObjv(
209 CallFrame *framePtr = ((Interp *)interp)->framePtr;
210 if (framePtr == NULL) {
213 return ((Interp *)interp)->framePtr->objv;
217 Itcl_IsCallFrameArgument(
221 CallFrame *varFramePtr = ((Interp *)interp)->framePtr;
224 if (varFramePtr == NULL) {
227 if (!varFramePtr->isProcCallFrame) {
230 procPtr = varFramePtr->procPtr;
232 * Search through compiled locals first...
235 CompiledLocal *localPtr = procPtr->firstLocalPtr;
236 int nameLen = strlen(name);
238 for (;localPtr != NULL; localPtr = localPtr->nextPtr) {
239 if (TclIsVarArgument(localPtr)) {
240 char *localName = localPtr->name;
241 if ((name[0] == localName[0])
242 && (nameLen == localPtr->nameLength)
243 && (strcmp(name, localName) == 0)) {