Project

General

Profile

Bug #9321 » rb_mod_const_missing_with_tests.patch

drkaes (Stefan Kaes), 12/30/2013 08:05 PM

View differences:

test/ruby/test_settracefunc.rb
:b_return
], events)
end
def test_const_missing
bug59398 = '[ruby-core:59398]'
events = []
assert !defined?(MISSING_CONSTANT_59398)
TracePoint.new(:c_call, :c_return){|tp|
events << tp.event if tp.defined_class == Module && tp.method_id == :const_missing
}.enable{
MISSING_CONSTANT_59398 rescue nil
}
assert_equal([
:c_call,
:c_return
], events, bug59398)
end
end
variable.c
#include "constant.h"
#include "internal.h"
#include "id.h"
#include "vm_core.h"
st_table *rb_global_tbl;
static ID autoload, classpath, tmp_classpath, classid;
......
VALUE
rb_mod_const_missing(VALUE klass, VALUE name)
{
rb_thread_t *th = GET_THREAD();
EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, rb_cModule, idConst_missing, rb_cModule, Qnil);
rb_frame_pop(); /* pop frame for "const_missing" */
uninitialized_constant(klass, rb_to_id(name));
(2-2/3)