parse.y: preserve encodings

* parse.y (shadowing_lvar, warn_unused_var),
  (reg_named_capture_assign_iter): preserve encodings in warning
  messages.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-08-13 12:20:13 +00:00
parent 5129155a25
commit 02c86ce1ee
2 changed files with 17 additions and 12 deletions

23
parse.y
View File

@ -165,7 +165,7 @@ vtable_add(struct vtable *tbl, ID id)
if (!POINTER_P(tbl)) { if (!POINTER_P(tbl)) {
rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl); rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
} }
if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id)); if (VTBL_DEBUG) printf("vtable_add: %p, %"PRIsVALUE"\n", (void *)tbl, rb_id2str(id));
if (tbl->pos == tbl->capa) { if (tbl->pos == tbl->capa) {
tbl->capa = tbl->capa * 2; tbl->capa = tbl->capa * 2;
@ -8660,7 +8660,7 @@ gettable_gen(struct parser_params *parser, ID id)
case ID_CLASS: case ID_CLASS:
return NEW_CVAR(id); return NEW_CVAR(id);
} }
compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to get", rb_id2str(id));
return 0; return 0;
} }
#else /* !RIPPER */ #else /* !RIPPER */
@ -8678,7 +8678,7 @@ id_is_var_gen(struct parser_params *parser, ID id)
return 0; return 0;
} }
} }
compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2str(id));
return 0; return 0;
} }
#endif /* !RIPPER */ #endif /* !RIPPER */
@ -8774,7 +8774,7 @@ assignable_gen(struct parser_params *parser, ID id, NODE *val)
case ID_CLASS: case ID_CLASS:
return assignable_result(NEW_CVASGN(id, val)); return assignable_result(NEW_CVASGN(id, val));
default: default:
compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id));
} }
error: error:
return assignable_result(0); return assignable_result(0);
@ -8804,7 +8804,7 @@ shadowing_lvar_0(struct parser_params *parser, ID name)
yyerror("duplicated argument name"); yyerror("duplicated argument name");
} }
else if (dvar_defined_get(name) || local_id(name)) { else if (dvar_defined_get(name) || local_id(name)) {
rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); rb_warningS("shadowing outer local variable - %"PRIsVALUE, rb_id2str(name));
vtable_add(lvtbl->vars, name); vtable_add(lvtbl->vars, name);
if (lvtbl->used) { if (lvtbl->used) {
vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED); vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
@ -8832,8 +8832,8 @@ new_bv_gen(struct parser_params *parser, ID name)
{ {
if (!name) return; if (!name) return;
if (!is_local_id(name)) { if (!is_local_id(name)) {
compile_error(PARSER_ARG "invalid local variable - %s", compile_error(PARSER_ARG "invalid local variable - %"PRIsVALUE,
rb_id2name(name)); rb_id2str(name));
return; return;
} }
if (!shadowing_lvar_0(parser, name)) return; if (!shadowing_lvar_0(parser, name)) return;
@ -9659,7 +9659,7 @@ warn_unused_var(struct parser_params *parser, struct local_vars *local)
for (i = 0; i < cnt; ++i) { for (i = 0; i < cnt; ++i) {
if (!v[i] || (u[i] & LVAR_USED)) continue; if (!v[i] || (u[i] & LVAR_USED)) continue;
if (is_private_local_id(v[i])) continue; if (is_private_local_id(v[i])) continue;
rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i])); rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %"PRIsVALUE, rb_id2str(v[i]));
} }
} }
@ -9938,8 +9938,8 @@ reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
} }
var = intern_cstr_without_pindown(s, len, enc); var = intern_cstr_without_pindown(s, len, enc);
if (dvar_defined(var) || local_id(var)) { if (dvar_defined(var) || local_id(var)) {
rb_warningS("named capture conflicts a local variable - %s", rb_warningS("named capture conflicts a local variable - %"PRIsVALUE,
rb_id2name(var)); rb_id2str(var));
} }
arg->succ_block = block_append(arg->succ_block, arg->succ_block = block_append(arg->succ_block,
newline_node(node_assign(assignable(var,0), newline_node(node_assign(assignable(var,0),
@ -10576,8 +10576,7 @@ ripper_id2sym(ID id)
name = "&&"; name = "&&";
break; break;
default: default:
name = rb_id2name(id); if (!rb_id2str(id)) {
if (!name) {
rb_bug("cannot convert ID to string: %ld", (unsigned long)id); rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
} }
return ID2SYM(id); return ID2SYM(id);

View File

@ -854,15 +854,21 @@ x = __ENCODING__
def test_shadowing_variable def test_shadowing_variable
assert_warning(/shadowing outer local variable/) {eval("a=1; tap {|a|}")} assert_warning(/shadowing outer local variable/) {eval("a=1; tap {|a|}")}
a = "\u{3042}"
assert_warning(/#{a}/o) {eval("#{a}=1; tap {|#{a}|}")}
end end
def test_unused_variable def test_unused_variable
o = Object.new o = Object.new
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 foo; a=1; nil; end")}
a = "\u{3042}"
assert_warning(/#{a}/) {o.instance_eval("def foo; #{a}=1; nil; end")}
end end
def test_named_capture_conflict def test_named_capture_conflict
a = 1 a = 1
assert_warning(/named capture conflict/) {eval("a = 1; /(?<a>)/ =~ ''")} assert_warning(/named capture conflict/) {eval("a = 1; /(?<a>)/ =~ ''")}
a = "\u{3042}"
assert_warning(/#{a}/) {eval("#{a} = 1; /(?<#{a}>)/ =~ ''")}
end end
end end