[#25936] [Bug:1.9] [rubygems] $LOAD_PATH includes bin directory — Nobuyoshi Nakada <nobu@...>

Hi,

10 messages 2009/10/05

[#25943] Disabling tainting — Tony Arcieri <tony@...>

Would it make sense to have a flag passed to the interpreter on startup that

16 messages 2009/10/05

[#26028] [Bug #2189] Math.atanh(1) & Math.atanh(-1) should not raise an error — Marc-Andre Lafortune <redmine@...>

Bug #2189: Math.atanh(1) & Math.atanh(-1) should not raise an error

14 messages 2009/10/10

[#26222] [Bug #2250] IO::for_fd() objects' finalization dangerously closes underlying fds — Mike Pomraning <redmine@...>

Bug #2250: IO::for_fd() objects' finalization dangerously closes underlying fds

11 messages 2009/10/22

[#26244] [Bug #2258] Kernel#require inside rb_require() inside rb_protect() inside SysV context fails — Suraj Kurapati <redmine@...>

Bug #2258: Kernel#require inside rb_require() inside rb_protect() inside SysV context fails

24 messages 2009/10/22

[#26361] [Feature #2294] [PATCH] ruby_bind_stack() to embed Ruby in coroutine — Suraj Kurapati <redmine@...>

Feature #2294: [PATCH] ruby_bind_stack() to embed Ruby in coroutine

42 messages 2009/10/27

[#26371] [Bug #2295] segmentation faults — tomer doron <redmine@...>

Bug #2295: segmentation faults

16 messages 2009/10/27

[ruby-core:26163] [Bug #2232] Ripper Handling of multiple left hand side [PATCH]

From: Andy Keep <redmine@...>
Date: 2009-10-19 15:23:23 UTC
List: ruby-core #26163
Bug #2232: Ripper Handling of multiple left hand side [PATCH]
http://redmine.ruby-lang.org/issues/show/2232

Author: Andy Keep
Status: Open, Priority: Normal
Category: ext, Target version: 1.9.x
ruby -v: ruby 1.9.2dev (2009-10-19 trunk 25401) [x86_64-darwin10.0.0]

Right now ripper doesn't properly handling multiple assignment when a variable follows a starred variable in a multiple assignment.

For instance say I have:
>> a, *b, c = [1, 2, 3, 4]
=> [1, 2, 3, 4]
>> a
=> 1
>> b
=> [2, 3]
>> c
=> 4
>> 

Unfortunately Ripper parses "a, *b, c = [1, 2, 3, 4]" as:

>> Ripper.sexp "a, *b, c = [1, 2, 3, 4]"
=> [:program, [[:massign, [:mlhs_add_star, [[:ident, "a", [1, 0]]], [:ident, "b", [1, 4]]], [:array, [[:int, "1", [1, 12]], [:int, "2", [1, 15]], [:int, "3", [1, 18]], [:int, "4", [1, 21]]]]]]]

Note that "c" is completely missing above.

The cuprit seems to be:

		| mlhs_head tSTAR mlhs_node ',' mlhs_post
		    {
		    /*%%%*/
			$$ = NEW_MASGN($1, NEW_POSTARG($3,$5));
		    /*%
			$$ = mlhs_add_star($1, $3);
		    %*/
		    }

Where the mlhs_post is ignored.

I've got a patch that adds the line:

			$$ = mlhs_add($1, $5);

(and changes the line above to $1 = mlhs_add_star($1, $3))

With this change we get a, b and c, but I'm not sure if my approach is the right one.

Anyway, see included patch.


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next