diff options
| author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-09-19 19:40:44 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-09-19 19:40:44 +0900 |
| commit | 2698f13a1f0cc07ef97b7f20502c420b51e9c57d (patch) | |
| tree | c7da91f8362d9ff4e1a99ae8969da6cbd568cdb0 | |
| parent | 6180f1fede487bf5dfdd00cbae2ee7f2b4613a7e (diff) | |
Fixed reserved numbered parameter warning
| -rw-r--r-- | parse.y | 10 | ||||
| -rw-r--r-- | test/ruby/test_syntax.rb | 1 |
2 files changed, 8 insertions, 3 deletions
@@ -170,9 +170,13 @@ struct local_vars { enum { ORDINAL_PARAM = -1, NO_PARAM = 0, - NUMPARAM_MAX = 100, + NUMPARAM_MAX = 9, }; +#define NUMPARAM_ID_P(id) (is_local_id(id) && NUMPARAM_ID_TO_IDX(id) <= NUMPARAM_MAX) +#define NUMPARAM_ID_TO_IDX(id) (unsigned int)(((id) >> ID_SCOPE_SHIFT) - tNUMPARAM_0) +#define NUMPARAM_IDX_TO_ID(idx) TOKEN2LOCALID((tNUMPARAM_0 + (idx))) + #define DVARS_INHERIT ((void*)1) #define DVARS_TOPSCOPE NULL #define DVARS_TERMINAL_P(tbl) ((tbl) == DVARS_INHERIT || (tbl) == DVARS_TOPSCOPE) @@ -11705,9 +11709,9 @@ arg_var(struct parser_params *p, ID id) static void local_var(struct parser_params *p, ID id) { - if (id >= idNUMPARAM_0 && id <= idNUMPARAM_9) { + if (NUMPARAM_ID_P(id)) { rb_warn1("`_%d' is used as numbered parameter", - WARN_I((int)(id - idNUMPARAM_0))); + WARN_I(NUMPARAM_ID_TO_IDX(id))); } vtable_add(p->lvtbl->vars, id); if (p->lvtbl->used) { diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index ec6fc25ae4..6209bb3a23 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -1459,6 +1459,7 @@ eom assert_syntax_error('proc {@1_}', /unexpected/) assert_syntax_error('proc {@9999999999999999}', /too large/) assert_syntax_error('@1', /outside block/) + assert_warn(/`_2' is used as numbered parameter/) {eval('_2=1')} end def test_value_expr_in_condition |
