This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8057

-- gerrit

commit b310a992403dec562b37792817ba1dee15e9a6c2
Author: Antonio Borneo <antonio.bor...@foss.st.com>
Date:   Sun Aug 6 12:38:54 2023 +0200

    helper/command: pass command arguments also as Jim_Obj
    
    Some OpenOCD command gets fragment of TCL scripts as command-line
    argument, fragments that will be kept and executed later on.
    E.g. the command 'configure' gets the body of an OpenOCD event:
            $TARGET configure -event halted {TCL code}
    
    These commands store the argument as a Jim_Obj and pass it to the
    jimtcl interpreter when the TCL fragment has to be executed.
    Using Jim_Obj as storage is relevant to let the jimtcl interpreter
    to recover extra info of the TCL fragment, like the file-name and
    the line-number that contain the fragment, that will be printed
    out in case of run-time errors.
    
    While converting the commands to COMMAND_HANDLER, we should avoid
    storing the argument as C strings otherwise we will loose precious
    info in case of run-time errors making challenging the debugging
    of such TCL fragments.
    
    Extend the struct command_invocation to contain the array that
    points to the Jim_Obj of the command arguments.
    This will be used while converting commands to COMMAND_HANDLER.
    
    Change-Id: If37c5f20e9a71349f77ba1571baf1e6778e28aa5
    Signed-off-by: Antonio Borneo <antonio.bor...@foss.st.com>

diff --git a/src/helper/command.c b/src/helper/command.c
index 57db2adc15..a775c730b8 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -511,6 +511,7 @@ static int exec_command(Jim_Interp *interp, struct 
command_context *context,
                .name = c->name,
                .argc = argc - 1,
                .argv = words + 1,
+               .jimtcl_argv = argv + 1,
        };
 
        cmd.output = Jim_NewEmptyStringObj(context->interp);
diff --git a/src/helper/command.h b/src/helper/command.h
index 42cb9cb7d8..dc45070420 100644
--- a/src/helper/command.h
+++ b/src/helper/command.h
@@ -79,6 +79,7 @@ struct command_invocation {
        const char *name;
        unsigned argc;
        const char **argv;
+       Jim_Obj * const *jimtcl_argv;
        Jim_Obj *output;
 };
 
@@ -153,6 +154,11 @@ void *jimcmd_privdata(Jim_Cmd *cmd);
  * rather than accessing the variable directly.  It may be moved.
  */
 #define CMD_ARGV (cmd->argv)
+/**
+ * Use this macro to access the jimtcl arguments for the command being
+ * handled, rather than accessing the variable directly.  It may be moved.
+ */
+#define CMD_JIMTCL_ARGV (cmd->jimtcl_argv)
 /**
  * Use this macro to access the name of the command being handled,
  * rather than accessing the variable directly.  It may be moved.

-- 

Reply via email to