summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.y2
-rw-r--r--test/ruby/test_parse.rb10
2 files changed, 8 insertions, 4 deletions
diff --git a/parse.y b/parse.y
index 38eab9c7a5..7f7a4d06c8 100644
--- a/parse.y
+++ b/parse.y
@@ -404,6 +404,7 @@ static NODE *literal_concat(struct parser_params*,NODE*,NODE*,const YYLTYPE*);
static NODE *new_evstr(struct parser_params*,NODE*,const YYLTYPE*);
static NODE *evstr2dstr(struct parser_params*,NODE*);
static NODE *splat_array(NODE*);
+static void mark_lvar_used(struct parser_params *p, NODE *rhs);
static NODE *call_bin_op(struct parser_params*,NODE*,ID,NODE*,const YYLTYPE*,const YYLTYPE*);
static NODE *call_uni_op(struct parser_params*,NODE*,ID,const YYLTYPE*,const YYLTYPE*);
@@ -3150,6 +3151,7 @@ f_marg : f_norm_arg
{
/*%%%*/
$$ = assignable(p, $1, 0, &@$);
+ mark_lvar_used(p, $$);
/*% %*/
/*% ripper: assignable(p, $1) %*/
}
diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb
index ff62aef785..b63f170981 100644
--- a/test/ruby/test_parse.rb
+++ b/test/ruby/test_parse.rb
@@ -961,10 +961,12 @@ x = __ENCODING__
assert_warning(/assigned but unused variable/) {o.instance_eval("def foo; a=1; nil; end")}
assert_warning(/assigned but unused variable/) {o.instance_eval("def bar; a=1; a(); end")}
a = "\u{3042}"
- assert_warning(/#{a}/) {o.instance_eval("def foo; #{a}=1; nil; end")}
- o = Object.new
- assert_warning(/assigned but unused variable/) {o.instance_eval("def foo; tap {a=1; a()}; end")}
- assert_warning('') {o.instance_eval("def bar; a=a=1; nil; end")}
+ assert_warning(/#{a}/) {o.instance_eval("def foo0; #{a}=1; nil; end")}
+ assert_warning(/assigned but unused variable/) {o.instance_eval("def foo1; tap {a=1; a()}; end")}
+ assert_warning('') {o.instance_eval("def bar1; a=a=1; nil; end")}
+ assert_warning(/assigned but unused variable/) {o.instance_eval("def bar2; a, = 1, 2; end")}
+ assert_warning('') {o.instance_eval("def marg1(a); nil; end")}
+ assert_warning('') {o.instance_eval("def marg2((a)); nil; end")}
end
def test_named_capture_conflict