diff --git a/object.c b/object.c index 75192c1..82ad85a 100644 --- a/object.c +++ b/object.c @@ -2408,6 +2408,13 @@ rb_f_array(VALUE obj, VALUE arg) return rb_Array(arg); } +VALUE rb_vm_cref_cls(void); +static VALUE +rb_f_current_class(VALUE obj) +{ + return rb_vm_cref_cls(); +} + /* * Document-class: Class * @@ -2588,6 +2595,8 @@ Init_Object(void) rb_define_global_function("String", rb_f_string, 1); rb_define_global_function("Array", rb_f_array, 1); + rb_define_global_function("current_class", rb_f_current_class, 0); + rb_cNilClass = rb_define_class("NilClass", rb_cObject); rb_define_method(rb_cNilClass, "to_i", nil_to_i, 0); rb_define_method(rb_cNilClass, "to_f", nil_to_f, 0); diff --git a/vm.c b/vm.c index 980e7ea..dcc43df 100644 --- a/vm.c +++ b/vm.c @@ -819,6 +819,12 @@ rb_vm_cref(void) return vm_get_cref(cfp->iseq, cfp->lfp, cfp->dfp); } +VALUE +rb_vm_cref_cls(void) +{ + return rb_vm_cref()->nd_clss; +} + #if 0 void debug_cref(NODE *cref)