107 res->
path = arg.path;
191 rb_bug(
"class path is not set properly");
232 const char *s =
"Class";
246 path =
rb_sprintf(
"#<%s:%p>", s, (
void*)klass);
249 cache_path(klass, tmp_classpath, path);
286 if (!ivtbl)
return Qnil;
350 if (path[0] ==
'#') {
355 while (*p && *p !=
':') p++;
358 if (p[1] !=
':')
goto undefined_class;
365 (
int)(p-path), pathname);
411 #define global_variable rb_global_variable
412 #define global_entry rb_global_entry
414 #define gvar_getter_t rb_gvar_getter_t
415 #define gvar_setter_t rb_gvar_setter_t
416 #define gvar_marker_t rb_gvar_marker_t
435 #define undef_getter rb_gvar_undef_getter
436 #define undef_setter rb_gvar_undef_setter
437 #define undef_marker rb_gvar_undef_marker
439 #define val_getter rb_gvar_val_getter
440 #define val_setter rb_gvar_val_setter
441 #define val_marker rb_gvar_val_marker
443 #define var_getter rb_gvar_var_getter
444 #define var_setter rb_gvar_var_setter
445 #define var_marker rb_gvar_var_marker
447 #define readonly_setter rb_gvar_readonly_setter
492 var->
data = (
void*)val;
509 var->
data = (
void*)val;
523 if (!var)
return Qnil;
530 *(
VALUE *)data = val;
573 if (name[0] ==
'$')
id =
rb_intern(name);
575 size_t len =
strlen(name);
578 memcpy(buf+1, name, len);
595 gvar->
data = (
void*)var;
673 trace->
next = entry->var->trace;
677 entry->var->trace = trace;
691 while (trace->
next) {
732 trace = (entry = (
struct global_entry *)data)->var->trace;
748 if (trace->
data == cmd) {
763 return (*var->
getter)(entry->id, var->
data, var);
798 (*var->
setter)(val, entry->id, var->
data, var);
861 for (i = 1; i <= 9; ++i) {
862 buf[1] = (char)(i +
'0');
880 else if ((entry1 = (
struct global_entry *)data1)->var != entry2->var) {
899 entry2->var->counter++;
900 entry1->var = entry2->var;
912 if (!generic_iv_tbl)
return 0;
922 if (generic_iv_tbl) {
940 special_generic_ivar = 1;
942 if (!generic_iv_tbl) {
963 if (!generic_iv_tbl)
return Qfalse;
979 if (!generic_iv_tbl)
return 0;
996 if (!generic_iv_tbl)
return;
1024 if (!generic_iv_tbl)
return;
1025 if (special_generic_ivar == 0)
return;
1034 if (!generic_iv_tbl)
return;
1035 if (
st_delete(generic_iv_tbl, &key, &tbl))
1053 if (!generic_iv_tbl)
return;
1093 if (!iv_index_tbl)
break;
1095 if (len <= (
long)index)
break;
1103 return (
VALUE)index;
1145 if (!iv_index_tbl) {
1148 if (!iv_index_tbl) {
1159 if (len <= (
long)index) {
1170 long newsize = (index+1) + (index+1)/4;
1171 if (!ivar_extended &&
1179 ROBJECT(obj)->as.heap.ivptr = newptr;
1183 newptr =
ROBJECT(obj)->as.heap.ivptr;
1185 for (; len < newsize; len++)
1187 ROBJECT(obj)->as.heap.numiv = newsize;
1188 ROBJECT(obj)->as.heap.iv_index_tbl = iv_index_tbl;
1216 if (!iv_index_tbl)
break;
1250 return (data->
func)((
ID)key, val, data->
arg);
1289 if (!generic_iv_tbl)
break;
1311 for (i = count = 0; i < num; ++i) {
1312 if (ivptr[i] !=
Qundef) {
1327 if (!generic_iv_tbl)
break;
1431 if (!iv_index_tbl)
break;
1552 #define check_autoload_table(av) \
1553 (struct st_table *)rb_check_typeddata((av), &autoload_data_type)
1603 #define check_autoload_data(av) \
1604 (struct autoload_data_i *)rb_check_typeddata((av), &autoload_data_i_type)
1618 if (!file || !*file) {
1674 const char **p = (
const char **)arg;
1690 const char *loading;
1707 if (loadingpath && loading) {
1708 *loadingpath = loading;
1726 *value = ele->
value;
1772 const char *loading = 0, *src;
1778 if (!load)
return Qfalse;
1780 if (src && loading && strcmp(src, loading) == 0)
return Qfalse;
1796 if (
RTEST(result)) {
1798 if (ele->value !=
Qundef) {
1803 args.
value = ele->value;
1821 if (!mod)
return Qnil;
1824 if (!load)
return Qnil;
1831 VALUE value, tmp, av;
1836 while (
RTEST(tmp)) {
1847 if (am == tmp)
break;
1859 if (!recurse)
break;
2079 if (
RTEST(inherit)) {
2106 if (!recurse)
break;
2196 visibility = ce->
flag;
2204 "previous definition of %"PRIsVALUE
" was here", name);
2217 ce->
flag = visibility;
2230 rb_warn(
"rb_define_const: invalid name `%s' for constant", name);
2254 for (i = 0; i <
argc; i++) {
2335 #define CVAR_FOREACH_ANCESTORS(klass, v, r) \
2336 for (klass = cvar_front_klass(klass); klass; klass = RCLASS_SUPER(klass)) { \
2337 if (cvar_lookup_at(klass, id, (v))) { \
2342 #define CVAR_LOOKUP(v,r) do {\
2343 if (cvar_lookup_at(klass, id, (v))) {r;}\
2344 CVAR_FOREACH_ANCESTORS(klass, v, r);\
2350 VALUE tmp, front = 0, target = 0;
2353 CVAR_LOOKUP(0, {
if (!front) front = klass; target = klass;});
2355 if (front && target != front) {
2383 VALUE tmp, front = 0, target = 0;
2387 CVAR_LOOKUP(&value, {
if (!front) front = klass; target = klass;});
2392 if (front && target != front) {
2404 return (
VALUE)value;
2410 if (!klass)
return Qfalse;
2539 if (
RTEST(inherit)) {