From 22010642b24f2b3f2bfef1324c61764dcd8cc2fd Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 11 Jun 2002 07:02:23 +0000 Subject: * eval.c (rb_eval): ruby_frame->last_func may be null, if it's called outside of a method. * parse.y (arg): use INT2NUM, not INT2FIX for tUMINUS. * parse.y (arg): unnecessary negative tPOW treatment. * parse.y (tokadd_escape): wrong backslash escapement. * parse.y (stmt,arg): too much void value check. * parse.y (stmt,arg): need to check void value on rules which does not use node_assign(). * ext/socket/socket.c (ipaddr): need not to taint hostnames. * range.c (range_include): should be based on "<=>", whereas member? still is based on "each". * range.c (range_min,range_max): redefine methods based on "<=>". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- parse.y | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) (limited to 'parse.y') diff --git a/parse.y b/parse.y index f32dafebf1..44f40a2de0 100644 --- a/parse.y +++ b/parse.y @@ -435,7 +435,6 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | lhs '=' command_call { - value_expr($3); $$ = node_assign($1, $3); } | mlhs '=' command_call @@ -446,6 +445,7 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | var_lhs tOP_ASGN command_call { + value_expr($3); if ($1) { ID vid = $1->nd_vid; if ($2 == tOROP) { @@ -471,8 +471,10 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | primary_value '[' aref_args ']' tOP_ASGN command_call { - NODE *args = NEW_LIST($6); + NODE *args; + value_expr($5); + args = NEW_LIST($6); $3 = list_append($3, NEW_NIL()); list_concat(args, $3); if ($5 == tOROP) { @@ -486,6 +488,7 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | primary_value '.' tIDENTIFIER tOP_ASGN command_call { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -497,6 +500,7 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | primary_value '.' tCONSTANT tOP_ASGN command_call { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -508,6 +512,7 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -805,11 +810,11 @@ reswords : k__LINE__ | k__FILE__ | klBEGIN | klEND arg : lhs '=' arg { - value_expr($3); $$ = node_assign($1, $3); } | var_lhs tOP_ASGN arg { + value_expr($3); if ($1) { ID vid = $1->nd_vid; if ($2 == tOROP) { @@ -835,8 +840,10 @@ arg : lhs '=' arg } | primary_value '[' aref_args ']' tOP_ASGN arg { - NODE *args = NEW_LIST($6); + NODE *args; + value_expr($6); + args = NEW_LIST($6); $3 = list_append($3, NEW_NIL()); list_concat(args, $3); if ($5 == tOROP) { @@ -850,6 +857,7 @@ arg : lhs '=' arg } | primary_value '.' tIDENTIFIER tOP_ASGN arg { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -861,6 +869,7 @@ arg : lhs '=' arg } | primary_value '.' tCONSTANT tOP_ASGN arg { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -872,6 +881,7 @@ arg : lhs '=' arg } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -916,25 +926,7 @@ arg : lhs '=' arg } | arg tPOW arg { - int need_negate = Qfalse; - - if (nd_type($1) == NODE_LIT) { - switch (TYPE($1->nd_lit)) { - case T_FIXNUM: - case T_FLOAT: - case T_BIGNUM: - if (RTEST(rb_funcall($1->nd_lit,'<',1,INT2FIX(0)))) { - $1->nd_lit = rb_funcall($1->nd_lit,rb_intern("-@"),0,0); - need_negate = Qtrue; - } - default: - break; - } - } $$ = call_op($1, tPOW, 1, $3); - if (need_negate) { - $$ = call_op($$, tUMINUS, 0, 0); - } } | tUPLUS arg { @@ -950,7 +942,7 @@ arg : lhs '=' arg if ($2 && nd_type($2) == NODE_LIT && FIXNUM_P($2->nd_lit)) { long i = FIX2LONG($2->nd_lit); - $2->nd_lit = INT2FIX(-i); + $2->nd_lit = INT2NUM(-i); $$ = $2; } else { @@ -2540,7 +2532,7 @@ tokadd_escape(term) return -1; default: - if (c != '/' || c != term) + if (c != '\\' || c != term) tokadd('\\'); tokadd(c); } @@ -5517,3 +5509,4 @@ rb_lastline_set(val) special_local_set('_', val); } } +%% -- cgit v1.2.3