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)
