зеркало из https://github.com/github/ruby.git
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@802 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
7c4044501a
Коммит
6ad90f5ad4
22
ChangeLog
22
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
Mon Jul 3 13:15:02 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
|
* numeric.c (fix_divmod): x * d + m = y where d, m = x.divmod(y).
|
||||||
|
|
||||||
|
* bignum.c (rb_big_divmod): ditto.
|
||||||
|
|
||||||
|
* numeric.c (fixdivmod): does not depend C's undifined %
|
||||||
|
behavior. adopt to fmod(3m) behavior.
|
||||||
|
|
||||||
|
* numeric.c (flo_mod): modulo now reserves fmod(3m) behavior.
|
||||||
|
|
||||||
|
* numeric.c (num_remainder): 'deprecated' warning.
|
||||||
|
|
||||||
Mon Jul 3 10:27:28 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
|
Mon Jul 3 10:27:28 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
|
||||||
|
|
||||||
* configure.in: use AC_CANONICAL_SYSTEM.
|
* configure.in: use AC_CANONICAL_SYSTEM.
|
||||||
|
@ -14,6 +27,10 @@ Sun Jul 2 21:17:37 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
|
||||||
|
|
||||||
* util.c (ruby_mktemp): remove unused ruby_mktemp().
|
* util.c (ruby_mktemp): remove unused ruby_mktemp().
|
||||||
|
|
||||||
|
Sun Jul 2 14:18:04 2000 Koji Arai <JCA02266@nifty.ne.jp>
|
||||||
|
|
||||||
|
* eval.c (TMP_PROTECT_END): tmp__protect_tmp may be NULL.
|
||||||
|
|
||||||
Sun Jul 2 03:37:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
|
Sun Jul 2 03:37:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
|
||||||
|
|
||||||
* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.25.
|
* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.25.
|
||||||
|
@ -22,6 +39,11 @@ Sun Jul 2 03:37:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
|
||||||
|
|
||||||
* lib/net/smtp.rb: allow String for to_addr of SMTP#sendmail
|
* lib/net/smtp.rb: allow String for to_addr of SMTP#sendmail
|
||||||
|
|
||||||
|
Sat Jul 1 15:22:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
|
* numeric.c (fix_rshift): should handle shift value more than
|
||||||
|
sizeof(long).
|
||||||
|
|
||||||
Sat Jul 1 15:22:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
|
Sat Jul 1 15:22:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
* eval.c (rb_eval): the value from RTEST() is not valid Ruby
|
* eval.c (rb_eval): the value from RTEST() is not valid Ruby
|
||||||
|
|
32
bignum.c
32
bignum.c
|
@ -777,10 +777,9 @@ rb_big_mul(x, y)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bigdivmod(x, y, div, mod, modulo)
|
bigdivmod(x, y, div, mod)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
VALUE *div, *mod;
|
VALUE *div, *mod;
|
||||||
int modulo;
|
|
||||||
{
|
{
|
||||||
long nx = RBIGNUM(x)->len, ny = RBIGNUM(y)->len;
|
long nx = RBIGNUM(x)->len, ny = RBIGNUM(y)->len;
|
||||||
long i, j;
|
long i, j;
|
||||||
|
@ -812,9 +811,6 @@ bigdivmod(x, y, div, mod, modulo)
|
||||||
if (div) *div = bignorm(z);
|
if (div) *div = bignorm(z);
|
||||||
if (mod) {
|
if (mod) {
|
||||||
if (!RBIGNUM(x)->sign) t2 = -(long)t2;
|
if (!RBIGNUM(x)->sign) t2 = -(long)t2;
|
||||||
if (modulo && RBIGNUM(x)->sign != RBIGNUM(y)->sign) {
|
|
||||||
t2 = t2 + yds[0] * (RBIGNUM(y)->sign ? 1 : -1);
|
|
||||||
}
|
|
||||||
*mod = INT2NUM(t2);
|
*mod = INT2NUM(t2);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -898,10 +894,6 @@ bigdivmod(x, y, div, mod, modulo)
|
||||||
}
|
}
|
||||||
RBIGNUM(*mod)->len = ny;
|
RBIGNUM(*mod)->len = ny;
|
||||||
RBIGNUM(*mod)->sign = RBIGNUM(x)->sign;
|
RBIGNUM(*mod)->sign = RBIGNUM(x)->sign;
|
||||||
if (modulo && RBIGNUM(x)->sign != RBIGNUM(y)->sign) {
|
|
||||||
*mod = bigadd(*mod, y, 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
*mod = bignorm(*mod);
|
*mod = bignorm(*mod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -933,9 +925,8 @@ rb_big_div(x, y)
|
||||||
|
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_big_modulo(x, y, modulo)
|
rb_big_mod(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
int modulo;
|
|
||||||
{
|
{
|
||||||
VALUE z;
|
VALUE z;
|
||||||
|
|
||||||
|
@ -954,25 +945,11 @@ rb_big_modulo(x, y, modulo)
|
||||||
default:
|
default:
|
||||||
return rb_num_coerce_bin(x, y);
|
return rb_num_coerce_bin(x, y);
|
||||||
}
|
}
|
||||||
bigdivmod(x, y, 0, &z, modulo);
|
bigdivmod(x, y, 0, &z);
|
||||||
|
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
|
||||||
rb_big_mod(x, y)
|
|
||||||
VALUE x, y;
|
|
||||||
{
|
|
||||||
return rb_big_modulo(x, y, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
rb_big_remainder(x, y)
|
|
||||||
VALUE x, y;
|
|
||||||
{
|
|
||||||
return rb_big_modulo(x, y, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_big_divmod(x, y)
|
rb_big_divmod(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
|
@ -994,7 +971,7 @@ rb_big_divmod(x, y)
|
||||||
default:
|
default:
|
||||||
return rb_num_coerce_bin(x, y);
|
return rb_num_coerce_bin(x, y);
|
||||||
}
|
}
|
||||||
bigdivmod(x, y, &div, &mod, 1);
|
bigdivmod(x, y, &div, &mod);
|
||||||
|
|
||||||
return rb_assoc_new(div, mod);
|
return rb_assoc_new(div, mod);
|
||||||
}
|
}
|
||||||
|
@ -1382,7 +1359,6 @@ Init_Bignum()
|
||||||
rb_define_method(rb_cBignum, "/", rb_big_div, 1);
|
rb_define_method(rb_cBignum, "/", rb_big_div, 1);
|
||||||
rb_define_method(rb_cBignum, "%", rb_big_mod, 1);
|
rb_define_method(rb_cBignum, "%", rb_big_mod, 1);
|
||||||
rb_define_method(rb_cBignum, "divmod", rb_big_divmod, 1);
|
rb_define_method(rb_cBignum, "divmod", rb_big_divmod, 1);
|
||||||
rb_define_method(rb_cBignum, "remainder", rb_big_remainder, 1);
|
|
||||||
rb_define_method(rb_cBignum, "**", rb_big_pow, 1);
|
rb_define_method(rb_cBignum, "**", rb_big_pow, 1);
|
||||||
rb_define_method(rb_cBignum, "&", rb_big_and, 1);
|
rb_define_method(rb_cBignum, "&", rb_big_and, 1);
|
||||||
rb_define_method(rb_cBignum, "|", rb_big_or, 1);
|
rb_define_method(rb_cBignum, "|", rb_big_or, 1);
|
||||||
|
|
6
eval.c
6
eval.c
|
@ -1539,8 +1539,10 @@ rb_mod_alias_method(mod, newname, oldname)
|
||||||
ALLOC_N(VALUE,n),tmp__protect_tmp,n), \
|
ALLOC_N(VALUE,n),tmp__protect_tmp,n), \
|
||||||
(void*)tmp__protect_tmp->nd_head)
|
(void*)tmp__protect_tmp->nd_head)
|
||||||
# define TMP_PROTECT_END do {\
|
# define TMP_PROTECT_END do {\
|
||||||
rb_gc_force_recycle((VALUE)tmp__protect_tmp);\
|
if (tmp__protect_tmp) {\
|
||||||
alloca(0);\
|
rb_gc_force_recycle((VALUE)tmp__protect_tmp);\
|
||||||
|
alloca(0);\
|
||||||
|
}\
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
# define TMP_PROTECT typedef int foobazzz
|
# define TMP_PROTECT typedef int foobazzz
|
||||||
|
|
182
numeric.c
182
numeric.c
|
@ -132,6 +132,14 @@ num_divmod(x, y)
|
||||||
return rb_assoc_new(div, mod);
|
return rb_assoc_new(div, mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
num_remainder(x, y)
|
||||||
|
VALUE x, y;
|
||||||
|
{
|
||||||
|
rb_warn("remainder is deprecated; use % opearator");
|
||||||
|
return rb_funcall(x, '%', 1, y);
|
||||||
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
num_int_p(num)
|
num_int_p(num)
|
||||||
VALUE num;
|
VALUE num;
|
||||||
|
@ -295,94 +303,73 @@ flo_div(x, y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static void
|
||||||
flo_modulo(x, y, modulo)
|
flodivmod(x, y, divp, modp)
|
||||||
VALUE x, y;
|
double x, y;
|
||||||
int modulo;
|
double *divp, *modp;
|
||||||
{
|
{
|
||||||
double value, result;
|
double mod;
|
||||||
|
|
||||||
switch (TYPE(y)) {
|
|
||||||
case T_FIXNUM:
|
|
||||||
value = (double)FIX2LONG(y);
|
|
||||||
break;
|
|
||||||
case T_BIGNUM:
|
|
||||||
value = rb_big2dbl(y);
|
|
||||||
break;
|
|
||||||
case T_FLOAT:
|
|
||||||
value = RFLOAT(y)->value;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return rb_num_coerce_bin(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_FMOD
|
#ifdef HAVE_FMOD
|
||||||
result = fmod(RFLOAT(x)->value, value);
|
mod = fmod(x, y);
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
double value1 = RFLOAT(x)->value;
|
double z;
|
||||||
double value2;
|
|
||||||
|
|
||||||
modf(value1/value, &value2);
|
modf(x/y, &);
|
||||||
result = value1 - value2 * value;
|
mod = x - z * x;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (modulo && value*result<0.0) {
|
if (modp) *modp = mod;
|
||||||
result += value;
|
if (divp) {
|
||||||
|
*divp = (x - mod) / y;
|
||||||
}
|
}
|
||||||
return rb_float_new(result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
flo_mod(x, y)
|
flo_mod(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
{
|
{
|
||||||
return flo_modulo(x,y,1);
|
double fy, mod;
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
switch (TYPE(y)) {
|
||||||
flo_remainder(x, y)
|
case T_FIXNUM:
|
||||||
VALUE x, y;
|
fy = (double)FIX2LONG(y);
|
||||||
{
|
break;
|
||||||
return flo_modulo(x,y,0);
|
case T_BIGNUM:
|
||||||
|
fy = rb_big2dbl(y);
|
||||||
|
break;
|
||||||
|
case T_FLOAT:
|
||||||
|
fy = RFLOAT(y)->value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return rb_num_coerce_bin(x, y);
|
||||||
|
}
|
||||||
|
flodivmod(RFLOAT(x)->value, fy, 0, &mod);
|
||||||
|
return rb_float_new(mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
flo_divmod(x, y)
|
flo_divmod(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
{
|
{
|
||||||
double value, div, mod;
|
double fy;
|
||||||
|
VALUE div, mod;
|
||||||
|
|
||||||
switch (TYPE(y)) {
|
switch (TYPE(y)) {
|
||||||
case T_FIXNUM:
|
case T_FIXNUM:
|
||||||
value = (double)FIX2LONG(y);
|
fy = (double)FIX2LONG(y);
|
||||||
break;
|
break;
|
||||||
case T_BIGNUM:
|
case T_BIGNUM:
|
||||||
value = rb_big2dbl(y);
|
fy = rb_big2dbl(y);
|
||||||
break;
|
break;
|
||||||
case T_FLOAT:
|
case T_FLOAT:
|
||||||
value = RFLOAT(y)->value;
|
fy = RFLOAT(y)->value;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return rb_num_coerce_bin(x, y);
|
return rb_num_coerce_bin(x, y);
|
||||||
}
|
}
|
||||||
|
flodivmod(RFLOAT(x)->value, fy, &div, &mod);
|
||||||
#ifdef HAVE_FMOD
|
|
||||||
mod = fmod(RFLOAT(x)->value, value);
|
|
||||||
#else
|
|
||||||
{
|
|
||||||
double value1 = RFLOAT(x)->value;
|
|
||||||
double value2;
|
|
||||||
|
|
||||||
modf(value1/value, &value2);
|
|
||||||
mod = value1 - value2 * value;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
div = (RFLOAT(x)->value - mod) / value;
|
|
||||||
if (value*mod<0.0) {
|
|
||||||
mod += value;
|
|
||||||
div -= 1.0;
|
|
||||||
}
|
|
||||||
return rb_assoc_new(rb_float_new(div), rb_float_new(mod));
|
return rb_assoc_new(rb_float_new(div), rb_float_new(mod));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1010,37 +997,40 @@ fix_mul(x, y)
|
||||||
return rb_num_coerce_bin(x, y);
|
return rb_num_coerce_bin(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fixdivmod(x, y, divp, modp)
|
||||||
|
long x, y;
|
||||||
|
long *divp, *modp;
|
||||||
|
{
|
||||||
|
long div, mod;
|
||||||
|
|
||||||
|
if (y == 0) rb_num_zerodiv();
|
||||||
|
if (y < 0) {
|
||||||
|
if (x < 0)
|
||||||
|
div = -x / -y;
|
||||||
|
else
|
||||||
|
div = - (x / -y);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (x < 0)
|
||||||
|
div = - (-x / y);
|
||||||
|
else
|
||||||
|
div = x / y;
|
||||||
|
}
|
||||||
|
mod = x - div*y;
|
||||||
|
if (divp) *divp = div;
|
||||||
|
if (modp) *modp = mod;
|
||||||
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
fix_div(x, y)
|
fix_div(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
{
|
{
|
||||||
if (FIXNUM_P(y)) {
|
if (FIXNUM_P(y)) {
|
||||||
long i;
|
long div;
|
||||||
|
|
||||||
i = FIX2LONG(y);
|
fixdivmod(FIX2LONG(x), FIX2LONG(y), &div, 0);
|
||||||
if (i == 0) rb_num_zerodiv();
|
return INT2NUM(div);
|
||||||
i = FIX2LONG(x)/i;
|
|
||||||
return INT2NUM(i); /* FIXNUM_MIN / -1 > FIXNUM_MAX */
|
|
||||||
}
|
|
||||||
return rb_num_coerce_bin(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
fix_modulo(x, y, modulo)
|
|
||||||
VALUE x, y;
|
|
||||||
{
|
|
||||||
long i;
|
|
||||||
|
|
||||||
if (FIXNUM_P(y)) {
|
|
||||||
i = FIX2LONG(y);
|
|
||||||
if (i == 0) rb_num_zerodiv();
|
|
||||||
i = FIX2LONG(x)%i;
|
|
||||||
if (modulo &&
|
|
||||||
(FIX2LONG(x) < 0) != (FIX2LONG(y) < 0) &&
|
|
||||||
i != 0) {
|
|
||||||
i += FIX2LONG(y);
|
|
||||||
}
|
|
||||||
return INT2FIX(i);
|
|
||||||
}
|
}
|
||||||
return rb_num_coerce_bin(x, y);
|
return rb_num_coerce_bin(x, y);
|
||||||
}
|
}
|
||||||
|
@ -1049,14 +1039,27 @@ static VALUE
|
||||||
fix_mod(x, y)
|
fix_mod(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
{
|
{
|
||||||
return fix_modulo(x, y, 1);
|
if (FIXNUM_P(y)) {
|
||||||
|
long mod;
|
||||||
|
|
||||||
|
fixdivmod(FIX2LONG(x), FIX2LONG(y), 0, &mod);
|
||||||
|
return INT2NUM(mod);
|
||||||
|
}
|
||||||
|
return rb_num_coerce_bin(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
fix_remainder(x, y)
|
fix_divmod(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
{
|
{
|
||||||
return fix_modulo(x, y, 0);
|
if (FIXNUM_P(y)) {
|
||||||
|
long div, mod;
|
||||||
|
|
||||||
|
fixdivmod(FIX2LONG(x), FIX2LONG(y), &div, &mod);
|
||||||
|
|
||||||
|
return rb_assoc_new(INT2NUM(div), INT2NUM(mod));
|
||||||
|
}
|
||||||
|
return rb_num_coerce_bin(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -1219,11 +1222,10 @@ static VALUE
|
||||||
fix_lshift(x, y)
|
fix_lshift(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
{
|
{
|
||||||
long val;
|
long val, width;
|
||||||
int width;
|
|
||||||
|
|
||||||
val = NUM2LONG(x);
|
val = NUM2LONG(x);
|
||||||
width = NUM2INT(y);
|
width = NUM2LONG(y);
|
||||||
if (width > (sizeof(VALUE)*CHAR_BIT-1)
|
if (width > (sizeof(VALUE)*CHAR_BIT-1)
|
||||||
|| ((unsigned long)val)>>(sizeof(VALUE)*CHAR_BIT-1-width) > 0) {
|
|| ((unsigned long)val)>>(sizeof(VALUE)*CHAR_BIT-1-width) > 0) {
|
||||||
return rb_big_lshift(rb_int2big(val), y);
|
return rb_big_lshift(rb_int2big(val), y);
|
||||||
|
@ -1241,6 +1243,11 @@ fix_rshift(x, y)
|
||||||
i = NUM2LONG(y);
|
i = NUM2LONG(y);
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
return fix_lshift(x, INT2FIX(-i));
|
return fix_lshift(x, INT2FIX(-i));
|
||||||
|
if (i == 0) return x;
|
||||||
|
if (i >= sizeof(long)*CHAR_BIT-1) {
|
||||||
|
if (i < 0) return INT2FIX(-1);
|
||||||
|
return INT2FIX(0);
|
||||||
|
}
|
||||||
val = RSHIFT(FIX2LONG(x), i);
|
val = RSHIFT(FIX2LONG(x), i);
|
||||||
return INT2FIX(val);
|
return INT2FIX(val);
|
||||||
}
|
}
|
||||||
|
@ -1536,7 +1543,7 @@ Init_Numeric()
|
||||||
rb_define_method(rb_cFixnum, "*", fix_mul, 1);
|
rb_define_method(rb_cFixnum, "*", fix_mul, 1);
|
||||||
rb_define_method(rb_cFixnum, "/", fix_div, 1);
|
rb_define_method(rb_cFixnum, "/", fix_div, 1);
|
||||||
rb_define_method(rb_cFixnum, "%", fix_mod, 1);
|
rb_define_method(rb_cFixnum, "%", fix_mod, 1);
|
||||||
rb_define_method(rb_cFixnum, "remainder", fix_remainder, 1);
|
rb_define_method(rb_cFixnum, "divmod", fix_divmod, 1);
|
||||||
rb_define_method(rb_cFixnum, "**", fix_pow, 1);
|
rb_define_method(rb_cFixnum, "**", fix_pow, 1);
|
||||||
|
|
||||||
rb_define_method(rb_cFixnum, "abs", fix_abs, 0);
|
rb_define_method(rb_cFixnum, "abs", fix_abs, 0);
|
||||||
|
@ -1586,7 +1593,6 @@ Init_Numeric()
|
||||||
rb_define_method(rb_cFloat, "/", flo_div, 1);
|
rb_define_method(rb_cFloat, "/", flo_div, 1);
|
||||||
rb_define_method(rb_cFloat, "%", flo_mod, 1);
|
rb_define_method(rb_cFloat, "%", flo_mod, 1);
|
||||||
rb_define_method(rb_cFloat, "divmod", flo_divmod, 1);
|
rb_define_method(rb_cFloat, "divmod", flo_divmod, 1);
|
||||||
rb_define_method(rb_cFloat, "remainder", flo_remainder, 1);
|
|
||||||
rb_define_method(rb_cFloat, "**", flo_pow, 1);
|
rb_define_method(rb_cFloat, "**", flo_pow, 1);
|
||||||
rb_define_method(rb_cFloat, "==", flo_eq, 1);
|
rb_define_method(rb_cFloat, "==", flo_eq, 1);
|
||||||
rb_define_method(rb_cFloat, "<=>", flo_cmp, 1);
|
rb_define_method(rb_cFloat, "<=>", flo_cmp, 1);
|
||||||
|
|
28
parse.y
28
parse.y
|
@ -426,7 +426,6 @@ expr : mlhs '=' mrhs
|
||||||
}
|
}
|
||||||
| '!' command_call
|
| '!' command_call
|
||||||
{
|
{
|
||||||
value_expr($2);
|
|
||||||
$$ = NEW_NOT(cond($2));
|
$$ = NEW_NOT(cond($2));
|
||||||
}
|
}
|
||||||
| arg
|
| arg
|
||||||
|
@ -849,13 +848,25 @@ arg : lhs '=' arg
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
aref_args : opt_call_args
|
aref_args : none
|
||||||
|
| args opt_nl
|
||||||
{
|
{
|
||||||
if ($1 && nd_type($1) == NODE_BLOCK_PASS) {
|
|
||||||
rb_compile_error("block argument should not be given");
|
|
||||||
}
|
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
}
|
}
|
||||||
|
| args ',' opt_nl
|
||||||
|
{
|
||||||
|
$$ = $1;
|
||||||
|
}
|
||||||
|
| args ',' tSTAR arg opt_nl
|
||||||
|
{
|
||||||
|
value_expr($4);
|
||||||
|
$$ = arg_concat($1, $4);
|
||||||
|
}
|
||||||
|
| tSTAR arg opt_nl
|
||||||
|
{
|
||||||
|
value_expr($2);
|
||||||
|
$$ = NEW_RESTARGS($2);
|
||||||
|
}
|
||||||
|
|
||||||
opt_call_args : none
|
opt_call_args : none
|
||||||
| call_args opt_nl
|
| call_args opt_nl
|
||||||
|
@ -864,10 +875,6 @@ call_args : command_call
|
||||||
{
|
{
|
||||||
$$ = NEW_LIST($1);
|
$$ = NEW_LIST($1);
|
||||||
}
|
}
|
||||||
| args ','
|
|
||||||
{
|
|
||||||
$$ = $1;
|
|
||||||
}
|
|
||||||
| args ',' command_call
|
| args ',' command_call
|
||||||
{
|
{
|
||||||
$$ = list_append($1, $3);
|
$$ = list_append($1, $3);
|
||||||
|
@ -878,6 +885,7 @@ call_args : command_call
|
||||||
}
|
}
|
||||||
| args ',' tSTAR arg opt_block_arg
|
| args ',' tSTAR arg opt_block_arg
|
||||||
{
|
{
|
||||||
|
value_expr($4);
|
||||||
$$ = arg_concat($1, $4);
|
$$ = arg_concat($1, $4);
|
||||||
$$ = arg_blk_pass($$, $5);
|
$$ = arg_blk_pass($$, $5);
|
||||||
}
|
}
|
||||||
|
@ -892,6 +900,7 @@ call_args : command_call
|
||||||
}
|
}
|
||||||
| assocs ',' tSTAR arg opt_block_arg
|
| assocs ',' tSTAR arg opt_block_arg
|
||||||
{
|
{
|
||||||
|
value_expr($4);
|
||||||
$$ = arg_concat(NEW_LIST(NEW_HASH($1)), $4);
|
$$ = arg_concat(NEW_LIST(NEW_HASH($1)), $4);
|
||||||
$$ = arg_blk_pass($$, $5);
|
$$ = arg_blk_pass($$, $5);
|
||||||
}
|
}
|
||||||
|
@ -906,6 +915,7 @@ call_args : command_call
|
||||||
}
|
}
|
||||||
| args ',' assocs ',' tSTAR arg opt_block_arg
|
| args ',' assocs ',' tSTAR arg opt_block_arg
|
||||||
{
|
{
|
||||||
|
value_expr($6);
|
||||||
$$ = arg_concat(list_append($1, NEW_HASH($3)), $6);
|
$$ = arg_concat(list_append($1, NEW_HASH($3)), $6);
|
||||||
$$ = arg_blk_pass($$, $7);
|
$$ = arg_blk_pass($$, $7);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче