summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-12-09 11:14:42 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-12-09 11:14:42 +0000
commit2dc98cd0f3b8a0c4466337b01d48ba0797c05a5b (patch)
treed7a53e778c4ea87a5eb67d06c820242249d61fe3 /parse.y
parent1547331cf39700d6181ba70da6b13a2eff94de3a (diff)
* parse.y (lvar_defined_gen, shadowing_lvar_gen, dvar_defined): no
warnings for unused method and block arguments. [ruby-dev:42718] [ruby-dev:42724] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30151 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y18
1 files changed, 10 insertions, 8 deletions
diff --git a/parse.y b/parse.y
index 10f4a80328..f2a556ae95 100644
--- a/parse.y
+++ b/parse.y
@@ -458,8 +458,9 @@ static void dyna_pop_gen(struct parser_params*, const struct vtable *);
static int dyna_in_block_gen(struct parser_params*);
#define dyna_in_block() dyna_in_block_gen(parser)
#define dyna_var(id) local_var(id)
-static int dvar_defined_gen(struct parser_params*,ID);
-#define dvar_defined(id) dvar_defined_gen(parser, id)
+static int dvar_defined_gen(struct parser_params*,ID,int);
+#define dvar_defined(id) dvar_defined_gen(parser, id, 0)
+#define dvar_defined_get(id) dvar_defined_gen(parser, id, 1)
static int dvar_curr_gen(struct parser_params*,ID);
#define dvar_curr(id) dvar_curr_gen(parser, id)
@@ -6194,7 +6195,7 @@ formal_argument_gen(struct parser_params *parser, ID lhs)
static int
lvar_defined_gen(struct parser_params *parser, ID id)
{
- return (dyna_in_block() && dvar_defined(id)) || local_id(id);
+ return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
}
/* emacsen -*- hack */
@@ -8257,6 +8258,8 @@ assignable_gen(struct parser_params *parser, ID id, NODE *val)
#undef parser_yyerror
}
+#define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1))
+
static ID
shadowing_lvar_gen(struct parser_params *parser, ID name)
{
@@ -8265,11 +8268,11 @@ shadowing_lvar_gen(struct parser_params *parser, ID name)
if (dvar_curr(name)) {
yyerror("duplicated argument name");
}
- else if (dvar_defined(name) || local_id(name)) {
+ else if (dvar_defined_get(name) || local_id(name)) {
rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
vtable_add(lvtbl->vars, name);
if (lvtbl->used) {
- vtable_add(lvtbl->used, (ID)ruby_sourceline);
+ vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
}
}
}
@@ -8950,8 +8953,6 @@ new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b
}
#endif /* !RIPPER */
-#define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1))
-
static void
warn_unused_var(struct parser_params *parser, struct local_vars *local)
{
@@ -9125,7 +9126,7 @@ dyna_in_block_gen(struct parser_params *parser)
}
static int
-dvar_defined_gen(struct parser_params *parser, ID id)
+dvar_defined_gen(struct parser_params *parser, ID id, int get)
{
struct vtable *vars, *args, *used;
int i;
@@ -9144,6 +9145,7 @@ dvar_defined_gen(struct parser_params *parser, ID id)
}
args = args->prev;
vars = vars->prev;
+ if (get) used = 0;
if (used) used = used->prev;
}