Feature #3905 » full-ephemeral-class.diff
| error.c | ||
|---|---|---|
|
{
|
||
|
VALUE exc = make_errno_exc(mesg);
|
||
|
rb_extend_object(exc, mod);
|
||
|
FL_SET(CLASS_OF(exc), RCLASS_EPHEMERAL);
|
||
|
rb_exc_raise(exc);
|
||
|
}
|
||
| ... | ... | |
|
{
|
||
|
VALUE exc = rb_syserr_new(e, mesg);
|
||
|
rb_extend_object(exc, mod);
|
||
|
FL_SET(CLASS_OF(exc), RCLASS_EPHEMERAL);
|
||
|
rb_exc_raise(exc);
|
||
|
}
|
||
| ext/openssl/ossl_ssl.c | ||
|---|---|---|
|
if (nonblock) {
|
||
|
VALUE exc = ossl_exc_new(eSSLError, "write would block");
|
||
|
rb_extend_object(exc, rb_mWaitWritable);
|
||
|
FL_SET(CLASS_OF(exc), RCLASS_EPHEMERAL);
|
||
|
rb_exc_raise(exc);
|
||
|
}
|
||
|
}
|
||
| ... | ... | |
|
if (nonblock) {
|
||
|
VALUE exc = ossl_exc_new(eSSLError, "read would block");
|
||
|
rb_extend_object(exc, rb_mWaitReadable);
|
||
|
FL_SET(CLASS_OF(exc), RCLASS_EPHEMERAL);
|
||
|
rb_exc_raise(exc);
|
||
|
}
|
||
|
}
|
||
| include/ruby/ruby.h | ||
|---|---|---|
|
struct st_table *m_tbl;
|
||
|
struct st_table *iv_index_tbl;
|
||
|
};
|
||
|
#define RCLASS_EPHEMERAL FL_USER1
|
||
|
#define RCLASS_IV_TBL(c) (RCLASS(c)->ptr->iv_tbl)
|
||
|
#define RCLASS_CONST_TBL(c) (RCLASS(c)->ptr->const_tbl)
|
||
|
#define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
|
||
| vm_method.c | ||
|---|---|---|
|
{
|
||
|
struct cache_entry *ent, *end;
|
||
|
/* ephemeral class does not write to cache */
|
||
|
if (FL_TEST(klass, RCLASS_EPHEMERAL))
|
||
|
return;
|
||
|
rb_vm_change_state();
|
||
|
if (!ruby_running)
|
||
| ... | ... | |
|
{
|
||
|
rb_method_entry_t *me = search_method(klass, id);
|
||
|
if (ruby_running) {
|
||
|
if (ruby_running && ! FL_TEST(klass, RCLASS_EPHEMERAL)) {
|
||
|
struct cache_entry *ent;
|
||
|
ent = cache + EXPR1(klass, id);
|
||
|
ent->klass = klass;
|
||
- « Previous
- 1
- 2
- Next »