tclExecute.c File Reference

#include "tclInt.h"
#include "tclCompile.h"
#include "tommath.h"
#include <math.h>
#include <float.h>

Go to the source code of this file.

Data Structures

struct  BuiltinFunc

Defines

#define ASYNC_CHECK_COUNT_MASK   63
#define TCL_SUPPORT_84_BYTECODE   1
#define LAST_BUILTIN_FUNC   25
#define VarHashGetValue(hPtr)   ((Var *) ((char *)hPtr - TclOffset(VarInHash, entry)))
#define VarHashFindVar(tablePtr, key)   VarHashCreateVar((tablePtr), (key), NULL)
#define NEXT_INST_F(pcAdjustment, nCleanup, resultHandling)
#define NEXT_INST_V(pcAdjustment, nCleanup, resultHandling)
#define CACHE_STACK_INFO()   checkInterp = 1
#define DECACHE_STACK_INFO()   esPtr->tosPtr = tosPtr
#define PUSH_OBJECT(objPtr)   Tcl_IncrRefCount(*(++tosPtr) = (objPtr))
#define POP_OBJECT()   *(tosPtr--)
#define OBJ_AT_TOS   *tosPtr
#define OBJ_UNDER_TOS   *(tosPtr-1)
#define OBJ_AT_DEPTH(n)   *(tosPtr-(n))
#define CURR_DEPTH   (tosPtr - initTosPtr)
#define TRACE(a)
#define TRACE_APPEND(a)
#define TRACE_WITH_OBJ(a, objPtr)
#define O2S(objPtr)
#define TCL_DTRACE_INST_NEXT()
#define TCL_DTRACE_INST_LAST()
#define GetNumberFromObj(interp, objPtr, ptrPtr, tPtr)
#define TclGetBooleanFromObj(interp, objPtr, boolPtr)
#define TclGetWideIntFromObj(interp, objPtr, wideIntPtr)
#define Overflowing(a, b, sum)   ((((a)^(sum)) < 0) && (((a)^(b)) >= 0))
#define TCL_STACK_INITIAL_SIZE   2000
#define WALLOCALIGN   (TCL_ALLOCALIGN/sizeof(Tcl_Obj *))
#define MEMSTART(markerPtr)   ((markerPtr) + OFFSET(markerPtr))
#define iPtr   ((Interp *) interp)
#define ReadTraced(varPtr)   ((varPtr)->flags & VAR_TRACED_READ)
#define WriteTraced(varPtr)   ((varPtr)->flags & VAR_TRACED_WRITE)

Functions

ExecEnvTclCreateExecEnv (Tcl_Interp *interp)
void TclDeleteExecEnv (ExecEnv *eePtr)
void TclFinalizeExecution (void)
void TclStackFree (Tcl_Interp *interp, void *freePtr)
void * TclStackAlloc (Tcl_Interp *interp, int numBytes)
void * TclStackRealloc (Tcl_Interp *interp, void *ptr, int numBytes)
int Tcl_ExprObj (Tcl_Interp *interp, register Tcl_Obj *objPtr, Tcl_Obj **resultPtrPtr)
int TclCompEvalObj (Tcl_Interp *interp, Tcl_Obj *objPtr, const CmdFrame *invoker, int word)
int TclIncrObj (Tcl_Interp *interp, Tcl_Obj *valuePtr, Tcl_Obj *incrPtr)
int TclExecuteByteCode (Tcl_Interp *interp, ByteCode *codePtr)
const char * TclGetSrcInfoForCmd (Interp *iPtr, int *lenPtr)
void TclGetSrcInfoForPc (CmdFrame *cfPtr)
void TclExprFloatError (Tcl_Interp *interp, double value)


Define Documentation

#define ASYNC_CHECK_COUNT_MASK   63

Definition at line 44 of file tclExecute.c.

Referenced by TclExecuteByteCode().

 
#define CACHE_STACK_INFO (  )     checkInterp = 1

Definition at line 253 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define CURR_DEPTH   (tosPtr - initTosPtr)

Definition at line 285 of file tclExecute.c.

Referenced by TclExecuteByteCode().

 
#define DECACHE_STACK_INFO (  )     esPtr->tosPtr = tosPtr

