From 1c770e707762d6737d7f0c297c2fb8b362fa0099 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 21 Jan 2003 08:12:07 +0000 Subject: [PATCH] * parse.y (arg): put back old ** behavior for negative number right operand. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3385 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ parse.y | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/ChangeLog b/ChangeLog index d826ccd32d..584c382f47 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,11 @@ Tue Jan 21 16:59:18 2003 NAKAMURA Usaku * instruby.rb: use real interpreter pathname at shebang line. [ruby-dev:19370] +Tue Jan 21 16:22:32 2003 Yukihiro Matsumoto + + * parse.y (arg): put back old ** behavior for negative number + right operand. + Tue Jan 21 14:46:12 2003 Tanaka Akira * lib/pp.rb: Use Test::Unit. diff --git a/parse.y b/parse.y index 723c239ead..5bbcf06d64 100644 --- a/parse.y +++ b/parse.y @@ -1022,7 +1022,26 @@ arg : lhs '=' arg } | arg tPOW arg { + int need_negate = Qfalse; + + if ($1 && 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 {