mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* numeric.c (fix_lshift): negative shift count means right shift.
* numeric.c (fix_rshift): return -1 when left side operand is negative. * parse.y (yylex): `0_' should be an error. (ruby-bugs-ja:PR#239) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2535 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
abca067fb6
commit
31de741673
3 changed files with 20 additions and 2 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
Mon Jun 10 19:02:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
|
||||||
|
|
||||||
|
* numeric.c (fix_lshift): negative shift count means right shift.
|
||||||
|
|
||||||
|
* numeric.c (fix_rshift): return -1 when left side operand is
|
||||||
|
negative.
|
||||||
|
|
||||||
|
* parse.y (yylex): `0_' should be an error. (ruby-bugs-ja:PR#239)
|
||||||
|
|
||||||
Sun Jun 9 17:40:41 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
|
Sun Jun 9 17:40:41 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
|
||||||
|
|
||||||
* ext/dl: change the callback mechanism.
|
* ext/dl: change the callback mechanism.
|
||||||
|
|
|
@ -1422,6 +1422,8 @@ fix_xor(x, y)
|
||||||
return rb_int2inum(val);
|
return rb_int2inum(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE fix_rshift _((VALUE, VALUE));
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
fix_lshift(x, y)
|
fix_lshift(x, y)
|
||||||
VALUE x, y;
|
VALUE x, y;
|
||||||
|
@ -1430,6 +1432,8 @@ fix_lshift(x, y)
|
||||||
|
|
||||||
val = NUM2LONG(x);
|
val = NUM2LONG(x);
|
||||||
width = NUM2LONG(y);
|
width = NUM2LONG(y);
|
||||||
|
if (width < 0)
|
||||||
|
return fix_rshift(x, INT2FIX(-width));
|
||||||
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);
|
||||||
|
@ -1448,11 +1452,12 @@ fix_rshift(x, 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 == 0) return x;
|
||||||
|
val = FIX2LONG(x);
|
||||||
if (i >= sizeof(long)*CHAR_BIT-1) {
|
if (i >= sizeof(long)*CHAR_BIT-1) {
|
||||||
if (i < 0) return INT2FIX(-1);
|
if (val < 0) return INT2FIX(-1);
|
||||||
return INT2FIX(0);
|
return INT2FIX(0);
|
||||||
}
|
}
|
||||||
val = RSHIFT(FIX2LONG(x), i);
|
val = RSHIFT(val, i);
|
||||||
return INT2FIX(val);
|
return INT2FIX(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
parse.y
4
parse.y
|
@ -3491,6 +3491,10 @@ yylex()
|
||||||
yylval.val = rb_cstr_to_inum(tok(), 8, Qfalse);
|
yylval.val = rb_cstr_to_inum(tok(), 8, Qfalse);
|
||||||
return tINTEGER;
|
return tINTEGER;
|
||||||
}
|
}
|
||||||
|
if (nondigit) {
|
||||||
|
pushback(c);
|
||||||
|
goto trailing_uc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (c > '7' && c <= '9') {
|
if (c > '7' && c <= '9') {
|
||||||
yyerror("Illegal octal digit");
|
yyerror("Illegal octal digit");
|
||||||
|
|
Loading…
Add table
Reference in a new issue