refactor script_command context grabbing
authorZachary T Welch <zw@superlucidity.net>
Sun, 22 Nov 2009 04:00:37 +0000 (20:00 -0800)
committerZachary T Welch <zw@superlucidity.net>
Wed, 25 Nov 2009 05:37:30 +0000 (21:37 -0800)
Move command context acquisition to current_command_context() for re-use.

src/helper/command.c

index b81d2d19591eba1249ab87413a3e8ee7d7571aa4..af481cd414f0e04b1eb7db0cadbdbf94af1c8118 100644 (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);