--mimepart_4cdb6810aa454_566d5bc22da238b Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4043: °ã¼ã«é°ãurrent_class®æhttp://redmine.ruby-lang.org/issues/show/4043 µ¯É¼¼Ô: Makoto Kishimoto ¥¹¥Æ¡¼¥¿¥¹: Open, Í¥ÀèÅÙ: Low ¥«¥Æ¥´¥ê: core, Target version: 1.9.x ¥«¥ì¥ó¥È¥¯¥é¥¹¡ÊMRI¤ÎÆâÉô¤Ç¤¤¤¦¤È¤³¤í¤Îcref¡Ë¤òRuby¤«¤éÄ´¤Ù¤é¤ì¤ë¥á¥½¥Ã¥Écurrent_class¤òÄ󰯤·¤Þ¤¹¡£ ¥°¥í¡¼¥Ð¥ë´Ø¿ô¡ÊKernel¤Î¥×¥é¥¤¥Ù¡¼¥È¥á¥½¥Ã¥É¡Ë¤Ë¤¹¤ëÍýͳ¤Ï¡¢self¡Ê¤Ê¤¤¤·¤Ê¤ó¤é¤«¤Î¥ª¥Ö¥¸¥§¥¯¥È¡Ë¤È¤Ï´Ø·¸¤Ê¤¤ÃͤòÊÖ¤¹¥á¥½¥Ã¥É¤Ç¤¢¤ë¤¿¤á¡¢¤Ç¤¹¡£ ¥æ¡¼¥¹¥±¡¼¥¹¤Ç¤¹¤¬¡¢Î㤨¤Ð°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¡¢¥â¥¸¥å¡¼¥ë¤Îinstance_eval¤Èmodule_eval¤Î°ã¤¤¤òRuby¥×¥í¥°¥é¥Þ¤¬³Î¤«¤á¤ë¤³¤È¤¬¤Ç¤¡¢Ruby¤ÎÍý²ò¤ËÌòΩ¤Á¤Þ¤¹¡£ $ irb19 irb(main):001:0> module M ; end => nil irb(main):002:0> M.instance_eval { current_class } => #<Class:M> irb(main):003:0> M.module_eval { current_class } => M º¹Ê¬¤òÉÕ¤±¤Þ¤¹¤¬¡¢¥¯¥¤¥Ã¥¯¥Ï¥Ã¥¯¤Ç¤¹¤Î¤Ç½¤Àµ¤¬É¬Íפ«¤È»×¤¤¤Þ¤¹¡£ 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) ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4cdb6810aa454_566d5bc22da238b Content-Type: application/octet-stream; name=patch-cref Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=patch-cref ZGlmZiAtLWdpdCBhL29iamVjdC5jIGIvb2JqZWN0LmMKaW5kZXggNzUxOTJj MS4uODJhZDg1YSAxMDA2NDQKLS0tIGEvb2JqZWN0LmMKKysrIGIvb2JqZWN0 LmMKQEAgLTI0MDgsNiArMjQwOCwxMyBAQCByYl9mX2FycmF5KFZBTFVFIG9i aiwgVkFMVUUgYXJnKQogICAgIHJldHVybiByYl9BcnJheShhcmcpOwogfQog CitWQUxVRSByYl92bV9jcmVmX2Nscyh2b2lkKTsKK3N0YXRpYyBWQUxVRQor cmJfZl9jdXJyZW50X2NsYXNzKFZBTFVFIG9iaikKK3sKKyAgICByZXR1cm4g cmJfdm1fY3JlZl9jbHMoKTsKK30KKwogLyoKICAqICBEb2N1bWVudC1jbGFz czogQ2xhc3MKICAqCkBAIC0yNTg4LDYgKzI1OTUsOCBAQCBJbml0X09iamVj dCh2b2lkKQogICAgIHJiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb24oIlN0cmlu ZyIsIHJiX2Zfc3RyaW5nLCAxKTsKICAgICByYl9kZWZpbmVfZ2xvYmFsX2Z1 bmN0aW9uKCJBcnJheSIsIHJiX2ZfYXJyYXksIDEpOwogCisgICAgcmJfZGVm aW5lX2dsb2JhbF9mdW5jdGlvbigiY3VycmVudF9jbGFzcyIsIHJiX2ZfY3Vy cmVudF9jbGFzcywgMCk7CisKICAgICByYl9jTmlsQ2xhc3MgPSByYl9kZWZp bmVfY2xhc3MoIk5pbENsYXNzIiwgcmJfY09iamVjdCk7CiAgICAgcmJfZGVm aW5lX21ldGhvZChyYl9jTmlsQ2xhc3MsICJ0b19pIiwgbmlsX3RvX2ksIDAp OwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY05pbENsYXNzLCAidG9fZiIs IG5pbF90b19mLCAwKTsKZGlmZiAtLWdpdCBhL3ZtLmMgYi92bS5jCmluZGV4 IDk4MGU3ZWEuLmRjYzQzZGYgMTAwNjQ0Ci0tLSBhL3ZtLmMKKysrIGIvdm0u YwpAQCAtODE5LDYgKzgxOSwxMiBAQCByYl92bV9jcmVmKHZvaWQpCiAgICAg cmV0dXJuIHZtX2dldF9jcmVmKGNmcC0+aXNlcSwgY2ZwLT5sZnAsIGNmcC0+ ZGZwKTsKIH0KIAorVkFMVUUKK3JiX3ZtX2NyZWZfY2xzKHZvaWQpCit7Cisg ICAgcmV0dXJuIHJiX3ZtX2NyZWYoKS0+bmRfY2xzczsKK30KKwogI2lmIDAK IHZvaWQKIGRlYnVnX2NyZWYoTk9ERSAqY3JlZikK --mimepart_4cdb6810aa454_566d5bc22da238b--