refactor script_command context grabbing

Move command context acquisition to current_command_context() for re-use.
This commit is contained in:
Zachary T Welch 2009-11-21 20:00:37 -08:00
parent 60ba4641d6
commit 4c54c27da7
1 changed files with 16 additions and 12 deletions

View File

@ -108,11 +108,24 @@ static const char **script_command_args_alloc(
return words;
}
static struct command_context *current_command_context(void)
{
/* grab the command context from the associated data */
struct command_context *cmd_ctx = Jim_GetAssocData(interp, "context");
if (NULL == cmd_ctx)
{
/* Tcl can invoke commands directly instead of via command_run_line(). This would
* happen when the Jim Tcl interpreter is provided by eCos.
*/
cmd_ctx = global_cmd_ctx;
}
return cmd_ctx;
}
static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
/* the private data is stashed in the interp structure */
struct command *c;
struct command_context *context;
int retval;
/* DANGER!!!! be careful what we invoke here, since interp->cmdPrivData might
@ -136,16 +149,6 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
if (NULL == words)
return JIM_ERR;
/* grab the command context from the associated data */
context = Jim_GetAssocData(interp, "context");
if (context == NULL)
{
/* Tcl can invoke commands directly instead of via command_run_line(). This would
* happen when the Jim Tcl interpreter is provided by eCos.
*/
context = global_cmd_ctx;
}
/* capture log output and return it */
Jim_Obj *tclOutput = Jim_NewStringObj(interp, "", 0);
/* a garbage collect can happen, so we need a reference count to this object */
@ -153,7 +156,8 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
log_add_callback(tcl_output, tclOutput);
retval = run_command(context, c, (const char **)words, nwords);
struct command_context *cmd_ctx = current_command_context();
retval = run_command(cmd_ctx, c, (const char **)words, nwords);
log_remove_callback(tcl_output, tclOutput);