From f88a4147a6394a1d24376fcf52a671fbfb7d90ca Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 2 Apr 2015 02:21:12 +1100 Subject: [PATCH] traceur upstream sync --- .../es6/spec.template-literals.js | 2 ++ .../spec/block-scoped-functions.js | 24 ++++++++++++------- test/core/traceur.js | 23 +++++++++--------- vendor/traceur | 2 +- 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/babel/transformation/transformers/es6/spec.template-literals.js b/src/babel/transformation/transformers/es6/spec.template-literals.js index 89517c2f90..67d0965fee 100644 --- a/src/babel/transformation/transformers/es6/spec.template-literals.js +++ b/src/babel/transformation/transformers/es6/spec.template-literals.js @@ -5,6 +5,8 @@ export var metadata = { }; export function TemplateLiteral(node, parent, scope, file) { + if (t.isTaggedTemplateExpression(parent)) return; + for (var i = 0; i < node.expressions.length; i++) { node.expressions[i] = t.callExpression(t.identifier("String"), [node.expressions[i]]); } diff --git a/src/babel/transformation/transformers/spec/block-scoped-functions.js b/src/babel/transformation/transformers/spec/block-scoped-functions.js index 9240c25f28..c30b3490b9 100644 --- a/src/babel/transformation/transformers/spec/block-scoped-functions.js +++ b/src/babel/transformation/transformers/spec/block-scoped-functions.js @@ -1,12 +1,8 @@ import * as t from "../../../types"; -export function BlockStatement(node, parent, scope, file) { - if ((t.isFunction(parent) && parent.body === node) || t.isExportDeclaration(parent)) { - return; - } - - for (var i = 0; i < node.body.length; i++) { - var func = node.body[i]; +function statementList(key, node, file) { + for (var i = 0; i < node[key].length; i++) { + var func = node[key][i]; if (!t.isFunctionDeclaration(func)) continue; var declar = t.variableDeclaration("let", [ @@ -19,8 +15,20 @@ export function BlockStatement(node, parent, scope, file) { // todo: name this func.id = null; - node.body[i] = declar; + node[key][i] = declar; file.checkNode(declar); } } + +export function BlockStatement(node, parent, scope, file) { + if ((t.isFunction(parent) && parent.body === node) || t.isExportDeclaration(parent)) { + return; + } + + statementList("body", node, file); +} + +export function SwitchCase(node, parent, scope, file) { + statementList("consequent", node, file); +} diff --git a/test/core/traceur.js b/test/core/traceur.js index f732768b30..e8c630743f 100644 --- a/test/core/traceur.js +++ b/test/core/traceur.js @@ -41,16 +41,15 @@ require("./_transformation-helper")({ // TODO "Syntax/StrictKeywordsInPattern", - // broken test, see google/traceur-compiler#1797 - "Classes/NestedClassSuperAnimal", + // babel has no way to check these :( TODO: add to caveats + "TemplateLiterals/TemplateObjectCaching.module", - // TODO: #426 + // babel does function/class name inference which these tests don't take into consideration + "Classes/ClassNameBinding", + "PropertyMethodAssignment/PropertyMethodAssignment", // TODO: investigate - "Classes/SuperSet", - "Classes/PrototypeDescriptor", "Classes/ExtendStrange", - "Classes/ClassNameBinding", // these are the responsibility of core-js "Symbol/GetOwnPropertySymbols", @@ -62,20 +61,20 @@ require("./_transformation-helper")({ "Destructuring/Rest", "Destructuring/Empty", + // babel doesn't like non-closing comments :) + "Syntax/NoNewLineHereEndOfFile", + // traceur uses an old version of regexpu "RegularExpression/Simple", - // class methods are still enumerable in traceur + // class methods are still enumerable in traceur... + "Classes/PrototypeDescriptor", "NumericLiteral/Simple", "Classes/Method", // Object.mixin didn't make it into ES6 "ObjectMixin", - // traceur doesn't name methods and has an incorrect test asserting that - // they have no names - "PropertyMethodAssignment/PropertyMethodAssignment", - // Babel assumes that all code transformed is a module so this isn't necessary "Strict", "Syntax/UseStrictEscapeSequence", @@ -91,7 +90,7 @@ require("./_transformation-helper")({ "Syntax/StrictKeywords" ] }, { - optional: ["es6.spec.symbols"], + optional: ["es6.spec.symbols", "es6.spec.templateLiterals"], stage: 0 }, function (opts, task) { if (!_.contains(task.exec.loc, "module.js")) { diff --git a/vendor/traceur b/vendor/traceur index 980cc4bc04..c43912d121 160000 --- a/vendor/traceur +++ b/vendor/traceur @@ -1 +1 @@ -Subproject commit 980cc4bc04b820e38c571e4713bea9d9c559aa19 +Subproject commit c43912d121cb42b84b870565338f7e35d6a61af2