Project

General

Profile

Feature #9888

Updated by shyouhei (Shyouhei Urabe) almost 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 
 ~~~

Back