Subject: Re: [PATCH] userdiff: update Ada patterns

From: Adrian Johnson <[email-masked]>
Date: Mon, 03 Feb 2014 22:00:12 +1030

On 03/02/14 10:05, Jeff King wrote:
> On Sun, Feb 02, 2014 at 09:21:56PM +1030, Adrian Johnson wrote:
>> - Fix bug in word regex for numbers
>> -	 "|[0-9][-+0-9#_.eE]"
>> +	 "|[-+0-9#_.eE]+"
> 
> This makes "E" or "_" a number. Is that right?
> 
> I think the intent of the original was "starts with a digit, and then
> has one or more of these other things after it". You do not describe the
> bug, but I guess it would be that it does not match obvious things like
> "5". Should it be "zero or more" instead, like:
> 
>   [0-9][-+0-9#_.eE]*

Yes, the original was missing the '*' at the end. 

I changed it to be similar to the number regexes used by the other builtin
patterns which are of the form '[-+0-9#_.eE]+'.

> 
> ? Also, should -/+ be hoisted to the front?
> 
>   [-+]?[0-9][0-9#_.eE]*

The other builtins don't do this. But it is probably better to have
[-+]?[0-9] at the front.

> Again, I am just guessing, as I am not familiar enough with Ada.

Ada numbers have the form:

- integers and reals eg 123, 1.23, 1e-2 ('.' can not be first)
- a '_' may be used between digits to improve readability eg 123_456
- base n (2 <= n <= 16) is of the form n#digits# eg 16#FFEF#
- base n numbers can include a radix point and/or an exponent
  eg 16#FF12.8#e-2
- Ada is case insensitive

After having another look I noticed it was missing the hex characters.
The new number regex I am proposing is:

[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?

I kept exponents containing a +/- sign separate from the digits
to prevent things like '1+2' from matching. I'll send an updated patch.

> 
> -Peff
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to [email-masked]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>