Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(964)

Side by Side Diff: src/strtod.cc

Issue 382153003: Make UBSan happy. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebased Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/runtime.cc ('k') | src/utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdarg.h> 5 #include <stdarg.h>
6 #include <cmath> 6 #include <cmath>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/bignum.h" 10 #include "src/bignum.h"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 ReadDiyFp(buffer, &input, &remaining_decimals); 240 ReadDiyFp(buffer, &input, &remaining_decimals);
241 // Since we may have dropped some digits the input is not accurate. 241 // Since we may have dropped some digits the input is not accurate.
242 // If remaining_decimals is different than 0 than the error is at most 242 // If remaining_decimals is different than 0 than the error is at most
243 // .5 ulp (unit in the last place). 243 // .5 ulp (unit in the last place).
244 // We don't want to deal with fractions and therefore keep a common 244 // We don't want to deal with fractions and therefore keep a common
245 // denominator. 245 // denominator.
246 const int kDenominatorLog = 3; 246 const int kDenominatorLog = 3;
247 const int kDenominator = 1 << kDenominatorLog; 247 const int kDenominator = 1 << kDenominatorLog;
248 // Move the remaining decimals into the exponent. 248 // Move the remaining decimals into the exponent.
249 exponent += remaining_decimals; 249 exponent += remaining_decimals;
250 int error = (remaining_decimals == 0 ? 0 : kDenominator / 2); 250 int64_t error = (remaining_decimals == 0 ? 0 : kDenominator / 2);
251 251
252 int old_e = input.e(); 252 int old_e = input.e();
253 input.Normalize(); 253 input.Normalize();
254 error <<= old_e - input.e(); 254 error <<= old_e - input.e();
255 255
256 ASSERT(exponent <= PowersOfTenCache::kMaxDecimalExponent); 256 ASSERT(exponent <= PowersOfTenCache::kMaxDecimalExponent);
257 if (exponent < PowersOfTenCache::kMinDecimalExponent) { 257 if (exponent < PowersOfTenCache::kMinDecimalExponent) {
258 *result = 0.0; 258 *result = 0.0;
259 return true; 259 return true;
260 } 260 }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 413
414 double guess; 414 double guess;
415 if (DoubleStrtod(trimmed, exponent, &guess) || 415 if (DoubleStrtod(trimmed, exponent, &guess) ||
416 DiyFpStrtod(trimmed, exponent, &guess)) { 416 DiyFpStrtod(trimmed, exponent, &guess)) {
417 return guess; 417 return guess;
418 } 418 }
419 return BignumStrtod(trimmed, exponent, guess); 419 return BignumStrtod(trimmed, exponent, guess);
420 } 420 }
421 421
422 } } // namespace v8::internal 422 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/runtime.cc ('k') | src/utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698