parse.y: check for attr

* parse.y (rb_id_attrset): check if the argument is valid type as an
  attribute.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2013-08-10 00:12:05 +00:00
parent 8f61bbf314
commit 70973af1d5
2 changed files with 27 additions and 0 deletions

View File

@ -1,3 +1,8 @@
Sat Aug 10 09:12:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (rb_id_attrset): check if the argument is valid type as an
attribute.
Sat Aug 10 05:44:08 2013 Zachary Scott <e@zzak.io>
* lib/rss/trackback.rb: [DOC] Hide RSS::Trackback from rdoc

22
parse.y
View File

@ -8766,9 +8766,31 @@ block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
}
}
static const char id_type_names[][9] = {
"LOCAL",
"INSTANCE",
"", /* INSTANCE2 */
"GLOBAL",
"ATTRSET",
"CONST",
"CLASS",
"JUNK",
};
ID
rb_id_attrset(ID id)
{
if (!is_notop_id(id)) {
rb_bug("rb_id_attrset: operator ID - %"PRIdVALUE, (VALUE)id);
}
else {
int scope = (int)(id & ID_SCOPE_MASK);
if (scope != ID_LOCAL && scope != ID_CONST) {
rb_bug("rb_id_attrset: %s ID - %"PRIdVALUE, id_type_names[scope],
(VALUE)id);
}
}
id &= ~ID_SCOPE_MASK;
id |= ID_ATTRSET;
return id;