diff options
Diffstat (limited to 'generic/tclExecute.c')
| -rw-r--r-- | generic/tclExecute.c | 50 | 
1 files changed, 16 insertions, 34 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c index 63096ec..fb4570e 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -12,7 +12,7 @@   * See the file "license.terms" for information on usage and redistribution of   * this file, and for a DISCLAIMER OF ALL WARRANTIES.   * - * RCS: @(#) $Id: tclExecute.c,v 1.305 2007/06/28 21:24:56 dgp Exp $ + * RCS: @(#) $Id: tclExecute.c,v 1.306 2007/07/24 03:05:53 msofer Exp $   */  #include "tclInt.h" @@ -1975,7 +1975,6 @@ TclExecuteByteCode(      doInvocation:  	{  	    Tcl_Obj **objv = &OBJ_AT_DEPTH(objc-1); -	    Command *cmdPtr;  #ifdef TCL_COMPILE_DEBUG  	    if (tclTraceExec >= 2) { @@ -2014,37 +2013,8 @@ TclExecuteByteCode(  	    bcFramePtr->data.tebc.pc = (char *) pc;  	    iPtr->cmdFramePtr = bcFramePtr;  	    DECACHE_STACK_INFO(); -	    cmdPtr = (Command *) Tcl_GetCommandFromObj(interp, objv[0]); - -	    if (cmdPtr  -		    && !((cmdPtr->flags & CMD_HAS_EXEC_TRACES) || iPtr->tracePtr) -		    && !(checkInterp && (codePtr->compileEpoch != iPtr->compileEpoch)) -		) { -		cmdPtr->refCount++; -		iPtr->cmdCount++; -		result = (*cmdPtr->objProc)(cmdPtr->objClientData, interp, objc, objv); -		 -		if (Tcl_AsyncReady()) { -		    result = Tcl_AsyncInvoke(interp, result); -		} -		if (result == TCL_OK && TclLimitReady(iPtr->limit)) { -		    result = Tcl_LimitCheck(interp); -		} -		TclCleanupCommandMacro(cmdPtr); -	    } else { -		/* -		 * If trace procedures will be called, we need a command -		 * string to pass to TclEvalObjvInternal; note that a copy of -		 * the string will be made there to include the ending \0. -		 */ -		int length; -		const char *bytes; - -		bytes = GetSrcInfoForPc(pc, codePtr, &length); -		result = TclEvalObjvInternal(interp, objc, objv, bytes, -			length, 0); -	    } - +	    result = TclEvalObjvInternal(interp, objc, objv, +		    /* call from TEBC */(char *) -1, -1, 0);  	    CACHE_STACK_INFO();  	    iPtr->cmdFramePtr = iPtr->cmdFramePtr->nextPtr; @@ -6858,7 +6828,7 @@ IllegalExprOperandType(  /*   *----------------------------------------------------------------------   * - * TclGetSrcInfoForPc, GetSrcInfoForPc -- + * TclGetSrcInfoForPc, GetSrcInfoForPc, TclGetSrcInfoForCmd --   *   *	Given a program counter value, finds the closest command in the   *	bytecode code unit's CmdLocation array and returns information about @@ -6879,6 +6849,18 @@ IllegalExprOperandType(   *----------------------------------------------------------------------   */ +const char * +TclGetSrcInfoForCmd( +    Interp *iPtr, +    int *lenPtr) +{ +    CmdFrame *cfPtr = iPtr->cmdFramePtr; +    ByteCode *codePtr = (ByteCode *) cfPtr->data.tebc.codePtr; + +    return GetSrcInfoForPc((unsigned char *) cfPtr->data.tebc.pc, +	    codePtr, lenPtr); +} +  void  TclGetSrcInfoForPc(      CmdFrame *cfPtr)  | 
