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