summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-07-07 22:36:25 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-07-07 22:36:25 +0000
commitfbacb71b385958db8196f041b632e16ab555891d (patch)
treed65de24ee6c0b29900b8aae7ae2afd44246af359 /parse.y
parentcf06ed4f52c638fb428884bca0a0f59a3344505c (diff)
[Feature #6693]
* parse.y (shadowing_lvar_gen, warn_unused_var): no warnings for variables starting with _. [ruby-core:46160][Feature #6693] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y15
1 files changed, 13 insertions, 2 deletions
diff --git a/parse.y b/parse.y
index c10099126f..0853d1e790 100644
--- a/parse.y
+++ b/parse.y
@@ -8595,12 +8595,23 @@ assignable_gen(struct parser_params *parser, ID id, NODE *val)
#undef parser_yyerror
}
+static int
+is_private_local_id(ID name)
+{
+ VALUE s;
+ if (name == idUScore) return 1;
+ if (!is_local_id(name)) return 0;
+ s = rb_id2str(name);
+ if (!s) return 0;
+ return RSTRING_PTR(s)[0] == '_';
+}
+
#define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1))
static ID
shadowing_lvar_gen(struct parser_params *parser, ID name)
{
- if (idUScore == name) return name;
+ if (is_private_local_id(name)) return name;
if (dyna_in_block()) {
if (dvar_curr(name)) {
yyerror("duplicated argument name");
@@ -9324,7 +9335,7 @@ warn_unused_var(struct parser_params *parser, struct local_vars *local)
}
for (i = 0; i < cnt; ++i) {
if (!v[i] || (u[i] & LVAR_USED)) continue;
- if (idUScore == v[i]) continue;
+ if (is_private_local_id(v[i])) continue;
rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
}
}