add support for es7 object/spread and move acorn-6to5 tests to a separate file

This commit is contained in:
Sebastian McKenzie 2014-11-23 21:00:15 +11:00
parent 9b38a4826b
commit 25c45a1e8e
6 changed files with 1614 additions and 1193 deletions

View File

@ -1,3 +1,8 @@
# acorn-6to5 # acorn-6to5
Based on [acorn-jsx](https://github.com/RReverser/acorn-jsx). Deviates from [acorn](https://github.com/marijnh/acorn) in the following ways:
* JSX support via [acorn-jsx](https://github.com/RReverser/acorn-jsx)
* [ES7 Abstract references](https://github.com/zenparsing/es-abstract-refs)
* [ES7 Async/await](https://github.com/lukehoban/ecmascript-asyncawait)
* [ES7 Object Rest/Spread](https://github.com/sebmarkbage/ecmascript-rest-spread)

View File

@ -1757,7 +1757,7 @@
node.type = "ObjectPattern"; node.type = "ObjectPattern";
for (var i = 0; i < node.properties.length; i++) { for (var i = 0; i < node.properties.length; i++) {
var prop = node.properties[i]; var prop = node.properties[i];
if (prop.kind !== "init") unexpected(prop.key.start); if (prop.type === "Property" && prop.kind !== "init") unexpected(prop.key.start);
toAssignable(prop.value, false, checkType); toAssignable(prop.value, false, checkType);
} }
break; break;
@ -1865,8 +1865,11 @@
if (!isBinding) break; if (!isBinding) break;
case "ObjectPattern": case "ObjectPattern":
for (var i = 0; i < expr.properties.length; i++) for (var i = 0; i < expr.properties.length; i++) {
checkLVal(expr.properties[i].value, isBinding); var prop = expr.properties[i];
if (prop.type === "Property") prop = prop.value;
checkLVal(prop, isBinding);
}
break; break;
case "ArrayPattern": case "ArrayPattern":
@ -1876,6 +1879,7 @@
} }
break; break;
case "SpreadProperty":
case "SpreadElement": case "SpreadElement":
case "VirtualPropertyExpression": case "VirtualPropertyExpression":
break; break;
@ -2644,6 +2648,13 @@
prop.shorthand = false; prop.shorthand = false;
isGenerator = eat(_star); isGenerator = eat(_star);
} }
if (options.ecmaVersion >= 7 && tokType === _ellipsis) {
if (isAsync || isGenerator) unexpected();
prop = parseMaybeUnary();
prop.type = "SpreadProperty";
node.properties.push(prop);
continue;
}
parsePropertyName(prop); parsePropertyName(prop);
if (eat(_colon)) { if (eat(_colon)) {
prop.value = parseExpression(true); prop.value = parseExpression(true);

View File

@ -2,7 +2,7 @@
"name": "acorn-6to5", "name": "acorn-6to5",
"description": "Acorn fork used by 6to5", "description": "Acorn fork used by 6to5",
"main": "acorn.js", "main": "acorn.js",
"version": "0.9.1-4", "version": "0.9.1-5",
"maintainers": [ "maintainers": [
{ {
"name": "Marijn Haverbeke", "name": "Marijn Haverbeke",

View File

@ -6,6 +6,7 @@
require("./tests.js"); require("./tests.js");
require("./tests-harmony.js"); require("./tests-harmony.js");
require("./tests-jsx.js"); require("./tests-jsx.js");
require("./tests-6to5.js");
} else { } else {
driver = window; driver = window;
} }
@ -76,7 +77,7 @@ function report(state, code, message) {
group(name); group(name);
var mode = modes[name]; var mode = modes[name];
stats = mode.stats = {testsRun: 0, failed: 0}; stats = mode.stats = {testsRun: 0, failed: 0};
var t0 = +new Date; var t0 = +new Date;
driver.runTests(mode.config, report); driver.runTests(mode.config, report);
mode.stats.duration = +new Date - t0; mode.stats.duration = +new Date - t0;
groupEnd(); groupEnd();

1591
test/tests-6to5.js Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff