From 38d6470fca4c1af3192b533af67d84d86e35aba1 Mon Sep 17 00:00:00 2001 From: "fschneider@chromium.org" Date: Wed, 17 Mar 2010 09:58:28 +0000 Subject: [PATCH] Revert r4146. Add a special case in Math.round for a SMI result. Also change the imp... TBR=ager@chromium.org, Review URL: http://codereview.chromium.org/1042006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4156 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/runtime.cc | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/runtime.cc b/src/runtime.cc index 492bca794..4e4856dd8 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -5325,21 +5325,12 @@ static Object* Runtime_Math_round(Arguments args) { NoHandleAllocation ha; ASSERT(args.length() == 1); Counters::math_round.Increment(); - CONVERT_DOUBLE_CHECKED(x, args[0]); - - if (x > 0 && x < Smi::kMaxValue) { - return Smi::FromInt(static_cast(x + 0.5)); - } + CONVERT_DOUBLE_CHECKED(x, args[0]); if (signbit(x) && x >= -0.5) return Heap::minus_zero_value(); - - // if the magnitude is big enough, there's no place for fraction part. If we - // try to add 0.5 to this number, 1.0 will be added instead. - if (x >= 9007199254740991.0 || x <= -9007199254740991.0) { - return args[0]; - } - - return Heap::NumberFromDouble(floor(x + 0.5)); + double integer = ceil(x); + if (integer - x > 0.5) { integer -= 1.0; } + return Heap::NumberFromDouble(integer); } -- 2.34.1