⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itcl_migrate.c

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 C
字号:
/* * ------------------------------------------------------------------------ *      PACKAGE:  [incr Tcl] *  DESCRIPTION:  Object-Oriented Extensions to Tcl * *  This file contains procedures that belong in the Tcl/Tk core. *  Hopefully, they'll migrate there soon. * * ======================================================================== *  AUTHOR:  Michael J. McLennan *           Bell Labs Innovations for Lucent Technologies *           mmclennan@lucent.com *           http://www.tcltk.com/itcl * *     RCS:  $Id: itcl_migrate.c 144 2003-02-05 10:56:26Z mdejong $ * ======================================================================== *           Copyright (c) 1993-1998  Lucent Technologies, Inc. * ------------------------------------------------------------------------ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */#include "itclInt.h"/* *---------------------------------------------------------------------- * * _Tcl_GetCallFrame -- * *	Checks the call stack and returns the call frame some number *	of levels up.  It is often useful to know the invocation *	context for a command. * * Results: *	Returns a token for the call frame 0 or more levels up in *	the call stack. * * Side effects: *	None. * *---------------------------------------------------------------------- */Tcl_CallFrame*_Tcl_GetCallFrame(interp, level)    Tcl_Interp *interp;  /* interpreter being queried */    int level;           /* number of levels up in the call stack (>= 0) */{    Interp *iPtr = (Interp*)interp;    CallFrame *framePtr;    if (level < 0) {        panic("itcl: _Tcl_GetCallFrame called with bad number of levels");    }    framePtr = iPtr->varFramePtr;    while (framePtr && level > 0) {        framePtr = framePtr->callerVarPtr;        level--;    }    return (Tcl_CallFrame*)framePtr;}/* *---------------------------------------------------------------------- * * _Tcl_ActivateCallFrame -- * *	Makes an existing call frame the current frame on the *	call stack.  Usually called in conjunction with *	_Tcl_GetCallFrame to simulate the effect of an "uplevel" *	command. * *	Note that this procedure is different from Tcl_PushCallFrame, *	which adds a new call frame to the call stack.  This procedure *	assumes that the call frame is already initialized, and it *	merely activates it on the call stack. * * Results: *	Returns a token for the call frame that was in effect before *	activating the new context.  That call frame can be restored *	by calling _Tcl_ActivateCallFrame again. * * Side effects: *	None. * *---------------------------------------------------------------------- */Tcl_CallFrame*_Tcl_ActivateCallFrame(interp, framePtr)    Tcl_Interp *interp;        /* interpreter being queried */    Tcl_CallFrame *framePtr;   /* call frame to be activated */{    Interp *iPtr = (Interp*)interp;    CallFrame *oldFramePtr;    oldFramePtr = iPtr->varFramePtr;    iPtr->varFramePtr = (CallFrame *) framePtr;    return (Tcl_CallFrame *) oldFramePtr;}/* *---------------------------------------------------------------------- * * _TclNewVar -- * *      Create a new heap-allocated variable that will eventually be *      entered into a hashtable. * * Results: *      The return value is a pointer to the new variable structure. It is *      marked as a scalar variable (and not a link or array variable). Its *      value initially is NULL. The variable is not part of any hash table *      yet. Since it will be in a hashtable and not in a call frame, its *      name field is set NULL. It is initially marked as undefined. * * Side effects: *      Storage gets allocated. * *---------------------------------------------------------------------- */Var *_TclNewVar(){    register Var *varPtr;    varPtr = (Var *) ckalloc(sizeof(Var));    varPtr->value.objPtr = NULL;    varPtr->name = NULL;    varPtr->nsPtr = NULL;    varPtr->hPtr = NULL;    varPtr->refCount = 0;    varPtr->tracePtr = NULL;    varPtr->searchPtr = NULL;    varPtr->flags = (VAR_SCALAR | VAR_UNDEFINED | VAR_IN_HASHTABLE);    return varPtr;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -