diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-06-11 07:02:23 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-06-11 07:02:23 +0000 |
commit | 22010642b24f2b3f2bfef1324c61764dcd8cc2fd (patch) | |
tree | dd8a8256032a8c6ef07ac3ae8c6464c11282f104 /parse.y | |
parent | a5fd4cec841d2ae50d2aaff8f564da4842d0984c (diff) |
* 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
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 41 |
1 files changed, 17 insertions, 24 deletions
@@ -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); } } +%% |