From 1979d9ae1f7e6c2f0d3016a40064bda0a64d09f1 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 18 Jun 2002 06:29:07 +0000 Subject: * parse.y (yylex): obsolete '?'; use '?\s', '?\n', etc, instead. * parse.y (yylex): no here document after a dot. * parse.y (yylex): should have set lex_state after '`'. * parse.y (yylex): should have set lex_state properly after tOP_ASGN. * bignum.c (rb_big2dbl): return canonical HUGE_VAL for infinity. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2579 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 18 ++++++++++++++++ bignum.c | 3 +++ ext/curses/view2.rb | 2 +- parse.y | 62 +++++++++++++++++++++++++++++++++++++++++------------ range.c | 2 +- string.c | 7 +++++- 6 files changed, 77 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index e43d4da8d4..0a84a4796a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,12 +13,26 @@ Mon Jun 17 10:51:37 2002 Nobuyoshi Nakada * dln.c (dln_load): need to preserve dln_strerror() result, calling other dl family can clear it. +Sat Jun 15 22:56:37 2002 Yukihiro Matsumoto + + * parse.y (yylex): obsolete '?'; use '?\s', '?\n', + etc, instead. + Sat Jun 15 18:51:13 2002 Akinori MUSHA * dir.c (glob_helper): Use lstat() instead of stat() so it catches a dead symlink. Given a dead symlink named "a", Dir.glob("?") did catch it but Dir.glob("a") somehow didn't. +Sat Jun 15 01:59:05 2002 Yukihiro Matsumoto + + * parse.y (yylex): no here document after a dot. + + * parse.y (yylex): should have set lex_state after '`'. + + * parse.y (yylex): should have set lex_state properly after + tOP_ASGN. + Fri Jun 14 21:01:48 2002 KONISHI Hiromasa * bcc32/mkexports.rb: insert sleep(1) for win9x. @@ -36,6 +50,10 @@ Fri Jun 14 15:22:19 2002 Nobuyoshi Nakada * regex.c (re_compile_pattern): ditto. +Fri Jun 14 00:49:54 2002 Yukihiro Matsumoto + + * bignum.c (rb_big2dbl): return canonical HUGE_VAL for infinity. + Thu Jun 13 09:43:37 2002 Yukihiro Matsumoto * eval.c (svalue_to_avalue): v may be Qundef. This fix was diff --git a/bignum.c b/bignum.c index 71e33470fd..132b611be1 100644 --- a/bignum.c +++ b/bignum.c @@ -798,6 +798,7 @@ rb_big2dbl(x) while (i--) { d = ds[i] + BIGRAD*d; } + if (isinf(d)) d = HUGE_VAL; if (!RBIGNUM(x)->sign) d = -d; return d; } @@ -855,6 +856,8 @@ static VALUE rb_big_eq(x, y) VALUE x, y; { + double d; + switch (TYPE(y)) { case T_FIXNUM: y = rb_int2big(FIX2LONG(y)); diff --git a/ext/curses/view2.rb b/ext/curses/view2.rb index f953cdf7f5..18d9619216 100644 --- a/ext/curses/view2.rb +++ b/ext/curses/view2.rb @@ -77,7 +77,7 @@ while true result = scroll_down when Curses::KEY_UP, Curses::KEY_CTRL_P result = scroll_up - when Curses::KEY_NPAGE, ? # white space + when Curses::KEY_NPAGE, ?\s # white space for i in 0..($screen.maxy - 2) if( ! scroll_down ) if( i == 0 ) diff --git a/parse.y b/parse.y index 0aec9f1b3b..3dbc48f82a 100644 --- a/parse.y +++ b/parse.y @@ -3092,8 +3092,8 @@ yylex() case '*': if ((c = nextc()) == '*') { if ((c = nextc()) == '=') { - lex_state = EXPR_BEG; yylval.id = tPOW; + lex_state = EXPR_BEG; return tOP_ASGN; } pushback(c); @@ -3184,8 +3184,9 @@ yylex() c = nextc(); if (c == '<' && lex_state != EXPR_END && - lex_state != EXPR_ENDARG - && lex_state != EXPR_CLASS && + lex_state != EXPR_DOT && + lex_state != EXPR_ENDARG && + lex_state != EXPR_CLASS && (!IS_ARG() || space_seen)) { int c2 = nextc(); int indent = 0; @@ -3216,8 +3217,8 @@ yylex() } if (c == '<') { if ((c = nextc()) == '=') { - lex_state = EXPR_BEG; yylval.id = tLSHFT; + lex_state = EXPR_BEG; return tOP_ASGN; } pushback(c); @@ -3238,8 +3239,8 @@ yylex() } if (c == '>') { if ((c = nextc()) == '=') { - lex_state = EXPR_BEG; yylval.id = tRSHFT; + lex_state = EXPR_BEG; return tOP_ASGN; } pushback(c); @@ -3250,9 +3251,19 @@ yylex() case '"': return parse_string(c,c,0); + case '`': - if (lex_state == EXPR_FNAME) return c; - if (lex_state == EXPR_DOT) return c; + if (lex_state == EXPR_FNAME) { + lex_state = EXPR_END; + return c; + } + if (lex_state == EXPR_DOT) { + if (cmd_state) + lex_state = EXPR_CMDARG; + else + lex_state = EXPR_ARG; + return c; + } return parse_string(c,c,0); case '\'': @@ -3268,12 +3279,32 @@ yylex() rb_compile_error("incomplete character syntax"); return 0; } - if (IS_ARG() && ISSPACE(c)){ + if (ISSPACE(c)){ + if (!IS_ARG()){ + int c = 0; + switch (c) { + case ' ': + c = 's'; + break; + case '\n': + c = 'n'; + break; + case '\t': + c = 't'; + break; + case '\v': + c = 'v'; + break; + } + if (c) { + rb_warn("invalid character syntax; use ?\\%c", c); + } + } pushback(c); lex_state = EXPR_BEG; return '?'; } - if (c == '\\') { + else if (c == '\\') { c = read_escape(); } c &= 0xff; @@ -3286,6 +3317,7 @@ yylex() lex_state = EXPR_BEG; if ((c = nextc()) == '=') { yylval.id = tANDOP; + lex_state = EXPR_BEG; return tOP_ASGN; } pushback(c); @@ -3320,14 +3352,15 @@ yylex() lex_state = EXPR_BEG; if ((c = nextc()) == '=') { yylval.id = tOROP; + lex_state = EXPR_BEG; return tOP_ASGN; } pushback(c); return tOROP; } if (c == '=') { - lex_state = EXPR_BEG; yylval.id = '|'; + lex_state = EXPR_BEG; return tOP_ASGN; } if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { @@ -3350,8 +3383,8 @@ yylex() return '+'; } if (c == '=') { - lex_state = EXPR_BEG; yylval.id = '+'; + lex_state = EXPR_BEG; return tOP_ASGN; } if (lex_state == EXPR_BEG || lex_state == EXPR_MID || @@ -3380,8 +3413,8 @@ yylex() return '-'; } if (c == '=') { - lex_state = EXPR_BEG; yylval.id = '-'; + lex_state = EXPR_BEG; return tOP_ASGN; } if (lex_state == EXPR_BEG || lex_state == EXPR_MID || @@ -3630,8 +3663,8 @@ yylex() return parse_regx('/', '/'); } if ((c = nextc()) == '=') { - lex_state = EXPR_BEG; yylval.id = '/'; + lex_state = EXPR_BEG; return tOP_ASGN; } pushback(c); @@ -3651,8 +3684,8 @@ yylex() case '^': if ((c = nextc()) == '=') { - lex_state = EXPR_BEG; yylval.id = '^'; + lex_state = EXPR_BEG; return tOP_ASGN; } switch (lex_state) { @@ -3800,6 +3833,7 @@ yylex() } if ((c = nextc()) == '=') { yylval.id = '%'; + lex_state = EXPR_BEG; return tOP_ASGN; } if (IS_ARG() && space_seen && !ISSPACE(c)) { diff --git a/range.c b/range.c index 436486f8c5..4db96f4f34 100644 --- a/range.c +++ b/range.c @@ -495,7 +495,7 @@ Init_Range() rb_include_module(rb_cRange, rb_mEnumerable); rb_define_method(rb_cRange, "initialize", range_initialize, -1); rb_define_method(rb_cRange, "==", range_eq, 1); - rb_define_method(rb_cRange, "===", range_member, 1); + rb_define_method(rb_cRange, "===", range_include, 1); rb_define_method(rb_cRange, "eql?", range_eql, 1); rb_define_method(rb_cRange, "hash", range_hash, 0); rb_define_method(rb_cRange, "each", range_each, 0); diff --git a/string.c b/string.c index 8abce208bf..9894423f80 100644 --- a/string.c +++ b/string.c @@ -2991,11 +2991,16 @@ rb_str_crypt(str, salt) VALUE str, salt; { extern char *crypt(); + VALUE result; StringValue(salt); if (RSTRING(salt)->len < 2) rb_raise(rb_eArgError, "salt too short(need >=2 bytes)"); - return rb_tainted_str_new2(crypt(RSTRING(str)->ptr, RSTRING(salt)->ptr)); + + result = rb_str_new2(crypt(RSTRING(str)->ptr, RSTRING(salt)->ptr)); + OBJ_INFECT(result, str); + OBJ_INFECT(result, salt); + return result; } static VALUE -- cgit v1.2.3