mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Make RATIONAL_SET_{NUM,DEN} static inline functions
This commit is contained in:
parent
8ab11096ef
commit
019a0ed0c7
3 changed files with 21 additions and 7 deletions
|
@ -11,6 +11,7 @@
|
||||||
*/
|
*/
|
||||||
#include "ruby/config.h" /* for HAVE_LIBGMP */
|
#include "ruby/config.h" /* for HAVE_LIBGMP */
|
||||||
#include "ruby/ruby.h" /* for struct RBasic */
|
#include "ruby/ruby.h" /* for struct RBasic */
|
||||||
|
#include "internal/gc.h" /* for RB_OBJ_WRITE */
|
||||||
|
|
||||||
struct RRational {
|
struct RRational {
|
||||||
struct RBasic basic;
|
struct RBasic basic;
|
||||||
|
@ -19,8 +20,6 @@ struct RRational {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define RRATIONAL(obj) (R_CAST(RRational)(obj))
|
#define RRATIONAL(obj) (R_CAST(RRational)(obj))
|
||||||
#define RRATIONAL_SET_NUM(rat, n) RB_OBJ_WRITE((rat), &RRATIONAL(rat)->num, (n))
|
|
||||||
#define RRATIONAL_SET_DEN(rat, d) RB_OBJ_WRITE((rat), &RRATIONAL(rat)->den, (d))
|
|
||||||
|
|
||||||
/* rational.c */
|
/* rational.c */
|
||||||
VALUE rb_rational_canonicalize(VALUE x);
|
VALUE rb_rational_canonicalize(VALUE x);
|
||||||
|
@ -37,6 +36,9 @@ VALUE rb_numeric_quo(VALUE x, VALUE y);
|
||||||
VALUE rb_float_numerator(VALUE x);
|
VALUE rb_float_numerator(VALUE x);
|
||||||
VALUE rb_float_denominator(VALUE x);
|
VALUE rb_float_denominator(VALUE x);
|
||||||
|
|
||||||
|
static inline void RATIONAL_SET_NUM(VALUE r, VALUE n);
|
||||||
|
static inline void RATIONAL_SET_DEN(VALUE r, VALUE d);
|
||||||
|
|
||||||
RUBY_SYMBOL_EXPORT_BEGIN
|
RUBY_SYMBOL_EXPORT_BEGIN
|
||||||
/* rational.c (export) */
|
/* rational.c (export) */
|
||||||
VALUE rb_gcd(VALUE x, VALUE y);
|
VALUE rb_gcd(VALUE x, VALUE y);
|
||||||
|
@ -46,4 +48,16 @@ VALUE rb_gcd_gmp(VALUE x, VALUE y);
|
||||||
#endif
|
#endif
|
||||||
RUBY_SYMBOL_EXPORT_END
|
RUBY_SYMBOL_EXPORT_END
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
RATIONAL_SET_NUM(VALUE r, VALUE n)
|
||||||
|
{
|
||||||
|
RB_OBJ_WRITE(r, &RRATIONAL(r)->num, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
RATIONAL_SET_DEN(VALUE r, VALUE d)
|
||||||
|
{
|
||||||
|
RB_OBJ_WRITE(r, &RRATIONAL(r)->den, d);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* INTERNAL_RATIONAL_H */
|
#endif /* INTERNAL_RATIONAL_H */
|
||||||
|
|
2
parse.y
2
parse.y
|
@ -11240,7 +11240,7 @@ negate_lit(struct parser_params *p, VALUE lit)
|
||||||
lit = rb_big_norm(lit);
|
lit = rb_big_norm(lit);
|
||||||
break;
|
break;
|
||||||
case T_RATIONAL:
|
case T_RATIONAL:
|
||||||
RRATIONAL_SET_NUM(lit, negate_lit(p, RRATIONAL(lit)->num));
|
RATIONAL_SET_NUM(lit, negate_lit(p, RRATIONAL(lit)->num));
|
||||||
break;
|
break;
|
||||||
case T_COMPLEX:
|
case T_COMPLEX:
|
||||||
RCOMPLEX_SET_REAL(lit, negate_lit(p, RCOMPLEX(lit)->real));
|
RCOMPLEX_SET_REAL(lit, negate_lit(p, RCOMPLEX(lit)->real));
|
||||||
|
|
|
@ -403,8 +403,8 @@ nurat_s_new_internal(VALUE klass, VALUE num, VALUE den)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(obj, struct RRational, klass, T_RATIONAL | (RGENGC_WB_PROTECTED_RATIONAL ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(obj, struct RRational, klass, T_RATIONAL | (RGENGC_WB_PROTECTED_RATIONAL ? FL_WB_PROTECTED : 0));
|
||||||
|
|
||||||
RRATIONAL_SET_NUM(obj, num);
|
RATIONAL_SET_NUM((VALUE)obj, num);
|
||||||
RRATIONAL_SET_DEN(obj, den);
|
RATIONAL_SET_DEN((VALUE)obj, den);
|
||||||
OBJ_FREEZE_RAW(obj);
|
OBJ_FREEZE_RAW(obj);
|
||||||
|
|
||||||
return (VALUE)obj;
|
return (VALUE)obj;
|
||||||
|
@ -1836,8 +1836,8 @@ nurat_loader(VALUE self, VALUE a)
|
||||||
nurat_int_check(num);
|
nurat_int_check(num);
|
||||||
nurat_int_check(den);
|
nurat_int_check(den);
|
||||||
nurat_canonicalize(&num, &den);
|
nurat_canonicalize(&num, &den);
|
||||||
RRATIONAL_SET_NUM(dat, num);
|
RATIONAL_SET_NUM((VALUE)dat, num);
|
||||||
RRATIONAL_SET_DEN(dat, den);
|
RATIONAL_SET_DEN((VALUE)dat, den);
|
||||||
OBJ_FREEZE_RAW(self);
|
OBJ_FREEZE_RAW(self);
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|
Loading…
Add table
Reference in a new issue