make PathHoister much more flexible, now ignores global references and will not deopt on reassignments and will instead hoist as high as it can, this also fixes #1529 since the order of operations has changed

This commit is contained in:
Sebastian McKenzie
2015-05-14 23:29:02 +01:00
parent d4fb924b6a
commit 14dddcda36
21 changed files with 192 additions and 52 deletions

View File

@@ -0,0 +1,5 @@
var Foo = React.createClass({
render: function render() {
return <div foo={notDeclared}></div>;
}
});

View File

@@ -0,0 +1,9 @@
"use strict";
var _ref = <div foo={notDeclared}></div>;
var Foo = React.createClass({
render: function render() {
return _ref;
}
});

View File

@@ -0,0 +1,11 @@
function render(text) {
return function () {
return <div>{text}</div>;
};
}
function render() {
return function (text) {
return <div>{text}</div>;
};
}

View File

@@ -0,0 +1,15 @@
"use strict";
function render(text) {
var _ref = <div>{text}</div>;
return function () {
return _ref;
};
}
function render() {
return function (text) {
return <div>{text}</div>;
};
}

View File

@@ -0,0 +1,7 @@
function render(text) {
text += "yes";
return function () {
return <div>{text}</div>;
};
}

View File

@@ -0,0 +1,11 @@
"use strict";
function render(text) {
text += "yes";
var _ref = <div>{text}</div>;
return function () {
return _ref;
};
}

View File

@@ -1,4 +1,2 @@
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
React.createElement(Component, _extends({}, props, {
React.createElement(Component, babelHelpers._extends({}, props, {
sound: "moo" }));

View File

@@ -0,0 +1,17 @@
class App extends React.Component {
render() {
const navbarHeader = <div className="navbar-header">
<a className="navbar-brand" href="/">
<img src="/img/logo/logo-96x36.png" />
</a>
</div>;
return <div>
<nav className="navbar navbar-default">
<div className="container">
{navbarHeader}
</div>
</nav>
</div>;
}
}

View File

@@ -0,0 +1,42 @@
var _ref = React.createElement(
"div",
{ className: "navbar-header" },
React.createElement(
"a",
{ className: "navbar-brand", href: "/" },
React.createElement("img", { src: "/img/logo/logo-96x36.png" })
)
);
var App = (function (_React$Component) {
function App() {
babelHelpers.classCallCheck(this, App);
if (_React$Component != null) {
_React$Component.apply(this, arguments);
}
}
babelHelpers.inherits(App, _React$Component);
babelHelpers.createClass(App, [{
key: "render",
value: function render() {
var navbarHeader = _ref;
return React.createElement(
"div",
null,
React.createElement(
"nav",
{ className: "navbar navbar-default" },
React.createElement(
"div",
{ className: "container" },
navbarHeader
)
)
);
}
}]);
return App;
})(React.Component);

View File

@@ -0,0 +1,3 @@
{
"optional": ["optimisation.react.constantElements"]
}

View File

@@ -1,3 +1,4 @@
{
"externalHelpers": true,
"blacklist": ["strict"]
}

View File

@@ -1,3 +1 @@
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
React.createElement(Component, _extends({}, x, { y: 2, z: true }));
React.createElement(Component, babelHelpers._extends({}, x, { y: 2, z: true }));

View File

@@ -1,3 +1 @@
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
React.createElement(Component, _extends({ y: 2, z: true }, x));
React.createElement(Component, babelHelpers._extends({ y: 2, z: true }, x));

View File

@@ -1,3 +1 @@
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
React.createElement(Component, _extends({ y: 2 }, x, { z: true }));
React.createElement(Component, babelHelpers._extends({ y: 2 }, x, { z: true }));