----------------------------------------
> Date: Wed, 3 Nov 2010 11:35:03 +0900
> From: justincollins / ucla.edu
> Subject: Re: Strange whitespace parsing behavior on Ruby 1.8.7 (patchlevel 249/302)
> To: ruby-talk / ruby-lang.org
>
> Ehsanul Hoque wrote:
> >
> >>>>> An issue pops up when I use a method's integer return value in a function argument while performing arithmetic on that value. Then missing whitespace between the arithmetical operator and the second argument can causeandom errors, but only if there is whitespace preceding the operator. Ion't want to rush to judgement and call this a bug, but it certainly seems like one, hidden till now because you have have formatting that's slightly ugly for the error to turn up. Here's an irb session that demonstrates the issue:
> >>>>> irb(main):062:0* x = '123456'=> "123456"irb(main):063:0> x.slice(1, x.size -2)SyntaxError: compile error(irb):63: syntax error, unexpected ')', expecting kDO_BLOCK from (irb):63 from :0irb(main):064:0> x.slice(1, x.size - 2)=> "2345"irb(main):065:0> xslice(1, x.size-2)=> "2345"irb(main):066:0> x.slice(1, x.size -2)SyntaxError: compile error(irb):66: syntax error, unexpected ')', expecting kDO_BLOCK from (irb):66 from :0irb(main):067:0> x[x.size -3,1]ArgumentError: wrong number of arguments (2 for 0) from (irb):67:in `size' from (irb):67 from :0irb(main):068:0>[x.size - 3,1]=> "4"irb(main):069:0> def ok(a,b)irb(main):070:1> end=> nilirb(main):071:0> ok(x.size +3,4)ArgumentError: wrong number of arguments (2 for 0) from (irb):71:in `size' from (irb):71 from :0irb(main):072:0> ok(4,x.size +3)SyntaxError: compile error(irb):72: syntax error, unexpected ')', expecting kDO_BLOCK from
> >>>>>
> >> (irb):72 from :0irb(main):074:0> ok(4,x.size + 3)=> nil
> >>
> >>>> Can you repost with proper indentation and line wrapping? Guessing
> >>>> from your text I assume you might have fallen into a unary / binary
> >>>> operator ambiguity.
> >>>>
> >>> Sorry about that, Hotmail's "rich text" formatting messed it up I believe Here it goes again with plain text:
> >>> irb(main):062:0* x = '123456'=> "123456"irb(main):063:0> x.slice(1, xsize -2)SyntaxError: compile error(irb):63: syntax error, unexpected ')', expecting kDO_BLOCK from (irb):63 from :0 irb(main):064:0> x.slice(1, x.size - 2)=> "2345"irb(main):065:0> x.slice(1, x.size-2)=> "2345"irb(main):066:0> x.slice(1, x.size -2)SyntaxError: compile error(irb):66: syntax error, unexpected ')', expecting kDO_BLOCK from (irb):66 from :0 irb(main):067:0> x[x.size -3,1]ArgumentError: wrong number of arguments (2 for 0) from (irb):67:in `size' from (irb):67 from :0 irb(main):068:0> x[x.size - 3,1]=> "4"irb(main):069:0> def ok(a,b)irb(main):070:1> end=> nilirb(main):071:0> ok(x.size +3,4)ArgumentError: wrong number of arguments (2 for 0) from (irb):71:in `size' from (irb):71 from :0 irb(main):072:0> ok(4,x.size +3)SyntaxError: compile error(irb):72: syntax error, unexpected ')', expecting kDO_BLOCK
> >>>
> >> from (irb):72 from :0 irb(main):074:0> ok(4,x.size + 3)=> nil
> >>
> >>> Insert mode
> >>>
> >> Not really... :)
> >>
> >> robert
> >>
> > You know what, I should probably just use pastie. Here you go: http://pastie.org/1267606
> >
> >
> >
> > Insert mode
> >
>
> Robert was right.
>
> ok(x.size +3,4)
>
>
> is parsed as
>
>
> ok(x.size(+3, 4))
>
>
> while you seem to be expecting
>
>
> ok((x.size + 3), 4))
>
>
> Similarly with all your other examples.
>
> -Justin


That makes sense. But the inconsistency between the different behaviors given just a small difference in whitespace is still quite off-putting.

Also how is this line parsed?:

x.slice(1, x.size -2)