mirror of
https://github.com/nodejs/node.git
synced 2025-05-13 07:34:30 +00:00

Upgrade the bundled V8 and update code in src/ and lib/ to the new API. Notable backwards incompatible changes are the removal of the smalloc module and dropped support for CESU-8 decoding. CESU-8 support can be brought back if necessary by doing UTF-8 decoding ourselves. This commit includes https://codereview.chromium.org/1192973004 to fix a build error on python 2.6 systems. The original commit log follows: Use optparse in js2c.py for python compatibility Without this change, V8 won't build on RHEL/CentOS 6 because the distro python is too old to know about the argparse module. PR-URL: https://github.com/nodejs/io.js/pull/2022 Reviewed-By: Rod Vagg <rod@vagg.org> Reviewed-By: Trevor Norris <trev.norris@gmail.com>
121 lines
3.5 KiB
JavaScript
121 lines
3.5 KiB
JavaScript
// Copyright 2015 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Generates a comparison table test case.
|
|
// Usage: d8 compare-table-gen.js -- lt|lteq|gt|gteq|eq|ne|eq|sne|min|max
|
|
|
|
var strings = ["true", "false", "null", "void 0", "0", "0.0", "-0", "\"\"", "-1", "-1.25", "1", "1.25", "-2147483648", "2147483648", "Infinity", "-Infinity", "NaN"];
|
|
var values = new Array(strings.length);
|
|
for (var i = 0; i < strings.length; i++) {
|
|
values[i] = eval(strings[i]);
|
|
}
|
|
|
|
function test() {
|
|
for (var i = 0; i < values.length; i++) {
|
|
for (var j = 0; j < values.length; j++) {
|
|
var a = values[i];
|
|
var b = values[j];
|
|
var x = expected[i][j];
|
|
assertEquals(x, func(a,b));
|
|
assertEquals(x, left_funcs[i](b));
|
|
assertEquals(x, right_funcs[j](a));
|
|
}
|
|
}
|
|
|
|
var result = matrix();
|
|
for (var i = 0; i < values.length; i++) {
|
|
for (var j = 0; j < values.length; j++) {
|
|
assertEquals(expected[i][j], result[i][j]);
|
|
}
|
|
}
|
|
}
|
|
|
|
function expr(infix, a, cmp, b) {
|
|
return infix ? a + " " + cmp + " " + b : cmp + "(" + a + ", " + b + ")";
|
|
}
|
|
|
|
function SpecialToString(x) {
|
|
if ((1 / x) == -Infinity) return "-0";
|
|
return "" + x;
|
|
}
|
|
|
|
function gen(name, cmp, infix) {
|
|
|
|
print("// Copyright 2015 the V8 project authors. All rights reserved.");
|
|
print("// Use of this source code is governed by a BSD-style license that can be");
|
|
print("// found in the LICENSE file.");
|
|
print();
|
|
print("var values = [" + strings + "];");
|
|
|
|
var body = "(function " + name + "(a,b) { return " + expr(infix, "a", cmp, "b") + "; })";
|
|
var func = eval(body);
|
|
|
|
print("var expected = [");
|
|
|
|
for (var i = 0; i < values.length; i++) {
|
|
var line = " [";
|
|
for (var j = 0; j < values.length; j++) {
|
|
if (j > 0) line += ",";
|
|
line += SpecialToString(func(values[i], values[j]));
|
|
}
|
|
line += "]";
|
|
if (i < (values.length - 1)) line += ",";
|
|
print(line);
|
|
}
|
|
print("];");
|
|
|
|
print("var func = " + body + ";");
|
|
print("var left_funcs = [");
|
|
|
|
for (var i = 0; i < values.length; i++) {
|
|
var value = strings[i];
|
|
var body = "(function " + name + "_L" + i + "(b) { return " + expr(infix, value, cmp, "b") + "; })";
|
|
var end = i < (values.length - 1) ? "," : "";
|
|
print(" " + body + end);
|
|
}
|
|
print("];");
|
|
|
|
print("var right_funcs = [");
|
|
for (var i = 0; i < values.length; i++) {
|
|
var value = strings[i];
|
|
var body = "(function " + name + "_R" + i + "(a) { return " + expr(infix, "a", cmp, value) + "; })";
|
|
var end = i < (values.length - 1) ? "," : "";
|
|
print(" " + body + end);
|
|
}
|
|
print("];");
|
|
|
|
print("function matrix() {");
|
|
print(" return [");
|
|
for (var i = 0; i < values.length; i++) {
|
|
var line = " [";
|
|
for (var j = 0; j < values.length; j++) {
|
|
if (j > 0) line += ",";
|
|
line += expr(infix, strings[i], cmp, strings[j]);
|
|
}
|
|
line += "]";
|
|
if (i < (values.length - 1)) line += ",";
|
|
print(line);
|
|
}
|
|
print(" ];");
|
|
print("}");
|
|
|
|
|
|
print(test.toString());
|
|
print("test();");
|
|
print("test();");
|
|
}
|
|
|
|
switch (arguments[0]) {
|
|
case "lt": gen("lt", "<", true); break;
|
|
case "lteq": gen("lteq", "<=", true); break;
|
|
case "gt": gen("gt", ">", true); break;
|
|
case "gteq": gen("gteq", ">=", true); break;
|
|
case "eq": gen("eq", "==", true); break;
|
|
case "ne": gen("ne", "!=", true); break;
|
|
case "seq": gen("seq", "===", true); break;
|
|
case "sne": gen("sne", "!==", true); break;
|
|
case "min": gen("min", "Math.min", false); break;
|
|
case "max": gen("max", "Math.max", false); break;
|
|
}
|