Revert Disposable concept back into core
Pretty much a revert of
e858bbdcf5
.
We need this in core to properly implement F12 reset.
This commit is contained in:
parent
3983fe66e9
commit
81ac0780f8
36 changed files with 476 additions and 210 deletions
|
@ -66,33 +66,47 @@ disposableDisposeChildren(mrb_state *mrb, mrb_value disp)
|
|||
template<class C>
|
||||
MRB_METHOD(disposableDispose)
|
||||
{
|
||||
C *c = static_cast<C*>(DATA_PTR(self));
|
||||
C *d = static_cast<C*>(DATA_PTR(self));
|
||||
|
||||
/* Nothing to do if already disposed */
|
||||
if (!c)
|
||||
if (!d)
|
||||
return mrb_nil_value();
|
||||
|
||||
if (d->isDisposed())
|
||||
return mrb_nil_value();
|
||||
|
||||
disposableDisposeChildren(mrb, self);
|
||||
|
||||
delete c;
|
||||
DATA_PTR(self) = 0;
|
||||
d->dispose();
|
||||
|
||||
return mrb_nil_value();
|
||||
}
|
||||
|
||||
template<class C>
|
||||
MRB_METHOD(disposableDisposed)
|
||||
MRB_METHOD(disposableIsDisposed)
|
||||
{
|
||||
MRB_UNUSED_PARAM;
|
||||
|
||||
return mrb_bool_value(DATA_PTR(self) == 0);
|
||||
C *d = static_cast<C*>(DATA_PTR(self));
|
||||
|
||||
if (!d)
|
||||
return mrb_true_value();
|
||||
|
||||
return mrb_bool_value(d->isDisposed());
|
||||
}
|
||||
|
||||
template<class C>
|
||||
static void disposableBindingInit(mrb_state *mrb, RClass *klass)
|
||||
{
|
||||
mrb_define_method(mrb, klass, "dispose", disposableDispose<C>, MRB_ARGS_NONE());
|
||||
mrb_define_method(mrb, klass, "disposed?", disposableDisposed<C>, MRB_ARGS_NONE());
|
||||
mrb_define_method(mrb, klass, "disposed?", disposableIsDisposed<C>, MRB_ARGS_NONE());
|
||||
}
|
||||
|
||||
template<class C>
|
||||
inline void
|
||||
checkDisposed(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
if (mrb_test(disposableIsDisposed<C>(0, self)))
|
||||
raiseDisposedAccess(mrb, self);
|
||||
}
|
||||
|
||||
#endif // DISPOSABLEBINDING_H
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue