Skip to content

Commit

Permalink
Parse stabby lambda args same as Kernel#lambda
Browse files Browse the repository at this point in the history
[Fixes #186]

Prior to this change, stabby lambda parsed empty argument list
as an integer zero.

    s(:iter, s(:call, nil, :lambda), 0)

After this change, stabby lambda parses empty argument list
as `s(:args)`

    s(:iter, s(:call, nil, :lambda), s(:args))

This fixes an inconsistency between stabby lambda and
Kernel#lambda, and will simplify sexp processors like ruby2ruby.

Will require a change to SexpProcessor's tests.
  • Loading branch information
jaredbeck committed Apr 24, 2015
1 parent adeceeb commit 95c1cfb
Show file tree
Hide file tree
Showing 4 changed files with 3 additions and 9 deletions.
2 changes: 0 additions & 2 deletions lib/ruby19_parser.y
Expand Up @@ -1382,8 +1382,6 @@ rule
lpar, args, body = val
lexer.lpar_beg = lpar
args = 0 if args == s(:args)
call = new_call nil, :lambda
result = new_iter call, args, body
}
Expand Down
2 changes: 0 additions & 2 deletions lib/ruby20_parser.y
Expand Up @@ -1443,8 +1443,6 @@ opt_block_args_tail: tCOMMA block_args_tail
lpar, args, body = val
lexer.lpar_beg = lpar
args = 0 if args == s(:args)
call = new_call nil, :lambda
result = new_iter call, args, body
self.env.unextend
Expand Down
2 changes: 0 additions & 2 deletions lib/ruby21_parser.y
Expand Up @@ -1446,8 +1446,6 @@ opt_block_args_tail: tCOMMA block_args_tail
lpar, args, body = val
lexer.lpar_beg = lpar
args = 0 if args == s(:args)
call = new_call nil, :lambda
result = new_iter call, args, body
self.env.unextend
Expand Down
6 changes: 3 additions & 3 deletions test/test_ruby_parser.rb
Expand Up @@ -2015,9 +2015,9 @@ def test_call_assoc_new
assert_parse rb, pt
end

def test_do_lambda
def test_do_lambda_no_args
rb = "->() do end"
pt = s(:iter, s(:call, nil, :lambda), 0)
pt = s(:iter, s(:call, nil, :lambda), s(:args))

assert_parse rb, pt
end
Expand Down Expand Up @@ -3032,7 +3032,7 @@ def test_index_0
end

def test_lambda_do_vs_brace
pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), 0))
pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), s(:args)))

rb = "f ->() {}"
assert_parse rb, pt
Expand Down

0 comments on commit 95c1cfb

Please sign in to comment.