Definition at line 256 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define GetNumberFromObj ( interp,
objPtr,
ptrPtr,
tPtr   ) 

Value:

(((objPtr)->typePtr == &tclIntType)                                     \
        ?       (*(tPtr) = TCL_NUMBER_LONG,                             \
                *(ptrPtr) = (ClientData)                                \
                    (&((objPtr)->internalRep.longValue)), TCL_OK) :     \
    ((objPtr)->typePtr == &tclWideIntType)                              \
        ?       (*(tPtr) = TCL_NUMBER_WIDE,                             \
                *(ptrPtr) = (ClientData)                                \
                    (&((objPtr)->internalRep.wideValue)), TCL_OK) :     \
    ((objPtr)->typePtr == &tclDoubleType)                               \
        ?       (((TclIsNaN((objPtr)->internalRep.doubleValue))         \
                    ?   (*(tPtr) = TCL_NUMBER_NAN)                      \
                    :   (*(tPtr) = TCL_NUMBER_DOUBLE)),                 \
                *(ptrPtr) = (ClientData)                                \
                    (&((objPtr)->internalRep.doubleValue)), TCL_OK) :   \
    ((((objPtr)->typePtr == NULL) && ((objPtr)->bytes == NULL)) ||      \
    (((objPtr)->bytes != NULL) && ((objPtr)->length == 0)))             \
        ? TCL_ERROR :                                                   \
    TclGetNumberFromObj((interp), (objPtr), (ptrPtr), (tPtr)))

Definition at line 375 of file tclExecute.c.

Referenced by TclExecuteByteCode(), and TclIncrObj().

#define LAST_BUILTIN_FUNC   25

Definition at line 161 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define MEMSTART ( markerPtr   )     ((markerPtr) + OFFSET(markerPtr))

Definition at line 864 of file tclExecute.c.

Referenced by TclStackFree(), and TclStackRealloc().

#define NEXT_INST_F ( pcAdjustment,
nCleanup,
resultHandling   ) 

Value:

if (nCleanup == 0) {\
        if (resultHandling != 0) {\
            if ((resultHandling) > 0) {\
                PUSH_OBJECT(objResultPtr);\
            } else {\
                *(++tosPtr) = objResultPtr;\
            }\
        } \
        pc += (pcAdjustment);\
        goto cleanup0;\
    } else if (resultHandling != 0) {\
        if ((resultHandling) > 0) {\
            Tcl_IncrRefCount(objResultPtr);\
        }\
        pc += (pcAdjustment);\
        switch (nCleanup) {\
            case 1: goto cleanup1_pushObjResultPtr;\
            case 2: goto cleanup2_pushObjResultPtr;\
            default: Tcl_Panic("bad usage of macro NEXT_INST_F");\
        }\
    } else {\
        pc += (pcAdjustment);\
        switch (nCleanup) {\
            case 1: goto cleanup1;\
            case 2: goto cleanup2;\
            default: Tcl_Panic("bad usage of macro NEXT_INST_F");\
        }\
    }

Definition at line 203 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define NEXT_INST_V ( pcAdjustment,
nCleanup,
resultHandling   ) 

Value:

pc += (pcAdjustment);\
    cleanup = (nCleanup);\
    if (resultHandling) {\
        if ((resultHandling) > 0) {\
            Tcl_IncrRefCount(objResultPtr);\
        }\
        goto cleanupV_pushObjResultPtr;\
    } else {\
        goto cleanupV;\
    }

Definition at line 233 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define O2S ( objPtr   ) 

Definition at line 322 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define OBJ_AT_DEPTH (  )     *(tosPtr-(n))

Definition at line 283 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define OBJ_AT_TOS   *tosPtr

Definition at line 279 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define OBJ_UNDER_TOS   *(tosPtr-1)

Definition at line 281 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define Overflowing ( a,
b,
sum   )     ((((a)^(sum)) < 0) && (((a)^(b)) >= 0))

Definition at line 446 of file tclExecute.c.

Referenced by TclExecuteByteCode(), and TclIncrObj().

 
#define POP_OBJECT (  )     *(tosPtr--)

