[#1026] Is this a bug? — Dave Thomas <Dave@...>

18 messages 2000/01/03

[#1084] Infinite loop — Dave Thomas <Dave@...>

17 messages 2000/01/11

[#1104] The value of while... — Dave Thomas <Dave@...>

24 messages 2000/01/11

[ruby-talk:01177] Re: Possible bug in ruby-man-1.4

From: Dave Thomas <Dave@...>
Date: 2000-01-25 04:57:26 UTC
List: ruby-talk #1177
matz@netlab.co.jp (Yukihiro Matsumoto) writes:

> Hi,
> 
> In message "[ruby-talk:01172] Re: Possible bug in ruby-man-1.4"
>     on 00/01/24, Huayin Wang <wang@rjka.com> writes:
> 
> |does this have anything to do with the following?
> |
> |irb(main):001:0> -2 ** 2
> |-4
> 
> Yes, but precedence of ** operater is usually higher than unary minus
> operator among programming languages, e.g.
> 
>   % perl -le 'print -2**2'
>   -4
>   % python -c 'print -2**2'
>   -4
>   % ruby -e 'p -2**2'
>   -4
>   % ruby.new -e 'p -2**2'
>   4

Now there's a problem ;-(

Maybe the answer is to get rid of the concept of negative numeric
literals, so there's never any ambiguity as to whether -2 is a literal 
of a method call? Then, as an optimization, the parser could notice
<Fixnum>.-@ terminal pairs and replace them with a negated
Fixnum. That way

    (-2)**2 would be parsed as    **
                                  /\
                                 /  \
                                -@  2:Fixnum
                               /
                              /  
                             2:Fixnum

   and optimized into             **
                                  /\
                                 /  \
                         -2:Fixnum  2:Fixnum


Dave














                   




In This Thread