Duane Ellis: "target as an [tcl] object" feature.

git-svn-id: svn://svn.berlios.de/openocd/trunk@975 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe
2008-09-01 07:20:21 +00:00
parent 3c8ef2c41b
commit ef1cfb2394
42 changed files with 1544 additions and 524 deletions

View File

@@ -111,6 +111,33 @@ static Jim_HashTableType JimVariablesHashTableType;
* Utility functions
* ---------------------------------------------------------------------------*/
static char *
jim_vasprintf( const char *fmt, va_list ap )
{
#ifndef HAVE_VASPRINTF
/* yucky way */
static char buf[2048];
vsnprintf( buf, sizeof(buf), fmt, ap );
/* garentee termination */
buf[sizeof(buf)-1] = 0;
#else
char *buf;
vasprintf( &buf, fmt, ap );
#endif
return buf;
}
static void
jim_vasprintf_done( void *buf )
{
#ifndef HAVE_VASPRINTF
(void)(buf);
#else
free(buf);
#endif
}
/*
* Convert a string to a jim_wide INTEGER.
* This function originates from BSD.
@@ -2019,6 +2046,22 @@ void Jim_AppendString(Jim_Interp *interp, Jim_Obj *objPtr, const char *str,
StringAppendString(objPtr, str, len);
}
void Jim_AppendString_sprintf( Jim_Interp *interp, Jim_Obj *objPtr, const char *fmt, ... )
{
char *buf;
va_list ap;
va_start( ap, fmt );
buf = jim_vasprintf( fmt, ap );
va_end(ap);
if( buf ){
Jim_AppendString( interp, objPtr, buf, -1 );
jim_vasprintf_done(buf);
}
}
void Jim_AppendObj(Jim_Interp *interp, Jim_Obj *objPtr,
Jim_Obj *appendObjPtr)
{
@@ -8726,17 +8769,31 @@ int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, int argc,
return retcode;
}
int Jim_Eval(Jim_Interp *interp, const char *script)
int Jim_Eval_Named(Jim_Interp *interp, const char *script, const char *filename, int lineno)
{
Jim_Obj *scriptObjPtr = Jim_NewStringObj(interp, script, -1);
int retval;
Jim_Obj *scriptObjPtr;
scriptObjPtr = Jim_NewStringObj(interp, script, -1);
Jim_IncrRefCount(scriptObjPtr);
if( filename ){
JimSetSourceInfo( interp, scriptObjPtr, filename, lineno );
}
retval = Jim_EvalObj(interp, scriptObjPtr);
Jim_DecrRefCount(interp, scriptObjPtr);
return retval;
}
int Jim_Eval(Jim_Interp *interp, const char *script)
{
return Jim_Eval_Named( interp, script, NULL, 0 );
}
/* Execute script in the scope of the global level */
int Jim_EvalGlobal(Jim_Interp *interp, const char *script)
{
@@ -9076,6 +9133,7 @@ void JimRegisterCoreApi(Jim_Interp *interp)
JIM_REGISTER_API(Alloc);
JIM_REGISTER_API(Free);
JIM_REGISTER_API(Eval);
JIM_REGISTER_API(Eval_Named);
JIM_REGISTER_API(EvalGlobal);
JIM_REGISTER_API(EvalFile);
JIM_REGISTER_API(EvalObj);
@@ -9102,6 +9160,7 @@ void JimRegisterCoreApi(Jim_Interp *interp)
JIM_REGISTER_API(NewStringObj);
JIM_REGISTER_API(NewStringObjNoAlloc);
JIM_REGISTER_API(AppendString);
JIM_REGISTER_API(AppendString_sprintf);
JIM_REGISTER_API(AppendObj);
JIM_REGISTER_API(AppendStrings);
JIM_REGISTER_API(StringEqObj);
@@ -12536,27 +12595,15 @@ int
Jim_SetResult_sprintf( Jim_Interp *interp, const char *fmt,... )
{
va_list ap;
#ifndef HAVE_VASPRINTF
/* yucky way */
char buf[2048];
va_start(ap,fmt);
vsnprintf( buf, sizeof(buf), fmt, ap );
va_end(ap);
/* garentee termination */
buf[2047] = 0;
Jim_SetResultString( interp, buf, -1 );
#else
char *buf;
va_start(ap,fmt);
vasprintf( &buf, fmt, ap );
buf = jim_vasprintf( fmt, ap );
va_end(ap);
if( buf ){
Jim_SetResultString( interp, buf, -1 );
free(buf);
jim_vasprintf_done(buf);
}
#endif
return JIM_OK;
}