Class: FinalizeBlock

Inherits:
Object
  • Object
show all
Defined in:
lib/finalize_block.rb,
lib/finalize_block/version.rb,
ext/finalize_block/finalize_block.c

Constant Summary collapse

VERSION =
"0.1.0"

Instance Method Summary collapse

Constructor Details

#initialize(rules) ⇒ FinalizeBlock

Returns a new instance of FinalizeBlock.



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/finalize_block.rb', line 5

def initialize rules
  raise "Now, one rule should be accepted: #{rules.inspect}" if rules.keys.size != 1
  rules.each{|k, v| @klass = k; @action = v}
  @traces = setup_traces @klass
  @traces.each{|trace| trace.enable}
  yield
ensure
  @traces.each{|trace| trace.disable}

  each_target_objects do |obj|
    @action.call(obj)
  end
end

Instance Method Details

#each_target_objectsObject



49
50
51
52
53
54
# File 'ext/finalize_block/finalize_block.c', line 49

static VALUE
each_target_objects(VALUE self)
{
    st_foreach(g_allocated_objects, each_target_objects_i, 0);
    return self;
}

#setup_traces(klass) ⇒ Object



32
33
34
35
36
37
38
39
# File 'ext/finalize_block/finalize_block.c', line 32

static VALUE
setup_traces(VALUE self, VALUE klass)
{
    VALUE traces = rb_ary_new();
    rb_ary_push(traces, rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_NEWOBJ, newobj_i, (void *)klass));
    rb_ary_push(traces, rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_FREEOBJ, freeobj_i, NULL));
    return traces;
}