From 03813f6dac06ffc24ca04cc308e28d926aed14b4 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 22 Jul 2013 07:32:52 +0000 Subject: [PATCH] vm_eval.c: Check_TypedStruct * vm_eval.c (eval_string_with_cref): check by Check_TypedStruct instead of rb_obj_is_kind_of. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42108 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ proc.c | 4 ++-- vm_core.h | 2 ++ vm_eval.c | 9 ++------- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4aac3a3933..7f48d2925d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Jul 22 16:32:48 2013 Nobuyoshi Nakada + + * vm_eval.c (eval_string_with_cref): check by Check_TypedStruct + instead of rb_obj_is_kind_of. + Mon Jul 22 13:19:22 2013 Koichi Sasada * array.c (ary_resize_capa): use RARRAY_RAWPTR() because diff --git a/proc.c b/proc.c index c50f173dab..a180b7a480 100644 --- a/proc.c +++ b/proc.c @@ -269,7 +269,7 @@ binding_memsize(const void *ptr) return ptr ? sizeof(rb_binding_t) : 0; } -static const rb_data_type_t binding_data_type = { +const rb_data_type_t ruby_binding_data_type = { "binding", { binding_mark, @@ -283,7 +283,7 @@ binding_alloc(VALUE klass) { VALUE obj; rb_binding_t *bind; - obj = TypedData_Make_Struct(klass, rb_binding_t, &binding_data_type, bind); + obj = TypedData_Make_Struct(klass, rb_binding_t, &ruby_binding_data_type, bind); return obj; } diff --git a/vm_core.h b/vm_core.h index f7e4c056cb..a02205a624 100644 --- a/vm_core.h +++ b/vm_core.h @@ -688,6 +688,8 @@ typedef struct { rb_block_t block; } rb_env_t; +extern const rb_data_type_t ruby_binding_data_type; + #define GetBindingPtr(obj, ptr) \ GetCoreDataFromValue((obj), rb_binding_t, (ptr)) diff --git a/vm_eval.c b/vm_eval.c index dfa26186f4..8351f7f869 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -1202,8 +1202,8 @@ eval_string_with_cref(VALUE self, VALUE src, VALUE scope, NODE *cref, const char VALUE absolute_path = Qnil; if (scope != Qnil) { - if (rb_obj_is_kind_of(scope, rb_cBinding)) { - GetBindingPtr(scope, bind); + bind = Check_TypedStruct(scope, &ruby_binding_data_type); + { envval = bind->env; if (strcmp(file, "(eval)") != 0) { absolute_path = rb_str_new_cstr(file); @@ -1214,11 +1214,6 @@ eval_string_with_cref(VALUE self, VALUE src, VALUE scope, NODE *cref, const char absolute_path = rb_current_realfilepath(); } } - else { - rb_raise(rb_eTypeError, - "wrong argument type %s (expected Binding)", - rb_obj_classname(scope)); - } GetEnvPtr(envval, env); base_block = &env->block; }