Definition at line 277 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define PUSH_OBJECT ( objPtr   )     Tcl_IncrRefCount(*(++tosPtr) = (objPtr))

Definition at line 274 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define ReadTraced ( varPtr   )     ((varPtr)->flags & VAR_TRACED_READ)

Referenced by TclExecuteByteCode().

 
#define TCL_DTRACE_INST_LAST (  ) 

Value:

if (TCL_DTRACE_INST_DONE_ENABLED() && curInstName) {\
        TCL_DTRACE_INST_DONE(curInstName, (int) CURR_DEPTH, tosPtr);\
    }

Definition at line 342 of file tclExecute.c.

Referenced by TclExecuteByteCode().

 
#define TCL_DTRACE_INST_NEXT (  ) 

Value:

if (TCL_DTRACE_INST_DONE_ENABLED()) {\
        if (curInstName) {\
            TCL_DTRACE_INST_DONE(curInstName, (int) CURR_DEPTH, tosPtr);\
        }\
        curInstName = tclInstructionTable[*pc].name;\
        if (TCL_DTRACE_INST_START_ENABLED()) {\
            TCL_DTRACE_INST_START(curInstName, (int) CURR_DEPTH, tosPtr);\
        }\
    } else if (TCL_DTRACE_INST_START_ENABLED()) {\
        TCL_DTRACE_INST_START(tclInstructionTable[*pc].name, (int) CURR_DEPTH,\
                tosPtr);\
    }

Definition at line 329 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define TCL_STACK_INITIAL_SIZE   2000

Definition at line 718 of file tclExecute.c.

Referenced by TclCreateExecEnv().

#define TCL_SUPPORT_84_BYTECODE   1

Definition at line 111 of file tclExecute.c.

#define TclGetBooleanFromObj ( interp,
objPtr,
boolPtr   ) 

Value:

((((objPtr)->typePtr == &tclIntType)                            \
        || ((objPtr)->typePtr == &tclBooleanType))                      \
        ? (*(boolPtr) = ((objPtr)->internalRep.longValue!=0), TCL_OK)   \
        : Tcl_GetBooleanFromObj((interp), (objPtr), (boolPtr)))

Definition at line 405 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define TclGetWideIntFromObj ( interp,
objPtr,
wideIntPtr   ) 

Value:

(((objPtr)->typePtr == &tclWideIntType)                         \
        ? (*(wideIntPtr) = (objPtr)->internalRep.wideValue, TCL_OK) :   \
    ((objPtr)->typePtr == &tclIntType)                                  \
        ? (*(wideIntPtr) = (Tcl_WideInt)                                \
                ((objPtr)->internalRep.longValue), TCL_OK) :            \
        Tcl_GetWideIntFromObj((interp), (objPtr), (wideIntPtr)))

Definition at line 426 of file tclExecute.c.

Referenced by TclExecuteByteCode(), and TclIncrObj().

#define TRACE (  ) 

Definition at line 319 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define TRACE_APPEND (  ) 

Definition at line 320 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define TRACE_WITH_OBJ ( a,
objPtr   ) 

Definition at line 321 of file tclExecute.c.

Referenced by TclExecuteByteCode().

#define VarHashFindVar ( tablePtr,
key   )     VarHashCreateVar((tablePtr), (key), NULL)

#define VarHashGetValue ( hPtr   )     ((Var *) ((char *)hPtr - TclOffset(VarInHash, entry)))

Definition at line 168 of file tclExecute.c.

Referenced by Tcl_ArrayObjCmd().

#define WALLOCALIGN   (TCL_ALLOCALIGN/sizeof(Tcl_Obj *))

Definition at line 844 of file tclExecute.c.

#define WriteTraced ( varPtr   )     ((varPtr)->flags & VAR_TRACED_WRITE)

Referenced by TclExecuteByteCode().


Function Documentation

void TclDeleteExecEnv ( ExecEnv eePtr  ) 

int TclExecuteByteCode ( Tcl_Interp interp,
ByteCode codePtr 
)

Definition at line 1578 of file tclExecute.c.

