Commit 9e843087 authored by floitschV8@gmail.com's avatar floitschV8@gmail.com

Rename grisu to fast-dtoa. Get rid of template.

Review URL: http://codereview.chromium.org/1032007

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4181 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 825a5d74
......@@ -65,7 +65,7 @@ SOURCES = {
full-codegen.cc
func-name-inferrer.cc
global-handles.cc
grisu3.cc
fast-dtoa.cc
handles.cc
hashmap.cc
heap-profiler.cc
......
......@@ -31,7 +31,7 @@
#include "conversions-inl.h"
#include "factory.h"
#include "grisu3.h"
#include "fast-dtoa.h"
#include "scanner.h"
namespace v8 {
......@@ -384,14 +384,14 @@ const char* DoubleToCString(double v, Vector<char> buffer) {
int sign;
char* decimal_rep;
bool used_dtoa = false;
char grisu_buffer[kGrisu3MaximalLength + 1];
bool used_gay_dtoa = false;
char fast_dtoa_buffer[kFastDtoaMaximalLength + 1];
int length;
if (grisu3(v, grisu_buffer, &sign, &length, &decimal_point)) {
decimal_rep = grisu_buffer;
if (FastDtoa(v, fast_dtoa_buffer, &sign, &length, &decimal_point)) {
decimal_rep = fast_dtoa_buffer;
} else {
decimal_rep = dtoa(v, 0, 0, &decimal_point, &sign, NULL);
used_dtoa = true;
used_gay_dtoa = true;
length = StrLength(decimal_rep);
}
......@@ -428,7 +428,7 @@ const char* DoubleToCString(double v, Vector<char> buffer) {
builder.AddFormatted("%d", exponent);
}
if (used_dtoa) freedtoa(decimal_rep);
if (used_gay_dtoa) freedtoa(decimal_rep);
}
}
return builder.Finalize();
......
This diff is collapsed.
......@@ -25,22 +25,22 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef V8_GRISU3_H_
#define V8_GRISU3_H_
#ifndef V8_FAST_DTOA_H_
#define V8_FAST_DTOA_H_
namespace v8 {
namespace internal {
// Grisu3 will produce at most kGrisu3MaximalLength digits. This does not
// FastDtoa will produce at most kFastDtoaMaximalLength digits. This does not
// include the terminating '\0' character.
static const int kGrisu3MaximalLength = 17;
static const int kFastDtoaMaximalLength = 17;
// Provides a decimal representation of v.
// v must satisfy v != 0 and it must not be Infinity or NaN.
// v must not be (positive or negative) zero and it must not be Infinity or NaN.
// Returns true if it succeeds, otherwise the result can not be trusted.
// There will be *length digits inside the buffer followed by a null terminator.
// If the function returns true then
// v == (double) (buffer * 10^(decimal-point - length)).
// v == (double) (buffer * 10^(point - length)).
// The digits in the buffer are the shortest representation possible: no
// 0.099999999999 instead of 0.1.
// The last digit will be closest to the actual v. That is, even if several
......@@ -48,8 +48,8 @@ static const int kGrisu3MaximalLength = 17;
// one closest to v.
// The variable 'sign' will be '0' if the given number is positive, and '1'
// otherwise.
bool grisu3(double d, char* buffer, int* sign, int* length, int* decimal_point);
bool FastDtoa(double d, char* buffer, int* sign, int* length, int* point);
} } // namespace v8::internal
#endif // V8_GRISU3_H_
#endif // V8_FAST_DTOA_H_
......@@ -47,9 +47,9 @@ SOURCES = {
'test-decls.cc',
'test-diy_fp.cc',
'test-double.cc',
'test-fast-dtoa.cc',
'test-flags.cc',
'test-func-name-inference.cc',
'test-grisu3.cc',
'test-hashmap.cc',
'test-heap.cc',
'test-heap-profiler.cc',
......
......@@ -8,14 +8,14 @@
#include "cctest.h"
#include "diy_fp.h"
#include "double.h"
#include "fast-dtoa.h"
#include "gay_shortest.h"
#include "grisu3.h"
using namespace v8::internal;
static const int kBufferSize = 100;
TEST(GrisuVariousDoubles) {
TEST(FastDtoaVariousDoubles) {
char buffer[kBufferSize];
int sign;
int length;
......@@ -23,45 +23,45 @@ TEST(GrisuVariousDoubles) {
int status;
double min_double = 5e-324;
status = grisu3(min_double, buffer, &sign, &length, &point);
status = FastDtoa(min_double, buffer, &sign, &length, &point);
CHECK(status);
CHECK_EQ(0, sign);
CHECK_EQ("5", buffer);
CHECK_EQ(-323, point);
double max_double = 1.7976931348623157e308;
status = grisu3(max_double, buffer, &sign, &length, &point);
status = FastDtoa(max_double, buffer, &sign, &length, &point);
CHECK(status);
CHECK_EQ(0, sign);
CHECK_EQ("17976931348623157", buffer);
CHECK_EQ(309, point);
status = grisu3(4294967272.0, buffer, &sign, &length, &point);
status = FastDtoa(4294967272.0, buffer, &sign, &length, &point);
CHECK(status);
CHECK_EQ(0, sign);
CHECK_EQ("4294967272", buffer);
CHECK_EQ(10, point);
status = grisu3(4.1855804968213567e298, buffer, &sign, &length, &point);
status = FastDtoa(4.1855804968213567e298, buffer, &sign, &length, &point);
CHECK(status);
CHECK_EQ(0, sign);
CHECK_EQ("4185580496821357", buffer);
CHECK_EQ(299, point);
status = grisu3(5.5626846462680035e-309, buffer, &sign, &length, &point);
status = FastDtoa(5.5626846462680035e-309, buffer, &sign, &length, &point);
CHECK(status);
CHECK_EQ(0, sign);
CHECK_EQ("5562684646268003", buffer);
CHECK_EQ(-308, point);
status = grisu3(2147483648.0, buffer, &sign, &length, &point);
status = FastDtoa(2147483648.0, buffer, &sign, &length, &point);
CHECK(status);
CHECK_EQ(0, sign);
CHECK_EQ("2147483648", buffer);
CHECK_EQ(10, point);
status = grisu3(3.5844466002796428e+298, buffer, &sign, &length, &point);
if (status) { // Not all grisu3 variants manage to compute this number.
status = FastDtoa(3.5844466002796428e+298, buffer, &sign, &length, &point);
if (status) { // Not all FastDtoa variants manage to compute this number.
CHECK_EQ("35844466002796428", buffer);
CHECK_EQ(0, sign);
CHECK_EQ(299, point);
......@@ -69,7 +69,7 @@ TEST(GrisuVariousDoubles) {
uint64_t smallest_normal64 = V8_2PART_UINT64_C(0x00100000, 00000000);
double v = Double(smallest_normal64).value();
status = grisu3(v, buffer, &sign, &length, &point);
status = FastDtoa(v, buffer, &sign, &length, &point);
if (status) {
CHECK_EQ(0, sign);
CHECK_EQ("22250738585072014", buffer);
......@@ -78,7 +78,7 @@ TEST(GrisuVariousDoubles) {
uint64_t largest_denormal64 = V8_2PART_UINT64_C(0x000FFFFF, FFFFFFFF);
v = Double(largest_denormal64).value();
status = grisu3(v, buffer, &sign, &length, &point);
status = FastDtoa(v, buffer, &sign, &length, &point);
if (status) {
CHECK_EQ(0, sign);
CHECK_EQ("2225073858507201", buffer);
......@@ -87,7 +87,7 @@ TEST(GrisuVariousDoubles) {
}
TEST(GrisuGayShortest) {
TEST(FastDtoaGayShortest) {
char buffer[kBufferSize];
bool status;
int sign;
......@@ -102,10 +102,10 @@ TEST(GrisuGayShortest) {
const GayShortest current_test = precomputed[i];
total++;
double v = current_test.v;
status = grisu3(v, buffer, &sign, &length, &point);
CHECK_GE(kGrisu3MaximalLength, length);
status = FastDtoa(v, buffer, &sign, &length, &point);
CHECK_GE(kFastDtoaMaximalLength, length);
if (!status) continue;
if (length == kGrisu3MaximalLength) needed_max_length = true;
if (length == kFastDtoaMaximalLength) needed_max_length = true;
succeeded++;
CHECK_EQ(0, sign); // All precomputed numbers are positive.
CHECK_EQ(current_test.decimal_point, point);
......
......@@ -274,6 +274,8 @@
'../../src/factory.cc',
'../../src/factory.h',
'../../src/fast-codegen.h',
'../../src/fast-dtoa.cc',
'../../src/fast-dtoa.h',
'../../src/flag-definitions.h',
'../../src/flags.cc',
'../../src/flags.h',
......@@ -289,8 +291,6 @@
'../../src/global-handles.cc',
'../../src/global-handles.h',
'../../src/globals.h',
'../../src/grisu3.h',
'../../src/grisu3.cc',
'../../src/handles-inl.h',
'../../src/handles.cc',
'../../src/handles.h',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment