Bug #10436 ยป ripper-block_dup_check-10436.patch
| ext/ripper/lib/ripper/sexp.rb | ||
|---|---|---|
|
end
|
||
|
class SexpBuilder < ::Ripper #:nodoc:
|
||
|
def error?
|
||
|
super || (defined?(@error) && @error)
|
||
|
end
|
||
|
private
|
||
|
def dedent_element(e, width)
|
||
| ... | ... | |
|
val
|
||
|
end
|
||
|
def on_method_add_block(*args)
|
||
|
if ((args[0][0] == :command && args[0][-1][0] == :args_add_block) ||
|
||
|
(args[0][0] == :method_add_arg && args[0][-1][0] == :arg_paren && args[0][-1][1][0] == :args_add_block)) &&
|
||
|
(args[1][0] == :brace_block || args[1][0] == :do_block)
|
||
|
@error = true
|
||
|
end
|
||
|
|
||
|
args.unshift :method_add_block
|
||
|
args
|
||
|
end
|
||
|
events = private_instance_methods(false).grep(/\Aon_/) {$'.to_sym}
|
||
|
(PARSER_EVENTS - events).each do |event|
|
||
|
module_eval(<<-End, __FILE__, __LINE__ + 1)
|
||
| test/ripper/test_sexp.rb | ||
|---|---|---|
|
assert_nil Ripper.sexp("/+/")
|
||
|
end
|
||
|
def test_block_dup_check
|
||
|
assert_nil Ripper.sexp("m(&nil) {}")
|
||
|
assert_nil Ripper.sexp("m(1, &nil) {}")
|
||
|
assert_nil Ripper.sexp("m(&nil) do end")
|
||
|
assert_nil Ripper.sexp("m(1, **h, &nil) do end")
|
||
|
assert_nil Ripper.sexp("m &nil do end")
|
||
|
assert_nil Ripper.sexp("m 1, &nil do end")
|
||
|
assert_nil Ripper.sexp("m 1, *a, **kw, &nil do end")
|
||
|
end
|
||
|
def test_regexp_content
|
||
|
sexp = Ripper.sexp('//')
|
||
|
assert_nil search_sexp(:@tstring_content, search_sexp(:regexp_literal, sexp))
|
||