References ASYNC_CHECK_COUNT_MASK, ByteCode::auxDataArrayPtr, ExceptionRange::breakOffset, Tcl_Obj::bytes, CACHE_STACK_INFO, CATCH_EXCEPTION_RANGE, ExceptionRange::catchOffset, ckalloc, ckfree, ckrealloc, AuxData::clientData, CmdFrame::cmd, ExceptionRange::codeOffset, ByteCode::codeStart, ByteCode::compileEpoch, ExceptionRange::continueOffset, CURR_DEPTH, CmdFrame::data, DECACHE_STACK_INFO, DICT_PATH_READ, mp_int::dp, ERR_ALREADY_LOGGED, ForeachInfo::firstValueTemp, ByteCode::flags, CmdFrame::framePtr, GetNumberFromObj, JumptableInfo::hashTable, INST_ADD, INST_APPEND_ARRAY1, INST_APPEND_ARRAY4, INST_APPEND_ARRAY_STK, INST_APPEND_SCALAR1, INST_APPEND_SCALAR4, INST_APPEND_STK, INST_BEGIN_CATCH4, INST_BITAND, INST_BITNOT, INST_BITOR, INST_BITXOR, INST_BREAK, INST_CALL_BUILTIN_FUNC1, INST_CALL_FUNC1, INST_CONCAT1, INST_CONTINUE, INST_DICT_APPEND, INST_DICT_DONE, INST_DICT_FIRST, INST_DICT_GET, INST_DICT_INCR_IMM, INST_DICT_LAPPEND, INST_DICT_NEXT, INST_DICT_SET, INST_DICT_UNSET, INST_DICT_UPDATE_END, INST_DICT_UPDATE_START, INST_DIV, INST_DONE, INST_DUP, INST_END_CATCH, INST_EQ, INST_EVAL_STK, INST_EXIST_ARRAY, INST_EXIST_ARRAY_STK, INST_EXIST_SCALAR, INST_EXIST_STK, INST_EXPAND_START, INST_EXPAND_STKTOP, INST_EXPON, INST_EXPR_STK, INST_FOREACH_START4, INST_FOREACH_STEP4, INST_GE, INST_GT, INST_INCR_ARRAY1, INST_INCR_ARRAY1_IMM, INST_INCR_ARRAY_STK, INST_INCR_ARRAY_STK_IMM, INST_INCR_SCALAR1, INST_INCR_SCALAR1_IMM, INST_INCR_SCALAR_STK, INST_INCR_SCALAR_STK_IMM, INST_INCR_STK, INST_INCR_STK_IMM, INST_INVOKE_EXPANDED, INST_INVOKE_STK1, INST_INVOKE_STK4, INST_JUMP1, INST_JUMP4, INST_JUMP_FALSE1, INST_JUMP_FALSE4, INST_JUMP_TABLE, INST_JUMP_TRUE1, INST_JUMP_TRUE4, INST_LAND, INST_LAPPEND_ARRAY1, INST_LAPPEND_ARRAY4, INST_LAPPEND_ARRAY_STK, INST_LAPPEND_SCALAR1, INST_LAPPEND_SCALAR4, INST_LAPPEND_STK, INST_LE, INST_LIST, INST_LIST_IN, INST_LIST_INDEX, INST_LIST_INDEX_IMM, INST_LIST_INDEX_MULTI, INST_LIST_LENGTH, INST_LIST_NOT_IN, INST_LIST_RANGE_IMM, INST_LNOT, INST_LOAD_ARRAY1, INST_LOAD_ARRAY4, INST_LOAD_ARRAY_STK, INST_LOAD_SCALAR1, INST_LOAD_SCALAR4, INST_LOAD_SCALAR_STK, INST_LOAD_STK, INST_LOR, INST_LSET_FLAT, INST_LSET_LIST, INST_LSHIFT, INST_LT, INST_MOD, INST_MULT, INST_NEQ, INST_NSUPVAR, INST_OVER, INST_POP, INST_PUSH1, INST_PUSH4, INST_PUSH_RESULT, INST_PUSH_RETURN_CODE, INST_PUSH_RETURN_OPTIONS, INST_REGEXP, INST_RETURN_IMM, INST_RETURN_STK, INST_REVERSE, INST_RSHIFT, INST_START_CMD, INST_STORE_ARRAY1, INST_STORE_ARRAY4, INST_STORE_ARRAY_STK, INST_STORE_SCALAR1, INST_STORE_SCALAR4, INST_STORE_SCALAR_STK, INST_STORE_STK, INST_STR_CMP, INST_STR_EQ, INST_STR_INDEX, INST_STR_LEN, INST_STR_MATCH, INST_STR_NEQ, INST_SUB, INST_SYNTAX, INST_TRY_CVT_TO_NUMERIC, INST_UMINUS, INST_UPLUS, INST_UPVAR, INST_VARIABLE, Tcl_Obj::internalRep, iPtr, LAST_BUILTIN_FUNC, DictUpdateInfo::length, Tcl_Obj::length, CmdFrame::level, CmdFrame::line, Var::linkPtr, LLONG_MIN, localName, Tcl_Obj::longValue, ForeachInfo::loopCtTemp, ByteCode::maxExceptDepth, ByteCode::maxStackDepth, mp_add, mp_and, mp_clear, mp_cmp, mp_cmp_d, mp_copy, mp_div, mp_div_2d, MP_EQ, mp_expt_d, MP_GT, mp_init, mp_iszero, MP_LT, mp_mod_2d, mp_mul, mp_mul_2d, mp_neg, mp_or, mp_sub, mp_sub_d, mp_xor, MP_ZPOS, Tcl_ObjType::name, NEXT_INST_F, NEXT_INST_V, CmdFrame::nextPtr, CmdFrame::nline, ByteCode::nsEpoch, BuiltinFunc::numArgs, ForeachInfo::numLists, ForeachVarList::numVars, O2S, OBJ_AT_DEPTH, OBJ_AT_TOS, OBJ_UNDER_TOS, ByteCode::objArrayPtr, Var::objPtr, Overflowing, POP_OBJECT, PTR2INT, PUSH_OBJECT, ReadTraced, Tcl_Obj::refCount, Namespace::resolverEpoch, mp_int::sign, ByteCode::source, Var::tablePtr, Tcl_AddObjErrorInfo(), TCL_APPEND_VALUE, Tcl_AppendObjToObj(), Tcl_AppendResult(), Tcl_AppendToObj(), Tcl_AsyncInvoke(), TCL_BREAK, TCL_BYTECODE_PRECOMPILED, TCL_CONTINUE, Tcl_DecrRefCount, Tcl_DictObjDone(), Tcl_DictObjFirst(), Tcl_DictObjGet(), Tcl_DictObjNext(), Tcl_DictObjPut(), Tcl_DictObjPutKeyList(), Tcl_DictObjRemove(), Tcl_DictObjRemoveKeyList(), Tcl_DictObjSize(), TCL_DTRACE_INST_LAST, TCL_DTRACE_INST_NEXT, Tcl_DuplicateObj(), TCL_ERROR, Tcl_EvalEx(), Tcl_ExprObj(), Tcl_FindHashEntry, Tcl_GetBignumFromObj(), Tcl_GetByteArrayFromObj(), Tcl_GetCharLength(), Tcl_GetDoubleFromObj(), Tcl_GetHashValue, Tcl_GetObjResult(), Tcl_GetRegExpFromObj(), Tcl_GetReturnOptions(), Tcl_GetUniChar(), Tcl_GetUnicode(), Tcl_GetUnicodeFromObj(), Tcl_GetWideIntFromObj(), Tcl_IncrRefCount, Tcl_InitBignumFromDouble(), Tcl_InvalidateStringRep(), Tcl_IsShared, TCL_LEAVE_ERR_MSG, Tcl_LimitCheck(), TCL_LIST_ELEMENT, Tcl_ListObjAppendElement(), Tcl_ListObjIndex(), TCL_LOCATION_BC, TCL_LOCATION_PREBC, Tcl_LogCommandInfo(), TCL_NAMESPACE_ONLY, Tcl_NewBignumObj(), Tcl_NewByteArrayObj(), Tcl_NewIntObj(), Tcl_NewListObj(), Tcl_NewStringObj(), Tcl_NewWideIntObj(), TCL_NUMBER_BIG, TCL_NUMBER_DOUBLE, TCL_NUMBER_LONG, TCL_NUMBER_NAN, TCL_NUMBER_WIDE, TCL_OK, Tcl_Panic(), Tcl_RegExpExecObj(), Tcl_ResetResult(), TCL_RETURN, Tcl_SetBignumObj(), Tcl_SetErrorCode(), Tcl_SetLongObj(), Tcl_SetObjResult(), Tcl_SetReturnOptions(), Tcl_SetWideIntObj(), Tcl_StringCaseMatch(), Tcl_TakeBignumFromObj(), TCL_TRACE_READS, Tcl_UniCharToUtf(), TCL_UTF_MAX, TclAsyncReady, TclBignumToDouble(), TclBNInitBignumFromLong(), TclBNInitBignumFromWideInt(), TclByteArrayMatch(), tclByteArrayType, TclCleanupVar(), TclCompEvalObj(), TclDecrRefCount, tclEmptyStringRep, TclEvalObjvInternal(), TclExprFloatError(), TclFreeIntRep, TclGetBooleanFromObj, TclGetInt1AtPtr, TclGetInt4AtPtr, TclGetIntForIndexM, TclGetNamespaceFromObj(), TclGetString, TclGetStringFromObj, TclGetUInt1AtPtr, TclGetUInt4AtPtr, TclGetWideIntFromObj, TclIncrObj(), TclInvalidateStringRep, TclIsInfinite, TclIsNaN, TclIsVarArray, TclIsVarDirectModifyable, TclIsVarDirectModifyable2, TclIsVarDirectReadable, TclIsVarDirectReadable2, TclIsVarDirectWritable, TclIsVarInHash, TclIsVarLink, TclIsVarTraced, TclIsVarUndefined, TclLimitExceeded, TclLimitReady, TclLindexFlat(), TclLindexList(), TclListObjCopy(), TclListObjGetElements, TclListObjLength, tclListType, TclLookupArrayElement(), TclLsetFlat(), TclLsetList(), TclNewDoubleObj, TclNewIntObj, TclNewLongObj, TclNewObj, TclObjCallVarTraces(), TclObjGetFrame(), TclObjLookupVarEx(), TclObjUnsetVar2(), TclPrintInstruction(), TclPrintObject(), TclProcessReturn(), TclPtrGetVar(), TclPtrIncrObjVar(), TclPtrObjMakeUpvar(), TclPtrSetVar(), TclpUtfNcmp2(), TclSetDoubleObj, TclSetLongObj, TclSetVarLink, TclSetVarNamespaceVar, TclSetWideIntObj, TclStackFree(), tclStringType, TclTraceDictPath(), TclUniCharMatch(), TclUniCharNcmp, CmdFrame::tebc, TRACE, TRACE_APPEND, TRACE_WITH_OBJ, Tcl_Obj::twoPtrValue, ExceptionRange::type, CmdFrame::type, Tcl_Obj::typePtr, mp_int::used, Tcl_Obj::value, Var::value, VarHashFindVar, VarHashRefCount, ForeachVarList::varIndexes, DictUpdateInfo::varIndices, ForeachInfo::varLists, VOID, and WriteTraced.

Referenced by Tcl_ExprObj(), TclCompEvalObj(), and TclObjInterpProcCore().

void TclExprFloatError ( Tcl_Interp interp,
double  value 
)

void TclFinalizeExecution ( void   ) 

Definition at line 830 of file tclExecute.c.

References Tcl_MutexLock, Tcl_MutexUnlock, and TclFinalizeAuxDataTypeTable().

Referenced by Tcl_Finalize().

const char* TclGetSrcInfoForCmd ( Interp iPtr,
int *  lenPtr 
)

Definition at line 7551 of file tclExecute.c.

References Interp::cmdFramePtr, CmdFrame::data, and CmdFrame::tebc.

void* TclStackRealloc ( Tcl_Interp interp,
void *  ptr,
int  numBytes 
)



Generated on Wed Mar 12 12:18:30 2008 by  doxygen 1.5.1