[Toybox] [PATCH] Fix the operator precedence in expr.
Andy Chu
andychup at gmail.com
Wed Mar 16 16:44:25 PDT 2016
On Wed, Mar 16, 2016 at 3:00 PM, Rob Landley <rob at landley.net> wrote:
> I've already started cleanup on this command, but I'll integrate this
> with what I've got.
>
> Sounds like fun. I hope to have this done and promoted for the next
> release. (Ballpark end of April.)
OK great! I'd like to see the diff for future reference -- I've
looked through your cleanup page. Perhaps you can apply at least the
first 2 patches verbatim (as long as there are no egregious errors),
and then your cleanup commits, so I can just look at the history?
I wanted to bring up the one TODO in the patches... syntax_error()
defaults to printing "syntax error", but the caller passes a more
detailed error message, which can be enabled with "if (1)".
If it were my choice I would always use the verbose error message and
get rid of the if. I added the option for the cryptic message because
I thought that was the style of the project -- a smaller vocabulary
and less space for constant strings (?).
But if I have to debug this code again, I much prefer each error
message to have a unique message, so you don't have to go into a
debugger to see what happened (and also for general usability). In
fact I should have probably tested each of the syntax_error() calls
like this:
testing "error: missing )" "expr \( 5 + 5 2>&1" "expr: Expected )" ...
To illustrate the advantages, I think you wouldn't have been mystified
in your blog post about this behavior if GNU expr had better error
messages:
$ expr + 1
1
$ expr - 1
expr: syntax error
$ expr +
expr: syntax error
$ expr -
-
I would have written this as:
$ expr - 1
expr: expected atom, got operator -
$ expr +
expr: escape requires operand
That would make it clearer that + is both a unary and binary operator,
while - is only a binary operator.
thanks,
Andy
Andy
More information about the Toybox
mailing list