Re: RFC: "set" command with 2 arguments instead of one?

Doug Evans
2014-11-24T05:39:04Z

On Sun, Nov 23, 2014 at 1:53 AM, Joel Brobecker <brobecker@adacore.com> wrote:
>> > It proposes the introduction of a couple of commands, one to dump
>> > the contents of the of the bounds table, and one to set the bounds
>> > for any given address. Since those commands are MPX-specific,
>> > I would like to have them prefixed somehow. But the beyond the
>> > fact that I'd like to have them prefixed, I was wondering if
>> > set/show commands could be used for that. Eg:
>> >
>> > show mpx bound ADDR
>> > set mpx bound ADDR LBOUND UBOUND
>> >
>> > The reason why I am asking for comments is that the "set" command
>> > above has a syntax which is slightly unusual for "set" commands
>> > in the sense that "set" commands nearly always only have one argument,
>> > whereas it has 3 in this case.
>>
>> How do you parse the arguments if they are arbitrary expressions?
>
> I think that this is a question which is othogonal to the question
> I am asking. If you need a command that takes multiple arguments,
> and some of these arguments are going to be arbitrary expressions,
> you're going to have a parsing problem regardless of the name of
> the command you're choosing. And each command, regardless of the
> name of the command they decide on, can determine how they handle it.
> For instance, they could use quoting, a la shell.
>
> But in the particular case that interests us, there are no arbitrary
> expressions as of yet.

This feels like a case where we need to at least think about some
future-proofing.
One way some commands separate expressions is with commas.
I'm not fond of optional commas (setting aside the thread on
info macro -at LOCATION,).
IOW, if it turns out that we want to use commas down the road
to separate expressions here, then I'd prefer the commas
be required today.
E.g., set mpx bound ADDR, LBOUND, UBOUND

As for how to process multiple arguments to a "set" command,
one way would be to stage the value in a string parameter,
and then have a set handler post-process the result.