Module: ObjectSpace

Defined in:
opal/opal/corelib/object_space.rb

Overview

helpers: respond_to, truthy

Class Method Summary collapse

Class Method Details

.define_finalizer(obj, aproc = undefined, &block) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'opal/opal/corelib/object_space.rb', line 36

def define_finalizer(obj, aproc = undefined, &block)
  %x{
    if ($truthy(block)) aproc = block;
    if (!$truthy(aproc)) aproc = #{::Kernel.proc};
    if (!$respond_to(aproc, '$call')) {
      #{::Kernel.raise ::ArgumentError, "Wrong type argument #{aproc.class} (should be callable)"};
    }
    var id = #{obj.__id__};
    add_caller(id, aproc);
    try {
      registry.register(obj, id, obj);
    }
    catch (e) {
      delete_callers(id);
      #{::Kernel.raise ::ArgumentError, "cannot define finalizer for #{obj.class}"};
    }
    return [0, aproc];
  }
end

.undefine_finalizer(obj) ⇒ Object



56
57
58
59
60
61
62
63
# File 'opal/opal/corelib/object_space.rb', line 56

def undefine_finalizer(obj)
  %{
    var id = #{obj.__id__};
    registry.unregister(obj);
    delete_callers(id);
    return obj;
  }
end