constant.h: constant visibilities

* constant.h (RB_CONST_PRIVATE_P, RB_CONST_PUBLIC_P): macros to
  predicate constant visibilities.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-10-08 08:27:51 +00:00
Родитель 1ba17d0e91
Коммит 02fe713b46
2 изменённых файлов: 10 добавлений и 4 удалений

Просмотреть файл

@ -13,9 +13,15 @@
typedef enum {
CONST_PUBLIC = 0x00,
CONST_PRIVATE = 0x01
CONST_PRIVATE,
CONST_VISIBILITY_MAX
} rb_const_flag_t;
#define RB_CONST_PRIVATE_P(ce) \
((ce)->flag == CONST_PRIVATE)
#define RB_CONST_PUBLIC_P(ce) \
((ce)->flag == CONST_PUBLIC)
typedef struct rb_const_entry_struct {
rb_const_flag_t flag;
int line;

Просмотреть файл

@ -1836,7 +1836,7 @@ rb_const_get_0(VALUE klass, ID id, int exclude, int recurse, int visibility)
rb_const_entry_t *ce;
while ((ce = rb_const_lookup(tmp, id))) {
if (visibility && ce->flag == CONST_PRIVATE) {
if (visibility && RB_CONST_PRIVATE_P(ce)) {
rb_name_error(id, "private constant %"PRIsVALUE"::%"PRIsVALUE" referenced",
rb_class_name(klass), QUOTE_ID(id));
}
@ -2029,7 +2029,7 @@ list_i(st_data_t key, st_data_t value, VALUE ary)
{
ID sym = (ID)key;
rb_const_entry_t *ce = (rb_const_entry_t *)value;
if (ce->flag != CONST_PRIVATE) rb_ary_push(ary, ID2SYM(sym));
if (RB_CONST_PUBLIC_P(ce)) rb_ary_push(ary, ID2SYM(sym));
return ST_CONTINUE;
}
@ -2093,7 +2093,7 @@ rb_const_defined_0(VALUE klass, ID id, int exclude, int recurse, int visibility)
retry:
while (tmp) {
if ((ce = rb_const_lookup(tmp, id))) {
if (visibility && ce->flag == CONST_PRIVATE) {
if (visibility && RB_CONST_PRIVATE_P(ce)) {
return (int)Qfalse;
}
if (ce->value == Qundef && !check_autoload_required(tmp, id, 0) && !rb_autoloading_value(tmp, id, 0))