This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug cli/20559] "eval" command inside user commands misses $arg0...$arg9 / $argc substitution


https://sourceware.org/bugzilla/show_bug.cgi?id=20559

--- Comment #3 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Pedro Alves <palves@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=01770bbde902e075e524b518ac6c1087a4cc1cfb

commit 01770bbde902e075e524b518ac6c1087a4cc1cfb
Author: Pedro Alves <palves@redhat.com>
Date:   Fri Dec 2 19:17:13 2016 +0000

    Fix PR 20559 - "eval" command and $arg0...$arg9/$argc substitution

    It'd be handy to be able to iterate over command arguments in
    user-defined commands, in order to support optional arguments
    ($arg0..$argN).

    I thought I could make it work with "eval", but alas, it doesn't work
    currently.  E.g., with:

     define test
       set $i = 0
       while $i < $argc
         eval "print $arg%d", $i
         set $i = $i + 1
       end
     end

    we get:

     (gdb) test 1
     $1 = void
     (gdb) test 1 2 3
     $2 = void
     $3 = void
     $4 = void
     (gdb)

    The problem is that "eval" doesn't do user-defined command arguments
    substitution after expanding its own argument.  This patch fixes that,
    which makes the example above work:

     (gdb) test 1
     $1 = 1
     (gdb) test 1 2 3
     $2 = 1
     $3 = 2
     $4 = 3
     (gdb)

    New test included, similar the above, but also exercises expanding
    $argc.

    I think this is likely to simplify many scripts out there, so I'm
    adding an example to the manual and mentioning it in NEWS as well.

    gdb/ChangeLog:
    2016-12-02  Pedro Alves  <palves@redhat.com>

        PR cli/20559
        * NEWS: Mention "eval" expands user-defined command arguments.
        * cli/cli-script.c (execute_control_command): Adjust to rename.
        (insert_args): Rename to ...
        (insert_user_defined_cmd_args): ... this, and make extern.
        * cli/cli-script.h (insert_user_defined_cmd_args): New
        declaration.
        * printcmd.c: Include "cli/cli-script.h".
        (eval_command): Call insert_user_defined_cmd_args.

    gdb/doc/ChangeLog:
    2016-12-02  Pedro Alves  <palves@redhat.com>

        PR cli/20559
        * gdb.texinfo (Define): Add example of using "eval" to process a
        variable number of arguments.
        (Output) <eval>: Add anchor.

    gdb/testsuite/ChangeLog:
    2016-12-02  Pedro Alves  <palves@redhat.com>

        PR cli/20559
        * gdb.base/commands.exp (user_defined_command_args_eval): New
        procedure.
        (top level): Call it.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]