зеркало из https://github.com/github/ruby.git
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:
Родитель
1ba17d0e91
Коммит
02fe713b46
|
@ -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))
|
||||
|
|
Загрузка…
Ссылка в новой задаче