From bb0ec3bbd40a92b314d404f478cbb6265ca7c89f Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 7 Apr 2016 18:30:26 -0700 Subject: [PATCH 1/6] Use an emit helper for JSX Spread Attributes. --- src/compiler/binder.ts | 9 +++++++++ src/compiler/emitter.ts | 23 +++++++++++++++++++---- src/compiler/types.ts | 1 + 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 6957be484f3..b63e301fbbc 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -122,6 +122,7 @@ namespace ts { let hasAsyncFunctions: boolean; let hasDecorators: boolean; let hasParameterDecorators: boolean; + let hasJsxSpreadAttribute: boolean; // If this file is an external module, then it is automatically in strict-mode according to // ES6. If it is not an external module, then we'll determine if it is in strict mode or @@ -161,6 +162,7 @@ namespace ts { hasAsyncFunctions = false; hasDecorators = false; hasParameterDecorators = false; + hasJsxSpreadAttribute = false; } return bindSourceFile; @@ -498,6 +500,9 @@ namespace ts { if (hasAsyncFunctions) { flags |= NodeFlags.HasAsyncFunctions; } + if (hasJsxSpreadAttribute) { + flags |= NodeFlags.HasJsxSpreadAttribute; + } } node.flags = flags; @@ -1298,6 +1303,10 @@ namespace ts { case SyntaxKind.EnumMember: return bindPropertyOrMethodOrAccessor(node, SymbolFlags.EnumMember, SymbolFlags.EnumMemberExcludes); + case SyntaxKind.JsxSpreadAttribute: + hasJsxSpreadAttribute = true; + return; + case SyntaxKind.CallSignature: case SyntaxKind.ConstructSignature: case SyntaxKind.IndexSignature: diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 469530bb6be..1ac91e9b2f0 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -345,6 +345,15 @@ var __extends = (this && this.__extends) || function (d, b) { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); };`; + const assignHelper = ` +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var i = 1, n = arguments.length; i < n; i++) { + var s = arguments[i]; + if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + } + return t; +};`; + // emit output for the __decorate helper function const decorateHelper = ` var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { @@ -540,6 +549,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge let convertedLoopState: ConvertedLoopState; let extendsEmitted: boolean; + let assignEmitted: boolean; let decorateEmitted: boolean; let paramEmitted: boolean; let awaiterEmitted: boolean; @@ -623,6 +633,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge decorateEmitted = false; paramEmitted = false; awaiterEmitted = false; + assignEmitted = false; tempFlags = 0; tempVariables = undefined; tempParameters = undefined; @@ -1259,11 +1270,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge } else { // Either emit one big object literal (no spread attribs), or - // a call to React.__spread + // a call to the __assign helper const attrs = openingNode.attributes; if (forEach(attrs, attr => attr.kind === SyntaxKind.JsxSpreadAttribute)) { - emitExpressionIdentifier(syntheticReactRef); - write(".__spread("); + write("__assign("); let haveOpenedObjectLiteral = false; for (let i = 0; i < attrs.length; i++) { @@ -7701,11 +7711,16 @@ const _super = (function (geti, seti) { if (!compilerOptions.noEmitHelpers) { // Only Emit __extends function when target ES5. // For target ES6 and above, we can emit classDeclaration as is. - if ((languageVersion < ScriptTarget.ES6) && (!extendsEmitted && node.flags & NodeFlags.HasClassExtends)) { + if (languageVersion < ScriptTarget.ES6 && !extendsEmitted && node.flags & NodeFlags.HasClassExtends) { writeLines(extendsHelper); extendsEmitted = true; } + if (compilerOptions.jsx !== JsxEmit.Preserve && !assignEmitted && (node.flags & NodeFlags.HasJsxSpreadAttribute)) { + writeLines(assignHelper); + assignEmitted = true; + } + if (!decorateEmitted && node.flags & NodeFlags.HasDecorators) { writeLines(decorateHelper); if (compilerOptions.emitDecoratorMetadata) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 3bc3d1ad6a1..b889d2c908d 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -405,6 +405,7 @@ namespace ts { JavaScriptFile = 1 << 27, // If node was parsed in a JavaScript ThisNodeOrAnySubNodesHasError = 1 << 28, // If this node or any of its children had an error HasAggregatedChildData = 1 << 29, // If we've computed data from children and cached it in this node + HasJsxSpreadAttribute = 1 << 30, Modifier = Export | Ambient | Public | Private | Protected | Static | Abstract | Default | Async, AccessibilityModifier = Public | Private | Protected, From 8ed7c76b430d5141b5adb110f1a408770cce6607 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 7 Apr 2016 18:31:46 -0700 Subject: [PATCH 2/6] Accepted baselines. --- .../reference/reactNamespaceJSXEmit.js | 11 +++++++++-- .../reference/tsxExternalModuleEmit2.js | 9 ++++++++- tests/baselines/reference/tsxReactEmit2.js | 17 ++++++++++++----- tests/baselines/reference/tsxReactEmit4.js | 9 ++++++++- tests/baselines/reference/tsxReactEmit5.js | 9 ++++++++- tests/baselines/reference/tsxReactEmit6.js | 9 ++++++++- 6 files changed, 53 insertions(+), 11 deletions(-) diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.js b/tests/baselines/reference/reactNamespaceJSXEmit.js index 26967d56b7b..fca5c611bbd 100644 --- a/tests/baselines/reference/reactNamespaceJSXEmit.js +++ b/tests/baselines/reference/reactNamespaceJSXEmit.js @@ -13,8 +13,15 @@ declare var x: any; //// [reactNamespaceJSXEmit.js] +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var i = 1, n = arguments.length; i < n; i++) { + var s = arguments[i]; + if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + } + return t; +}; myReactLib.createElement("foo", {data: true}); myReactLib.createElement(Bar, {x: x}); myReactLib.createElement("x-component", null); -myReactLib.createElement(Bar, myReactLib.__spread({}, x)); -myReactLib.createElement(Bar, myReactLib.__spread({}, x, {y: 2})); +myReactLib.createElement(Bar, __assign({}, x)); +myReactLib.createElement(Bar, __assign({}, x, {y: 2})); diff --git a/tests/baselines/reference/tsxExternalModuleEmit2.js b/tests/baselines/reference/tsxExternalModuleEmit2.js index 2233c5181cb..fcb41f7ce38 100644 --- a/tests/baselines/reference/tsxExternalModuleEmit2.js +++ b/tests/baselines/reference/tsxExternalModuleEmit2.js @@ -19,8 +19,15 @@ declare var Foo, React; //// [app.js] "use strict"; +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var i = 1, n = arguments.length; i < n; i++) { + var s = arguments[i]; + if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + } + return t; +}; var mod_1 = require('mod'); // Should see mod_1['default'] in emit here React.createElement(Foo, {handler: mod_1["default"]}); // Should see mod_1['default'] in emit here -React.createElement(Foo, React.__spread({}, mod_1["default"])); +React.createElement(Foo, __assign({}, mod_1["default"])); diff --git a/tests/baselines/reference/tsxReactEmit2.js b/tests/baselines/reference/tsxReactEmit2.js index fd7fff16976..cd086062a3c 100644 --- a/tests/baselines/reference/tsxReactEmit2.js +++ b/tests/baselines/reference/tsxReactEmit2.js @@ -16,9 +16,16 @@ var spreads5 =
{p2}
; //// [file.js] +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var i = 1, n = arguments.length; i < n; i++) { + var s = arguments[i]; + if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + } + return t; +}; var p1, p2, p3; -var spreads1 = React.createElement("div", React.__spread({}, p1), p2); -var spreads2 = React.createElement("div", React.__spread({}, p1), p2); -var spreads3 = React.createElement("div", React.__spread({x: p3}, p1), p2); -var spreads4 = React.createElement("div", React.__spread({}, p1, {x: p3}), p2); -var spreads5 = React.createElement("div", React.__spread({x: p2}, p1, {y: p3}), p2); +var spreads1 = React.createElement("div", __assign({}, p1), p2); +var spreads2 = React.createElement("div", __assign({}, p1), p2); +var spreads3 = React.createElement("div", __assign({x: p3}, p1), p2); +var spreads4 = React.createElement("div", __assign({}, p1, {x: p3}), p2); +var spreads5 = React.createElement("div", __assign({x: p2}, p1, {y: p3}), p2); diff --git a/tests/baselines/reference/tsxReactEmit4.js b/tests/baselines/reference/tsxReactEmit4.js index d61cea24d2c..77350e54750 100644 --- a/tests/baselines/reference/tsxReactEmit4.js +++ b/tests/baselines/reference/tsxReactEmit4.js @@ -18,7 +18,14 @@ var openClosed1 =
var spread1 =
; //// [file.js] +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var i = 1, n = arguments.length; i < n; i++) { + var s = arguments[i]; + if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + } + return t; +}; var p; var openClosed1 = React.createElement("div", null, blah); // Should emit React.__spread({}, p, {x: 0}) -var spread1 = React.createElement("div", React.__spread({}, p, {x: 0})); +var spread1 = React.createElement("div", __assign({}, p, {x: 0})); diff --git a/tests/baselines/reference/tsxReactEmit5.js b/tests/baselines/reference/tsxReactEmit5.js index 06b05f67d63..f4176aca387 100644 --- a/tests/baselines/reference/tsxReactEmit5.js +++ b/tests/baselines/reference/tsxReactEmit5.js @@ -23,8 +23,15 @@ var spread1 =
; //// [file.js] //// [react-consumer.js] "use strict"; +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var i = 1, n = arguments.length; i < n; i++) { + var s = arguments[i]; + if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + } + return t; +}; var test_1 = require("./test"); // Should emit test_1.React.createElement // and React.__spread var foo; -var spread1 = test_1.React.createElement("div", test_1.React.__spread({x: ''}, foo, {y: ''})); +var spread1 = test_1.React.createElement("div", __assign({x: ''}, foo, {y: ''})); diff --git a/tests/baselines/reference/tsxReactEmit6.js b/tests/baselines/reference/tsxReactEmit6.js index 4f583929004..314f1936774 100644 --- a/tests/baselines/reference/tsxReactEmit6.js +++ b/tests/baselines/reference/tsxReactEmit6.js @@ -28,6 +28,13 @@ namespace M { //// [file.js] //// [react-consumer.js] +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var i = 1, n = arguments.length; i < n; i++) { + var s = arguments[i]; + if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + } + return t; +}; var M; (function (M) { })(M || (M = {})); @@ -36,7 +43,7 @@ var M; // Should emit M.React.createElement // and M.React.__spread var foo; - var spread1 = M.React.createElement("div", M.React.__spread({x: ''}, foo, {y: ''})); + var spread1 = M.React.createElement("div", __assign({x: ''}, foo, {y: ''})); // Quotes var x = M.React.createElement("div", null, "This \"quote\" thing"); })(M || (M = {})); From a90d471b87a176976fd0019308d2eac8c59377b3 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 7 Apr 2016 23:25:32 -0700 Subject: [PATCH 3/6] Remove unnecessary 'null'/'undefined' check, removed temp for args length. --- src/compiler/emitter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 1ac91e9b2f0..9d670fd059c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -347,9 +347,9 @@ var __extends = (this && this.__extends) || function (d, b) { const assignHelper = ` var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1, n = arguments.length; i < n; i++) { + for (var i = 1; i < arguments.length; i++) { var s = arguments[i]; - if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; } return t; };`; From 67a77dde40948ddd05807229e19b105f7581c738 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 7 Apr 2016 23:26:17 -0700 Subject: [PATCH 4/6] Accepted baselines. --- tests/baselines/reference/reactNamespaceJSXEmit.js | 4 ++-- tests/baselines/reference/tsxExternalModuleEmit2.js | 4 ++-- tests/baselines/reference/tsxReactEmit2.js | 4 ++-- tests/baselines/reference/tsxReactEmit4.js | 4 ++-- tests/baselines/reference/tsxReactEmit5.js | 4 ++-- tests/baselines/reference/tsxReactEmit6.js | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.js b/tests/baselines/reference/reactNamespaceJSXEmit.js index fca5c611bbd..8282cd628ee 100644 --- a/tests/baselines/reference/reactNamespaceJSXEmit.js +++ b/tests/baselines/reference/reactNamespaceJSXEmit.js @@ -14,9 +14,9 @@ declare var x: any; //// [reactNamespaceJSXEmit.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1, n = arguments.length; i < n; i++) { + for (var i = 1; i < arguments.length; i++) { var s = arguments[i]; - if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxExternalModuleEmit2.js b/tests/baselines/reference/tsxExternalModuleEmit2.js index fcb41f7ce38..cce67693817 100644 --- a/tests/baselines/reference/tsxExternalModuleEmit2.js +++ b/tests/baselines/reference/tsxExternalModuleEmit2.js @@ -20,9 +20,9 @@ declare var Foo, React; //// [app.js] "use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1, n = arguments.length; i < n; i++) { + for (var i = 1; i < arguments.length; i++) { var s = arguments[i]; - if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit2.js b/tests/baselines/reference/tsxReactEmit2.js index cd086062a3c..e73d8b4b6c8 100644 --- a/tests/baselines/reference/tsxReactEmit2.js +++ b/tests/baselines/reference/tsxReactEmit2.js @@ -17,9 +17,9 @@ var spreads5 =
{p2}
; //// [file.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1, n = arguments.length; i < n; i++) { + for (var i = 1; i < arguments.length; i++) { var s = arguments[i]; - if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit4.js b/tests/baselines/reference/tsxReactEmit4.js index 77350e54750..e1e7384a463 100644 --- a/tests/baselines/reference/tsxReactEmit4.js +++ b/tests/baselines/reference/tsxReactEmit4.js @@ -19,9 +19,9 @@ var spread1 =
; //// [file.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1, n = arguments.length; i < n; i++) { + for (var i = 1; i < arguments.length; i++) { var s = arguments[i]; - if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit5.js b/tests/baselines/reference/tsxReactEmit5.js index f4176aca387..e969b587c79 100644 --- a/tests/baselines/reference/tsxReactEmit5.js +++ b/tests/baselines/reference/tsxReactEmit5.js @@ -24,9 +24,9 @@ var spread1 =
; //// [react-consumer.js] "use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1, n = arguments.length; i < n; i++) { + for (var i = 1; i < arguments.length; i++) { var s = arguments[i]; - if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit6.js b/tests/baselines/reference/tsxReactEmit6.js index 314f1936774..95461e0149f 100644 --- a/tests/baselines/reference/tsxReactEmit6.js +++ b/tests/baselines/reference/tsxReactEmit6.js @@ -29,9 +29,9 @@ namespace M { //// [file.js] //// [react-consumer.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1, n = arguments.length; i < n; i++) { + for (var i = 1; i < arguments.length; i++) { var s = arguments[i]; - if (s != null) for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; } return t; }; From fb6f4aefd9f904e01f78eb2c70d7ddc48b3b6748 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 8 Apr 2016 12:34:25 -0700 Subject: [PATCH 5/6] Changed emit to use 'Object.prototype.hasOwnProperty'. --- src/compiler/emitter.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 9d670fd059c..6eefae6945f 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -347,9 +347,10 @@ var __extends = (this && this.__extends) || function (d, b) { const assignHelper = ` var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1; i < arguments.length; i++) { - var s = arguments[i]; - for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; } return t; };`; From 73dbe41cd14228e5a010a082f405663b78cec925 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 8 Apr 2016 12:40:26 -0700 Subject: [PATCH 6/6] Accepted baselines. --- tests/baselines/reference/reactNamespaceJSXEmit.js | 7 ++++--- tests/baselines/reference/tsxExternalModuleEmit2.js | 7 ++++--- tests/baselines/reference/tsxReactEmit2.js | 7 ++++--- tests/baselines/reference/tsxReactEmit4.js | 7 ++++--- tests/baselines/reference/tsxReactEmit5.js | 7 ++++--- tests/baselines/reference/tsxReactEmit6.js | 7 ++++--- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.js b/tests/baselines/reference/reactNamespaceJSXEmit.js index 8282cd628ee..ced18ebc031 100644 --- a/tests/baselines/reference/reactNamespaceJSXEmit.js +++ b/tests/baselines/reference/reactNamespaceJSXEmit.js @@ -14,9 +14,10 @@ declare var x: any; //// [reactNamespaceJSXEmit.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1; i < arguments.length; i++) { - var s = arguments[i]; - for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxExternalModuleEmit2.js b/tests/baselines/reference/tsxExternalModuleEmit2.js index cce67693817..25e186e140f 100644 --- a/tests/baselines/reference/tsxExternalModuleEmit2.js +++ b/tests/baselines/reference/tsxExternalModuleEmit2.js @@ -20,9 +20,10 @@ declare var Foo, React; //// [app.js] "use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1; i < arguments.length; i++) { - var s = arguments[i]; - for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit2.js b/tests/baselines/reference/tsxReactEmit2.js index e73d8b4b6c8..051c7380171 100644 --- a/tests/baselines/reference/tsxReactEmit2.js +++ b/tests/baselines/reference/tsxReactEmit2.js @@ -17,9 +17,10 @@ var spreads5 =
{p2}
; //// [file.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1; i < arguments.length; i++) { - var s = arguments[i]; - for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit4.js b/tests/baselines/reference/tsxReactEmit4.js index e1e7384a463..3b554f17cb7 100644 --- a/tests/baselines/reference/tsxReactEmit4.js +++ b/tests/baselines/reference/tsxReactEmit4.js @@ -19,9 +19,10 @@ var spread1 =
; //// [file.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1; i < arguments.length; i++) { - var s = arguments[i]; - for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit5.js b/tests/baselines/reference/tsxReactEmit5.js index e969b587c79..a6dde25edc3 100644 --- a/tests/baselines/reference/tsxReactEmit5.js +++ b/tests/baselines/reference/tsxReactEmit5.js @@ -24,9 +24,10 @@ var spread1 =
; //// [react-consumer.js] "use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1; i < arguments.length; i++) { - var s = arguments[i]; - for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; } return t; }; diff --git a/tests/baselines/reference/tsxReactEmit6.js b/tests/baselines/reference/tsxReactEmit6.js index 95461e0149f..cb41bf4d1eb 100644 --- a/tests/baselines/reference/tsxReactEmit6.js +++ b/tests/baselines/reference/tsxReactEmit6.js @@ -29,9 +29,10 @@ namespace M { //// [file.js] //// [react-consumer.js] var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var i = 1; i < arguments.length; i++) { - var s = arguments[i]; - for (var p in s) if (s.hasOwnProperty(p)) t[p] = s[p]; + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; } return t; };