Feature #9888
Updated by shyouhei (Shyouhei Urabe) over 10 years ago
~~~Patch From a0597ce1c083e6cdc96a548e5b654636023a1a2b 774261d2b6f4fc077ba041a1c6cfbed3f1bf282b Mon Sep 17 00:00:00 2001 From: "Urabe, Shyouhei" <shyouhei@ruby-lang.org> Date: Sat, 31 May 2014 21:48:10 +0900 Subject: [PATCH] Hide Complex internal So I agree with Eric and tried to hide RSymbol, but turned out that was already done by him :p Here you are the other (seemingly) okay struct to hide. Signed-off-by: Urabe, Shyouhei <shyouhei@ruby-lang.org> --- ChangeLog | 6 ++++++ 10 ++++++++++ complex.c | 21 ++++++++++++++++----- include/ruby/ruby.h | 10 ---------- 11 ++--------- internal.h | 8 ++++++++ 3 4 files changed, 36 insertions(+), 14 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7f8d338..0f83112 7f8d338..92d0e38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 +1,13 @@ +Sat May 31 21:47:40 2014 URABE Shyouhei <shyouhei@ruby-lang.org> + + * include/ruby/ruby.h (struct RComplex) : no longer. + + * internal.h (struct RComplex) : moved here. + + * complex.c (RCOMPLEX_SET_REAL): add compatibilty setter function. + + * complex.c (RCOMPLEX_SET_IMAG): ditto. + Sat May 31 16:32:50 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com> * lib/ipaddr.rb: extracted inline tests into test dir. diff --git a/complex.c b/complex.c index f9f9eed..bea5e1a 100644 --- a/complex.c +++ b/complex.c @@ -24,6 +24,16 @@ static ID id_abs, id_arg, id_convert, id_real_p, id_to_f, id_to_i, id_to_r, id_i_real, id_i_imag; +VALUE RCOMPLEX_SET_REAL(VALUE cmp, VALUE r) +{ + return RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->real,(r)); +} + +VALUE RCOMPLEX_SET_IMAG(VALUE cmp, VALUE i) +{ + return RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->imag,(i)); +} + #define f_boolcast(x) ((x) ? Qtrue : Qfalse) #define binop(n,op) \ @@ -272,11 +282,12 @@ inline static VALUE nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag) { NEWOBJ_OF(obj, struct RComplex, klass, T_COMPLEX | (RGENGC_WB_PROTECTED_COMPLEX ? FL_WB_PROTECTED : 0)); + VALUE ret = (VALUE)obj; - RCOMPLEX_SET_REAL(obj, real); - RCOMPLEX_SET_IMAG(obj, imag); + RCOMPLEX_SET_REAL(ret, real); + RCOMPLEX_SET_IMAG(ret, imag); - return (VALUE)obj; + return ret; } static VALUE @@ -1281,8 +1292,8 @@ nucomp_loader(VALUE self, VALUE a) { get_dat1(self); - RCOMPLEX_SET_REAL(dat, rb_ivar_get(a, id_i_real)); - RCOMPLEX_SET_IMAG(dat, rb_ivar_get(a, id_i_imag)); + RCOMPLEX_SET_REAL(self, rb_ivar_get(a, id_i_real)); + RCOMPLEX_SET_IMAG(self, rb_ivar_get(a, id_i_imag)); return self; } diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 7c7cb67..c412e9e 7c7cb67..a664217 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -943,15 +943,6 -943,14 +943,8 @@ struct RFile { struct rb_io_t *fptr; }; -struct RComplex { - struct RBasic basic; - const VALUE real; - const VALUE imag; -}; - -#define RCOMPLEX_SET_REAL(cmp, r) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->real,(r)) -#define RCOMPLEX_SET_IMAG(cmp, i) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->imag,(i)) - +VALUE RCOMPLEX_SET_REAL(VALUE cmp, VALUE r); +VALUE RCOMPLEX_SET_IMAG(VALUE cmp, VALUE i); struct RData { struct RBasic basic; void (*dmark)(void*); @@ -1086,7 +1077,6 +1080,6 @@ struct RStruct { #define RTYPEDDATA(obj) (R_CAST(RTypedData)(obj)) #define RSTRUCT(obj) (R_CAST(RStruct)(obj)) #define RFILE(obj) (R_CAST(RFile)(obj)) -#define RCOMPLEX(obj) (R_CAST(RComplex)(obj)) #define FL_SINGLETON FL_USER0 #define FL_WB_PROTECTED (((VALUE)1)<<5) diff --git a/internal.h b/internal.h index 2c1c6a3..3e09bbf 100644 --- a/internal.h +++ b/internal.h @@ -420,6 +420,14 @@ struct RSymbol { #define RSYMBOL(obj) (R_CAST(RSymbol)(obj)) +struct RComplex { + struct RBasic basic; + const VALUE real; + const VALUE imag; +}; + +#define RCOMPLEX(obj) (R_CAST(RComplex)(obj)) + /* class.c */ void rb_class_subclass_add(VALUE super, VALUE klass); void rb_class_remove_from_super_subclasses(VALUE); -- 1.9.1 ~~~