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;
38
_Tcl_SetNamespaceResolver(
40
Tcl_Resolve *resolvePtr)
45
#ifdef ITCL_USE_MODIFIED_TCL_H
46
((Namespace *)nsPtr)->resolvePtr = resolvePtr;
60
if ((nsPtr == NULL) || (varName == NULL)) {
64
varPtr = TclVarHashCreateVar(&((Namespace *)nsPtr)->varTable,
66
TclSetVarNamespaceVar(varPtr);
67
return (Tcl_Var)varPtr;
74
Var *varPtr = (Var *)var;
76
VarHashRefCount(varPtr)++;
83
Var *varPtr = (Var *)var;
85
VarHashRefCount(varPtr)--;
86
TclCleanupVar(varPtr, NULL);
90
Itcl_GetUplevelCallFrame(
98
framePtr = ((Interp *)interp)->varFramePtr;
99
while ((framePtr != NULL) && (level-- > 0)) {
100
framePtr = framePtr->callerVarPtr;
102
if (framePtr == NULL) {
105
return (Tcl_CallFrame *)framePtr;
109
Itcl_ActivateCallFrame(
111
Tcl_CallFrame *framePtr)
113
Interp *iPtr = (Interp*)interp;
114
CallFrame *oldFramePtr;
116
oldFramePtr = iPtr->varFramePtr;
117
iPtr->varFramePtr = (CallFrame *) framePtr;
119
return (Tcl_CallFrame *) oldFramePtr;
123
Itcl_GetUplevelNamespace(
131
framePtr = ((Interp *)interp)->framePtr;
132
while ((framePtr != NULL) && (level-- > 0)) {
133
framePtr = framePtr->callerVarPtr;
135
if (framePtr == NULL) {
138
return (Tcl_Namespace *)framePtr->nsPtr;
142
Itcl_GetCallFrameClientData(
145
/* suggested fix for SF bug #250 use varFramePtr instead of framePtr
146
* seems to have no side effect concerning test suite, but does NOT fix the bug
148
CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
149
if (framePtr == NULL) {
152
return framePtr->clientData;
156
Itcl_SetCallFrameNamespace(
158
Tcl_Namespace *nsPtr)
160
CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
161
if (framePtr == NULL) {
164
((Interp *)interp)->varFramePtr->nsPtr = (Namespace *)nsPtr;
169
Itcl_GetCallVarFrameObjc(
172
CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
173
if (framePtr == NULL) {
176
return framePtr->objc;
180
Itcl_GetCallVarFrameObjv(
183
CallFrame *framePtr = ((Interp *)interp)->varFramePtr;
184
if (framePtr == NULL) {
187
return framePtr->objv;
191
Itcl_GetCallFrameObjc(
194
CallFrame *framePtr = ((Interp *)interp)->framePtr;
195
if (framePtr == NULL) {
198
return ((Interp *)interp)->framePtr->objc;
202
Itcl_GetCallFrameObjv(
205
CallFrame *framePtr = ((Interp *)interp)->framePtr;
206
if (framePtr == NULL) {
209
return ((Interp *)interp)->framePtr->objv;
213
Itcl_IsCallFrameArgument(
217
CallFrame *varFramePtr = ((Interp *)interp)->framePtr;
220
if (varFramePtr == NULL) {
223
if (!varFramePtr->isProcCallFrame) {
226
procPtr = varFramePtr->procPtr;
228
* Search through compiled locals first...
231
CompiledLocal *localPtr = procPtr->firstLocalPtr;
232
int nameLen = strlen(name);
234
for (;localPtr != NULL; localPtr = localPtr->nextPtr) {
235
if (TclIsVarArgument(localPtr)) {
236
register char *localName = localPtr->name;
237
if ((name[0] == localName[0])
238
&& (nameLen == localPtr->nameLength)
239
&& (strcmp(name, localName) == 0)) {
249
Itcl_IsCallFrameLinkVar(
253
CallFrame *varFramePtr = ((Interp *)interp)->framePtr;
256
if (varFramePtr == NULL) {
259
if (!varFramePtr->isProcCallFrame) {
262
procPtr = varFramePtr->procPtr;
264
* Search through compiled locals first...
267
CompiledLocal *localPtr = procPtr->firstLocalPtr;
268
int nameLen = strlen(name);
270
for (;localPtr != NULL; localPtr = localPtr->nextPtr) {
271
if (TclIsVarLink(localPtr)) {
272
register char *localName = localPtr->name;
273
if ((name[0] == localName[0])
274
&& (nameLen == localPtr->nameLength)
275
&& (strcmp(name, localName) == 0)) {
285
Itcl_IsVarLink(Tcl_Var varPtr) {
286
return TclIsVarLink((Var *)varPtr);