From 2e0aa29296a4ab8ef370bd64b311fd0b86b748d1 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Sat, 3 Nov 2012 08:28:26 +0900 Subject: cosmetic changes in mrb_obj_clone() --- src/kernel.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/kernel.c') diff --git a/src/kernel.c b/src/kernel.c index 050dd73bc..2d1c731a2 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -345,16 +345,18 @@ init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj) mrb_value mrb_obj_clone(mrb_state *mrb, mrb_value self) { - struct RObject *clone; + struct RObject *p; + mrb_value clone; if (mrb_special_const_p(self)) { mrb_raisef(mrb, E_TYPE_ERROR, "can't clone %s", mrb_obj_classname(mrb, self)); } - clone = (struct RObject*)mrb_obj_alloc(mrb, mrb_type(self), mrb_obj_class(mrb, self)); - clone->c = mrb_singleton_class_clone(mrb, self); - init_copy(mrb, mrb_obj_value(clone), self); + p = (struct RObject*)mrb_obj_alloc(mrb, mrb_type(self), mrb_obj_class(mrb, self)); + p->c = mrb_singleton_class_clone(mrb, self); + clone = mrb_obj_value(p); + init_copy(mrb, clone, self); - return mrb_obj_value(clone); + return clone; } /* 15.3.1.3.9 */ -- cgit v1.2.3 From 52f7e8372651036847dc3a4a765f4d25d2bb4665 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Sat, 3 Nov 2012 08:28:48 +0900 Subject: Module#dup should copy class methods as well --- include/mruby/class.h | 1 + src/kernel.c | 1 + 2 files changed, 2 insertions(+) (limited to 'src/kernel.c') diff --git a/include/mruby/class.h b/include/mruby/class.h index 3eae31f4e..eda54dff9 100644 --- a/include/mruby/class.h +++ b/include/mruby/class.h @@ -64,6 +64,7 @@ struct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym); void mrb_define_method_vm(mrb_state*, struct RClass*, mrb_sym, mrb_value); void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, struct RProc *); void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, int aspec); +void mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b); struct RClass *mrb_class_outer_module(mrb_state*, struct RClass *); struct RProc *mrb_method_search_vm(mrb_state*, struct RClass**, mrb_sym); diff --git a/src/kernel.c b/src/kernel.c index 2d1c731a2..927916b8a 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -1117,4 +1117,5 @@ mrb_init_kernel(mrb_state *mrb) #endif mrb_include_module(mrb, mrb->object_class, mrb->kernel_module); + mrb_alias_method(mrb, mrb->module_class, mrb_intern(mrb, "dup"), mrb_intern(mrb, "clone")); } -- cgit v1.2.3 From 15304c194d86544cc7cc7138cec1bf4bdcbcaeb5 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Sun, 4 Nov 2012 05:05:53 +0900 Subject: replace RTEST() by mrb_test_p() --- include/mruby/value.h | 1 - src/kernel.c | 4 ++-- src/object.c | 2 +- src/regparse.c | 4 ++-- src/sprintf.c | 4 ++-- 5 files changed, 7 insertions(+), 8 deletions(-) (limited to 'src/kernel.c') diff --git a/include/mruby/value.h b/include/mruby/value.h index 99b40914b..75302792b 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -163,7 +163,6 @@ mrb_float_value(mrb_float f) #define IMMEDIATE_P(x) (mrb_type(x) <= MRB_TT_MAIN) #define SPECIAL_CONST_P(x) IMMEDIATE_P(x) -#define RTEST(o) mrb_test(o) #define FL_ABLE(x) (!SPECIAL_CONST_P(x)) #define FL_TEST(x,f) (FL_ABLE(x)?(RBASIC(x)->flags&(f)):0) diff --git a/src/kernel.c b/src/kernel.c index 927916b8a..043551ccc 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -764,7 +764,7 @@ mrb_obj_singleton_methods(mrb_state *mrb, int argc, mrb_value *argv, mrb_value o method_entry_loop(mrb, klass, ary); klass = klass->super; } - if (RTEST(recur)) { + if (mrb_test(recur)) { while (klass && ((klass->tt == MRB_TT_SCLASS) || (klass->tt == MRB_TT_ICLASS))) { method_entry_loop(mrb, klass, ary); klass = klass->super; @@ -1008,7 +1008,7 @@ obj_respond_to(mrb_state *mrb, mrb_value self) if (argc > 1) priv = argv[1]; else priv = mrb_nil_value(); id = mrb_to_id(mrb, mid); - if (basic_obj_respond_to(mrb, self, id, !RTEST(priv))) + if (basic_obj_respond_to(mrb, self, id, !mrb_test(priv))) return mrb_true_value(); return mrb_false_value(); } diff --git a/src/object.c b/src/object.c index ae3af692d..51b5c12d9 100644 --- a/src/object.c +++ b/src/object.c @@ -603,5 +603,5 @@ int mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2) { if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE; - return RTEST(mrb_funcall(mrb, obj1, "eql?", 1, obj2)); + return mrb_test(mrb_funcall(mrb, obj1, "eql?", 1, obj2)); } diff --git a/src/regparse.c b/src/regparse.c index f7bb23306..0ecb01018 100644 --- a/src/regparse.c +++ b/src/regparse.c @@ -2831,7 +2831,7 @@ CLOSE_BRACKET_WITHOUT_ESC_WARN(ScanEnv* env, UChar* c) static void CC_DUP_WARN(ScanEnv *env) { - if (onig_warn == onig_null_warn /*|| !RTEST(ruby_verbose)*/) return ; + if (onig_warn == onig_null_warn /*|| !mrb_test(ruby_verbose)*/) return ; if (IS_SYNTAX_BV((env)->syntax, ONIG_SYN_WARN_CC_DUP) && !((env)->warnings_flag & ONIG_SYN_WARN_CC_DUP)) { @@ -2843,7 +2843,7 @@ CC_DUP_WARN(ScanEnv *env) static void UNKNOWN_ESC_WARN(ScanEnv *env, int c) { - if (onig_warn == onig_null_warn /*|| !RTEST(ruby_verbose)*/) return ; + if (onig_warn == onig_null_warn /*|| !mrb_test(ruby_verbose)*/) return ; onig_syntax_warn(env, "Unknown escape \\%c is ignored", c); } diff --git a/src/sprintf.c b/src/sprintf.c index 91fa3edca..cbe2681a9 100644 --- a/src/sprintf.c +++ b/src/sprintf.c @@ -1052,8 +1052,8 @@ retry: */ if (posarg >= 0 && nextarg < argc) { const char *mesg = "too many arguments for format string"; - if (RTEST(ruby_debug)) mrb_raise(mrb, E_ARGUMENT_ERROR, mesg); - if (RTEST(ruby_verbose)) mrb_warn("%s", mesg); + if (mrb_test(ruby_debug)) mrb_raise(mrb, E_ARGUMENT_ERROR, mesg); + if (mrb_test(ruby_verbose)) mrb_warn("%s", mesg); } mrb_str_resize(mrb, result, blen); -- cgit v1.2.3 From c903910c6b8f82b7f158a189b1671296618b0fe0 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Sun, 4 Nov 2012 13:56:08 +0900 Subject: replace RBASIC by mrb_basic --- include/mruby/object.h | 6 ++---- src/encoding.h | 4 ++-- src/gc.c | 28 ++++++++++++++-------------- src/kernel.c | 2 +- src/re.c | 6 +++--- src/string.c | 2 +- 6 files changed, 23 insertions(+), 25 deletions(-) (limited to 'src/kernel.c') diff --git a/include/mruby/object.h b/include/mruby/object.h index afdce5546..544450040 100644 --- a/include/mruby/object.h +++ b/include/mruby/object.h @@ -42,10 +42,8 @@ struct RObject { struct iv_tbl *iv; }; -#define mrb_obj_ptr(v) ((struct RObject*)((v).value.p)) -#define RBASIC(obj) ((struct RBasic*)((obj).value.p)) -#define RBASIC_KLASS(v) ((struct RClass *)(((struct RBasic*)((v).value.p))->c)) -#define ROBJECT(v) ((struct RObject*)((v).value.p)) +#define mrb_obj_ptr(v) ((struct RObject*)((v).value.p)) +#define mrb_basic(v) ((struct RBasic*)((v).value.p)) #define ROBJECT_IVPTR(v) (((struct RObject*)((v).value.p))->iv) #define ROBJECT_NUMIV(v) (ROBJECT_IVPTR(v) ? ROBJECT_IVPTR(v)->size : 0) diff --git a/src/encoding.h b/src/encoding.h index 00cb92bd8..7bc0d9ef0 100644 --- a/src/encoding.h +++ b/src/encoding.h @@ -35,8 +35,8 @@ extern "C" { #define ENCODING_MASK (((unsigned int)ENCODING_INLINE_MAX)<flags &= ~ENCODING_MASK;\ - RBASIC(obj)->flags |= (unsigned int)(i) << ENCODING_SHIFT;\ + mrb_obj_ptr(obj)->flags &= ~ENCODING_MASK;\ + mrb_obj_ptr(obj)->flags |= (unsigned int)(i) << ENCODING_SHIFT;\ } while (0) #define ENCODING_SET(mrb, obj,i) do {\ mrb_value mrb_encoding_set_obj = (obj); \ diff --git a/src/gc.c b/src/gc.c index 66242113b..c387f69f6 100644 --- a/src/gc.c +++ b/src/gc.c @@ -319,7 +319,7 @@ void mrb_gc_protect(mrb_state *mrb, mrb_value obj) { if (mrb_special_const_p(obj)) return; - gc_protect(mrb, RBASIC(obj)); + gc_protect(mrb, mrb_basic(obj)); } struct RBasic* @@ -1076,8 +1076,8 @@ test_mrb_field_write_barrier(void) struct RBasic *obj, *value; puts("test_mrb_field_write_barrier"); - obj = RBASIC(mrb_ary_new(mrb)); - value = RBASIC(mrb_str_new_cstr(mrb, "value")); + obj = mrb_basic(mrb_ary_new(mrb)); + value = mrb_basic(mrb_str_new_cstr(mrb, "value")); paint_black(obj); paint_partial_white(mrb,value); @@ -1118,15 +1118,15 @@ test_mrb_field_write_barrier(void) { puts("test_mrb_field_write_barrier_value"); - obj = RBASIC(mrb_ary_new(mrb)); + obj = mrb_basic(mrb_ary_new(mrb)); mrb_value value = mrb_str_new_cstr(mrb, "value"); paint_black(obj); - paint_partial_white(mrb, RBASIC(value)); + paint_partial_white(mrb, mrb_basic(value)); mrb->gc_state = GC_STATE_MARK; mrb_field_write_barrier_value(mrb, obj, value); - gc_assert(is_gray(RBASIC(value))); + gc_assert(is_gray(mrb_basic(value))); } mrb_close(mrb); @@ -1139,7 +1139,7 @@ test_mrb_write_barrier(void) struct RBasic *obj; puts("test_mrb_write_barrier"); - obj = RBASIC(mrb_ary_new(mrb)); + obj = mrb_basic(mrb_ary_new(mrb)); paint_black(obj); puts(" in GC_STATE_MARK"); @@ -1167,12 +1167,12 @@ test_add_gray_list(void) puts("test_add_gray_list"); gc_assert(mrb->gray_list == NULL); - obj1 = RBASIC(mrb_str_new_cstr(mrb, "test")); + obj1 = mrb_basic(mrb_str_new_cstr(mrb, "test")); add_gray_list(mrb, obj1); gc_assert(mrb->gray_list == obj1); gc_assert(is_gray(obj1)); - obj2 = RBASIC(mrb_str_new_cstr(mrb, "test")); + obj2 = mrb_basic(mrb_str_new_cstr(mrb, "test")); add_gray_list(mrb, obj2); gc_assert(mrb->gray_list == obj2); gc_assert(mrb->gray_list->gcnext == obj1); @@ -1201,12 +1201,12 @@ test_gc_gray_mark(void) puts(" in MRB_TT_ARRAY"); obj_v = mrb_ary_new(mrb); value_v = mrb_str_new_cstr(mrb, "test"); - paint_gray(RBASIC(obj_v)); - paint_partial_white(mrb, RBASIC(value_v)); + paint_gray(mrb_basic(obj_v)); + paint_partial_white(mrb, mrb_basic(value_v)); mrb_ary_push(mrb, obj_v, value_v); - gray_num = gc_gray_mark(mrb, RBASIC(obj_v)); - gc_assert(is_black(RBASIC(obj_v))); - gc_assert(is_gray(RBASIC(value_v))); + gray_num = gc_gray_mark(mrb, mrb_basic(obj_v)); + gc_assert(is_black(mrb_basic(obj_v))); + gc_assert(is_gray(mrb_basic(value_v))); gc_assert(gray_num == 1); mrb_close(mrb); diff --git a/src/kernel.c b/src/kernel.c index 043551ccc..ac3c10f46 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -269,7 +269,7 @@ mrb_obj_class_m(mrb_state *mrb, mrb_value self) struct RClass* mrb_singleton_class_clone(mrb_state *mrb, mrb_value obj) { - struct RClass *klass = RBASIC(obj)->c; + struct RClass *klass = mrb_basic(obj)->c; if (klass->tt != MRB_TT_SCLASS) return klass; diff --git a/src/re.c b/src/re.c index e2363d07a..091c35f61 100644 --- a/src/re.c +++ b/src/re.c @@ -344,8 +344,8 @@ mrb_reg_options(mrb_state *mrb, mrb_value re) mrb_reg_check(mrb, re); options = RREGEXP(re)->ptr->options & ARG_REG_OPTION_MASK; - if (RBASIC(re)->flags & KCODE_FIXED) options |= ARG_ENCODING_FIXED; - if (RBASIC(re)->flags & REG_ENCODING_NONE) options |= ARG_ENCODING_NONE; + if (mrb_basic(re)->flags & KCODE_FIXED) options |= ARG_ENCODING_FIXED; + if (mrb_basic(re)->flags & REG_ENCODING_NONE) options |= ARG_ENCODING_NONE; return options; } @@ -361,7 +361,7 @@ mrb_reg_desc(mrb_state *mrb, const char *s, long len, mrb_value re) mrb_reg_check(mrb, re); if (*option_to_str(opts, RREGEXP(re)->ptr->options)) mrb_str_buf_cat(mrb, str, opts, strlen(opts));//mrb_str_buf_cat2(str, opts); - if (RBASIC(re)->flags & REG_ENCODING_NONE) + if (mrb_basic(re)->flags & REG_ENCODING_NONE) mrb_str_buf_cat(mrb, str, "n", 1); } diff --git a/src/string.c b/src/string.c index 055e5aace..760b02883 100644 --- a/src/string.c +++ b/src/string.c @@ -1317,7 +1317,7 @@ str_gsub(mrb_state *mrb, mrb_value str, mrb_int bang) mrb_str_buf_cat(mrb, dest, cp, RSTRING_LEN(str) - offset); } mrb_reg_search(mrb, pat, str, last, 0); - RBASIC(dest)->c = mrb_obj_class(mrb, str); + mrb_basic(dest)->c = mrb_obj_class(mrb, str); return str; } -- cgit v1.2.3