summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-21 08:12:07 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-21 08:12:07 +0000
commit1c770e707762d6737d7f0c297c2fb8b362fa0099 (patch)
treeed0c91c800c00f817124dafb748fcf621501c320
parentff7e65eb845069ab1d865b61e6fe8a989c41c800 (diff)
* 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
-rw-r--r--ChangeLog5
-rw-r--r--parse.y19
2 files changed, 24 insertions, 0 deletions
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 <usa@ruby-lang.org>
* instruby.rb: use real interpreter pathname at shebang line.
[ruby-dev:19370]
+Tue Jan 21 16:22:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): put back old ** behavior for negative number
+ right operand.
+
Tue Jan 21 14:46:12 2003 Tanaka Akira <akr@m17n.org>
* 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
{