* include/ruby/ruby.h: constify RRational::(num,den) and

RComplex::(real,imag).
  Add macro to set these values:
* RRATIONAL_SET_NUM()
* RRATIONAL_SET_DEN()
* RCOMPLEX_SET_REAL()
* RCOMPLEX_SET_IMAG()
  This change is a part of RGENGC branch [ruby-trunk - Feature #8339].
  TODO: API design. RRATIONAL_SET(rat,num,den) is enough?
  TODO: Setting constify variable with cast has same issue of r40691.
* complex.c, rational.c: use above macros.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2013-05-13 15:55:09 +00:00
Родитель 8ccd658e54
Коммит 89e6910f04
4 изменённых файлов: 34 добавлений и 12 удалений

Просмотреть файл

@ -1,3 +1,19 @@
Tue May 14 00:48:55 2013 Koichi Sasada <ko1@atdot.net>
* include/ruby/ruby.h: constify RRational::(num,den) and
RComplex::(real,imag).
Add macro to set these values:
* RRATIONAL_SET_NUM()
* RRATIONAL_SET_DEN()
* RCOMPLEX_SET_REAL()
* RCOMPLEX_SET_IMAG()
This change is a part of RGENGC branch [ruby-trunk - Feature #8339].
TODO: API design. RRATIONAL_SET(rat,num,den) is enough?
TODO: Setting constify variable with cast has same issue of r40691.
* complex.c, rational.c: use above macros.
Mon May 13 21:49:17 2013 Tanaka Akira <akr@fsij.org>
* ext/socket/extconf.rb: Check socketpair again.

Просмотреть файл

@ -315,8 +315,8 @@ nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag)
{
NEWOBJ_OF(obj, struct RComplex, klass, T_COMPLEX);
obj->real = real;
obj->imag = imag;
RCOMPLEX_SET_REAL(obj, real);
RCOMPLEX_SET_IMAG(obj, imag);
return (VALUE)obj;
}
@ -1332,8 +1332,8 @@ nucomp_loader(VALUE self, VALUE a)
{
get_dat1(self);
dat->real = rb_ivar_get(a, id_i_real);
dat->imag = rb_ivar_get(a, id_i_imag);
RCOMPLEX_SET_REAL(dat, rb_ivar_get(a, id_i_real));
RCOMPLEX_SET_IMAG(dat, rb_ivar_get(a, id_i_imag));
return self;
}

Просмотреть файл

@ -931,16 +931,22 @@ struct RFile {
struct RRational {
struct RBasic basic;
VALUE num;
VALUE den;
const VALUE num;
const VALUE den;
};
#define RRATIONAL_SET_NUM(rat, n) (*((VALUE *)(&((struct RRational *)(rat))->num)) = (n))
#define RRATIONAL_SET_DEN(rat, d) (*((VALUE *)(&((struct RRational *)(rat))->den)) = (d))
struct RComplex {
struct RBasic basic;
VALUE real;
VALUE imag;
const VALUE real;
const VALUE imag;
};
#define RCOMPLEX_SET_REAL(cmp, r) (*((VALUE *)(&((struct RComplex *)(cmp))->real)) = (r))
#define RCOMPLEX_SET_IMAG(cmp, i) (*((VALUE *)(&((struct RComplex *)(cmp))->imag)) = (i))
struct RData {
struct RBasic basic;
void (*dmark)(void*);

Просмотреть файл

@ -370,8 +370,8 @@ nurat_s_new_internal(VALUE klass, VALUE num, VALUE den)
{
NEWOBJ_OF(obj, struct RRational, klass, T_RATIONAL);
obj->num = num;
obj->den = den;
RRATIONAL_SET_NUM(obj, num);
RRATIONAL_SET_DEN(obj, den);
return (VALUE)obj;
}
@ -1638,8 +1638,8 @@ nurat_loader(VALUE self, VALUE a)
{
get_dat1(self);
dat->num = rb_ivar_get(a, id_i_num);
dat->den = rb_ivar_get(a, id_i_den);
RRATIONAL_SET_NUM(dat, rb_ivar_get(a, id_i_num));
RRATIONAL_SET_DEN(dat, rb_ivar_get(a, id_i_den));
return self;
}