Index: generic/xotcl.c =================================================================== diff -u -raf700eadd88c272fd795fe2bce37e403c6fc78c3 -r69c7790384fbe2fa6ae5d0e1e9d084db4e895b54 --- generic/xotcl.c (.../xotcl.c) (revision af700eadd88c272fd795fe2bce37e403c6fc78c3) +++ generic/xotcl.c (.../xotcl.c) (revision 69c7790384fbe2fa6ae5d0e1e9d084db4e895b54) @@ -682,8 +682,6 @@ VarHashTableCreate() { TclVarHashTable *varTablePtr = (TclVarHashTable *) ckalloc(varHashTableSize); InitVarHashTable(varTablePtr, NULL); - fprintf(stderr, "VarHashTableCreate returns %p createProc %p\n",varTablePtr, - ((Tcl_HashTable *)varTablePtr)->createProc); return varTablePtr; } @@ -1695,7 +1693,7 @@ static int DotVarResolver(Tcl_Interp *interp, CONST char *varName, Tcl_Namespace *nsPtr, int flags, Tcl_Var *varPtr) { - int new; + int new, frameFlags; CallFrame *varFramePtr; Tcl_Var var; @@ -1709,9 +1707,10 @@ #endif varName ++; varFramePtr = Tcl_Interp_varFramePtr(interp); + frameFlags = Tcl_CallFrame_isProcCallFrame(varFramePtr); + /*fprintf(stderr, "dotVarResolver called var=%s var flags %.8x frame flags %.6x\n", + varName, flags, frameFlags);*/ - fprintf(stderr, "dotVarResolver called var=%s var flags %.8x frame flags %.6x\n", - varName, flags, Tcl_CallFrame_isProcCallFrame(varFramePtr)); if (Tcl_CallFrame_isProcCallFrame(varFramePtr) & (FRAME_IS_XOTCL_METHOD|FRAME_IS_XOTCL_OBJECT)) { TclVarHashTable *varTablePtr; XOTclObject *obj; @@ -1723,24 +1722,19 @@ return TCL_OK; } - obj = ((XOTclCallStackContent *)varFramePtr->clientData)->self; + obj = frameFlags & FRAME_IS_XOTCL_METHOD ? + ((XOTclCallStackContent *)varFramePtr->clientData)->self : + (XOTclObject *)(varFramePtr->clientData); varTablePtr = obj->nsPtr ? Tcl_Namespace_varTable(obj->nsPtr) : obj->varTable; - fprintf(stderr, "varTablePtr = %p obj varTable %p\n",varTablePtr, obj->varTable); + if (varTablePtr == NULL && obj->varTable == NULL) { varTablePtr = obj->varTable = VarHashTableCreate(); - fprintf(stderr, "hashTable %p created, proc = %p, should be %p\n", - varTablePtr, ((Tcl_HashTable *)varTablePtr)->createProc, - /*Tcl_CreateHashEntry*/NULL); } - fprintf(stderr, "Object Var Resolver, name=%s, obj %p, nsPtr %p, varTable %p proc %p\n", - varName, obj, obj->nsPtr, varTablePtr, - ((Tcl_HashTable *)varTablePtr)->createProc); + /*fprintf(stderr, "Object Var Resolver, name=%s, obj %p, nsPtr %p, varTable %p\n", + varName, obj, obj->nsPtr, varTablePtr);*/ var = (Tcl_Var)LookupVarFromTable(varTablePtr, varName, NULL); - fprintf(stderr, "hashTable %p, proc = %p, lookup %p\n", - varTablePtr, ((Tcl_HashTable *)varTablePtr)->createProc, var); if (var) { - fprintf(stderr, ".... found in hashtable %s %p\n",varName, var); #if defined(VAR_RESOLVER_TRACE) fprintf(stderr, ".... found in hashtable %s %p\n",varName, var); #endif @@ -1751,7 +1745,6 @@ INCR_REF_COUNT(key); var = (Tcl_Var)VarHashCreateVar(varTablePtr, key, &new); DECR_REF_COUNT(key); - fprintf(stderr, ".... created in hashtable %s %p\n",varName, var); #if defined(VAR_RESOLVER_TRACE) fprintf(stderr, ".... created in hashtable %s %p\n",varName, var); #endif @@ -7148,7 +7141,6 @@ static void CleanupInitObject(Tcl_Interp *interp, XOTclObject *obj, XOTclClass *cl, Tcl_Namespace *namespacePtr, int softrecreate) { - fprintf(stderr, "+++ CleanupInitObject\n"); #ifdef OBJDELETION_TRACE fprintf(stderr, "+++ CleanupInitObject\n"); #endif @@ -7307,7 +7299,6 @@ MEM_COUNT_ALLOC("XOTclObject/XOTclClass", obj); assert(obj); /* ckalloc panics, if malloc fails */ assert(isAbsolutePath(nameString)); - fprintf(stderr, "+++ PrimitiveOCreate varTable %p\n",obj->varTable); length = strlen(nameString); if (!NSCheckForParent(interp, nameString, length, cl)) { ckfree((char *) obj); @@ -7317,14 +7308,12 @@ (ClientData)obj, tclDeletesObject); PrimitiveOInit(obj, interp, nameString, cl); - fprintf(stderr, "+++ after OInit varTable %p\n",obj->varTable); obj->cmdName = nameObj; /* convert cmdName to Tcl Obj of type cmdName */ /*Tcl_GetCommandFromObj(interp, obj->cmdName);*/ INCR_REF_COUNT(obj->cmdName); objTrace("PrimitiveOCreate", obj); - fprintf(stderr, "+++ after PrimitiveOCreate varTable %p\n",obj->varTable); return obj; } @@ -8091,7 +8080,7 @@ GetInstVarIntoCurrentScope(Tcl_Interp *interp, XOTclObject *obj, Tcl_Obj *varName, Tcl_Obj *newName) { Var *varPtr = NULL, *otherPtr = NULL, *arrayPtr; - int new, flgs = TCL_LEAVE_ERR_MSG; + int new = 0, flgs = TCL_LEAVE_ERR_MSG; Tcl_CallFrame *varFramePtr; TclVarHashTable *tablePtr; XOTcl_FrameDecls; @@ -8938,7 +8927,6 @@ if (tmpObj) {DECR_REF_COUNT(tmpObj);} FREE_ON_STACK(tov); - fprintf(stderr, "+++ after create %p\n",newObj->varTable); return result; } @@ -10079,7 +10067,7 @@ return XOTclVarErrMsg(interp, "Cannot resolve 'self', probably called outside the context of an XOTcl Object", (char *) NULL); } - fprintf(stderr, "dispatch %s on %s\n",ObjStr(nobjv[0]), objectName(self)); + /*fprintf(stderr, "dispatch %s on %s\n",ObjStr(nobjv[0]), objectName(self));*/ return DoDispatch(self, interp, nobjc, nobjv, XOTCL_CM_NO_SHIFT); } @@ -10934,10 +10922,6 @@ goto configure_exit; } - /* make sure, we have a varTable */ - if (obj->nsPtr == NULL && obj->varTable == NULL) { - obj->varTable = VarHashTableCreate(); - } /* Push frame to allow for [self] and make instvars of obj accessible as locals */ XOTcl_PushFrame(interp, obj); @@ -10987,9 +10971,6 @@ /* special setter for init commands */ if (paramPtr->flags & XOTCL_ARG_INITCMD) { - fprintf(stderr, "+++ before initcmd %p createproc %p\n",obj->varTable, - ((Tcl_HashTable *)obj->varTable)->createProc); - result = Tcl_EvalObjEx(interp, newValue, TCL_EVAL_DIRECT); fprintf(stderr, "XOTclOConfigureMethod_ attribute %s evaluated %s => (%d)\n", ObjStr(paramPtr->nameObj), ObjStr(newValue), result); @@ -11588,7 +11569,6 @@ Tcl_SetObjResult(interp, name); result = TCL_OK; } - fprintf(stderr, "+++ after alloc %p\n",newObj->varTable); } if (tmpName) {