Feature #10585 » 0002-struct.c-cache-member-definition-in-a-subclass.patch
| struct.c | ||
|---|---|---|
|
static inline VALUE
|
||
|
struct_ivar_get(VALUE c, ID id)
|
||
|
{
|
||
|
for (;;) {
|
||
|
if (rb_ivar_defined(c, id))
|
||
|
return rb_ivar_get(c, id);
|
||
|
c = RCLASS_SUPER(c);
|
||
|
if (c == 0 || c == rb_cStruct)
|
||
|
return Qnil;
|
||
|
VALUE orig = c;
|
||
|
VALUE ivar = rb_attr_get(c, id);
|
||
|
if (!NIL_P(ivar))
|
||
|
return ivar;
|
||
|
for(;;) {
|
||
|
c = RCLASS_SUPER(c);
|
||
|
if (c == 0 || c == rb_cStruct)
|
||
|
return Qnil;
|
||
|
ivar = rb_attr_get(c, id);
|
||
|
if (!NIL_P(ivar)) {
|
||
|
rb_ivar_set(orig, id, ivar);
|
||
|
return ivar;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »