@samitouri / QOS-React / commits / de4a7b972b

Move all imports to closures in Fiber

I'm paranoid about inline-ability so I use this pattern of adding a constant to the closure everywhere. ES6 modules help avoid that but we can't use that consistently because of the dependency injection so instead I opt for making this explicit everywhere. Grep: \b[a-zA-Z_$\d]+\.[a-zA-Z_$\d]+\(

Sebastian Markbage committed Jul 6, 2016 at 14:12 UTC de4a7b972bad8c0fdc4256577c54eb3e1b8a7b27
6 files changed +47 -32
src/renderers/shared/fiber/ReactChildFiber.js
+32 -19
@@ -29,11 +29,24 @@ var {
29 var ReactFiber = require('ReactFiber');
30 var ReactReifiedYield = require('ReactReifiedYield');
31
32 +const {
33 + cloneFiber,
34 + createFiberFromElement,
35 + createFiberFromCoroutine,
36 + createFiberFromYield,
37 +} = ReactFiber;
38 +
39 +const {
40 + createReifiedYield,
41 +} = ReactReifiedYield;
42 +
43 +const isArray = Array.isArray;
44 +
45 function createSubsequentChild(
33 - returnFiber : Fiber,
34 - existingChild : ?Fiber,
35 - previousSibling : Fiber,
36 - newChildren,
46 + returnFiber : Fiber,
47 + existingChild : ?Fiber,
48 + previousSibling : Fiber,
49 + newChildren,
50 priority : PriorityLevel
51 ) : Fiber {
52 if (typeof newChildren !== 'object' || newChildren === null) {
@@ -48,7 +61,7 @@ function createSubsequentChild(
61 element.key === existingChild.key) {
62 // TODO: This is not sufficient since previous siblings could be new.
63 // Will fix reconciliation properly later.
51 - const clone = ReactFiber.cloneFiber(existingChild, priority);
64 + const clone = cloneFiber(existingChild, priority);
65 clone.pendingProps = element.props;
66 clone.child = existingChild.child;
67 clone.sibling = null;
@@ -56,7 +69,7 @@ function createSubsequentChild(
69 previousSibling.sibling = clone;
70 return clone;
71 }
59 - const child = ReactFiber.createFiberFromElement(element, priority);
72 + const child = createFiberFromElement(element, priority);
73 previousSibling.sibling = child;
74 child.return = returnFiber;
75 return child;
@@ -64,7 +77,7 @@ function createSubsequentChild(
77
78 case REACT_COROUTINE_TYPE: {
79 const coroutine = (newChildren : ReactCoroutine);
67 - const child = ReactFiber.createFiberFromCoroutine(coroutine, priority);
80 + const child = createFiberFromCoroutine(coroutine, priority);
81 previousSibling.sibling = child;
82 child.return = returnFiber;
83 return child;
@@ -72,8 +85,8 @@ function createSubsequentChild(
85
86 case REACT_YIELD_TYPE: {
87 const yieldNode = (newChildren : ReactYield);
75 - const reifiedYield = ReactReifiedYield.createReifiedYield(yieldNode);
76 - const child = ReactFiber.createFiberFromYield(yieldNode, priority);
88 + const reifiedYield = createReifiedYield(yieldNode);
89 + const child = createFiberFromYield(yieldNode, priority);
90 child.output = reifiedYield;
91 previousSibling.sibling = child;
92 child.return = returnFiber;
@@ -81,7 +94,7 @@ function createSubsequentChild(
94 }
95 }
96
84 - if (Array.isArray(newChildren)) {
97 + if (isArray(newChildren)) {
98 let prev : Fiber = previousSibling;
99 let existing : ?Fiber = existingChild;
100 for (var i = 0; i < newChildren.length; i++) {
@@ -111,21 +124,21 @@ function createFirstChild(returnFiber, existingChild, newChildren, priority) {
124 element.type === existingChild.type &&
125 element.key === existingChild.key) {
126 // Get the clone of the existing fiber.
114 - const clone = ReactFiber.cloneFiber(existingChild, priority);
127 + const clone = cloneFiber(existingChild, priority);
128 clone.pendingProps = element.props;
129 clone.child = existingChild.child;
130 clone.sibling = null;
131 clone.return = returnFiber;
132 return clone;
133 }
121 - const child = ReactFiber.createFiberFromElement(element, priority);
134 + const child = createFiberFromElement(element, priority);
135 child.return = returnFiber;
136 return child;
137 }
138
139 case REACT_COROUTINE_TYPE: {
140 const coroutine = (newChildren : ReactCoroutine);
128 - const child = ReactFiber.createFiberFromCoroutine(coroutine, priority);
141 + const child = createFiberFromCoroutine(coroutine, priority);
142 child.return = returnFiber;
143 return child;
144 }
@@ -135,15 +148,15 @@ function createFirstChild(returnFiber, existingChild, newChildren, priority) {
148 // TODO: When there is only a single child, we can optimize this to avoid
149 // the fragment.
150 const yieldNode = (newChildren : ReactYield);
138 - const reifiedYield = ReactReifiedYield.createReifiedYield(yieldNode);
139 - const child = ReactFiber.createFiberFromYield(yieldNode, priority);
151 + const reifiedYield = createReifiedYield(yieldNode);
152 + const child = createFiberFromYield(yieldNode, priority);
153 child.output = reifiedYield;
154 child.return = returnFiber;
155 return child;
156 }
157 }
158
146 - if (Array.isArray(newChildren)) {
159 + if (isArray(newChildren)) {
160 var first : ?Fiber = null;
161 var prev : ?Fiber = null;
162 var existing : ?Fiber = existingChild;
@@ -170,9 +183,9 @@ function createFirstChild(returnFiber, existingChild, newChildren, priority) {
183 // TODO: This API won't work because we'll need to transfer the side-effects of
184 // unmounting children to the returnFiber.
185 exports.reconcileChildFibers = function(
173 - returnFiber : Fiber,
174 - currentFirstChild : ?Fiber,
175 - newChildren : ReactNodeList,
186 + returnFiber : Fiber,
187 + currentFirstChild : ?Fiber,
188 + newChildren : ReactNodeList,
189 priority : PriorityLevel
190 ) : ?Fiber {
191 return createFirstChild(returnFiber, currentFirstChild, newChildren, priority);
src/renderers/shared/fiber/ReactFiber.js
+4 -2
@@ -201,13 +201,13 @@ exports.createHostContainerFiber = function() {
201 };
202
203 exports.createFiberFromElement = function(element : ReactElement, priorityLevel : PriorityLevel) {
204 - const fiber = exports.createFiberFromElementType(element.type, element.key);
204 + const fiber = createFiberFromElementType(element.type, element.key);
205 fiber.pendingProps = element.props;
206 fiber.pendingWorkPriority = priorityLevel;
207 return fiber;
208 };
209
210 -exports.createFiberFromElementType = function(type : mixed, key : null | string) {
210 +function createFiberFromElementType(type : mixed, key : null | string) {
211 let fiber;
212 if (typeof type === 'function') {
213 fiber = shouldConstruct(type) ?
@@ -226,6 +226,8 @@ exports.createFiberFromElementType = function(type : mixed, key : null | string)
226 return fiber;
227 };
228
229 +exports.createFiberFromElementType = createFiberFromElementType;
230 +
231 exports.createFiberFromCoroutine = function(coroutine : ReactCoroutine, priorityLevel : PriorityLevel) {
232 const fiber = createFiber(CoroutineComponent, coroutine.key);
233 fiber.type = coroutine.handler;
src/renderers/shared/fiber/ReactFiberBeginWork.js
+4 -4
@@ -16,7 +16,7 @@ import type { ReactCoroutine } from 'ReactCoroutine';
16 import type { Fiber } from 'ReactFiber';
17 import type { HostConfig } from 'ReactFiberReconciler';
18
19 -var ReactChildFiber = require('ReactChildFiber');
19 +var { reconcileChildFibers } = require('ReactChildFiber');
20 var ReactTypeOfWork = require('ReactTypeOfWork');
21 var {
22 IndeterminateComponent,
@@ -38,7 +38,7 @@ module.exports = function<T, P, I, C>(config : HostConfig<T, P, I, C>) {
38
39 function reconcileChildren(current, workInProgress, nextChildren) {
40 const priority = workInProgress.pendingWorkPriority;
41 - workInProgress.child = ReactChildFiber.reconcileChildFibers(
41 + workInProgress.child = reconcileChildFibers(
42 workInProgress,
43 current ? current.child : null,
44 nextChildren,
@@ -75,7 +75,7 @@ module.exports = function<T, P, I, C>(config : HostConfig<T, P, I, C>) {
75 // If this host component is hidden, we can reconcile its children at
76 // the lowest priority and bail out from this particular pass. Unless, we're
77 // currently reconciling the lowest priority.
78 - workInProgress.child = ReactChildFiber.reconcileChildFibers(
78 + workInProgress.child = reconcileChildFibers(
79 workInProgress,
80 current ? current.child : null,
81 nextChildren,
@@ -84,7 +84,7 @@ module.exports = function<T, P, I, C>(config : HostConfig<T, P, I, C>) {
84 workInProgress.pendingWorkPriority = OffscreenPriority;
85 return null;
86 } else {
87 - workInProgress.child = ReactChildFiber.reconcileChildFibers(
87 + workInProgress.child = reconcileChildFibers(
88 workInProgress,
89 current ? current.child : null,
90 nextChildren,
src/renderers/shared/fiber/ReactFiberCompleteWork.js
+2 -2
@@ -17,7 +17,7 @@ import type { Fiber } from 'ReactFiber';
17 import type { HostConfig } from 'ReactFiberReconciler';
18 import type { ReifiedYield } from 'ReactReifiedYield';
19
20 -var ReactChildFiber = require('ReactChildFiber');
20 +var { reconcileChildFibers } = require('ReactChildFiber');
21 var ReactTypeOfWork = require('ReactTypeOfWork');
22 var {
23 IndeterminateComponent,
@@ -113,7 +113,7 @@ module.exports = function<T, P, I, C>(config : HostConfig<T, P, I, C>) {
113 var currentFirstChild = current ? current.stateNode : null;
114 // Inherit the priority of the returnFiber.
115 const priority = workInProgress.pendingWorkPriority;
116 - workInProgress.stateNode = ReactChildFiber.reconcileChildFibers(
116 + workInProgress.stateNode = reconcileChildFibers(
117 workInProgress,
118 currentFirstChild,
119 nextChildren,
src/renderers/shared/fiber/ReactFiberPendingWork.js
+3 -3
@@ -15,7 +15,7 @@
15 import type { Fiber } from 'ReactFiber';
16 import type { PriorityLevel } from 'ReactPriorityLevel';
17
18 -var ReactFiber = require('ReactFiber');
18 +var { cloneFiber } = require('ReactFiber');
19
20 var {
21 NoWork,
@@ -24,7 +24,7 @@ var {
24 function cloneSiblings(current : Fiber, workInProgress : Fiber, returnFiber : Fiber) {
25 while (current.sibling) {
26 current = current.sibling;
27 - workInProgress = workInProgress.sibling = ReactFiber.cloneFiber(
27 + workInProgress = workInProgress.sibling = cloneFiber(
28 current,
29 current.pendingWorkPriority
30 );
@@ -62,7 +62,7 @@ exports.findNextUnitOfWorkAtPriority = function(currentRoot : Fiber, priorityLev
62 throw new Error('Should have wip now');
63 }
64 workInProgress.pendingWorkPriority = current.pendingWorkPriority;
65 - workInProgress.child = ReactFiber.cloneFiber(currentChild, NoWork);
65 + workInProgress.child = cloneFiber(currentChild, NoWork);
66 workInProgress.child.return = workInProgress;
67 cloneSiblings(currentChild, workInProgress.child, workInProgress);
68 current = current.child;
src/renderers/shared/fiber/ReactReifiedYield.js
+2 -2
@@ -15,12 +15,12 @@
15 import type { ReactYield } from 'ReactCoroutine';
16 import type { Fiber } from 'ReactFiber';
17
18 -var ReactFiber = require('ReactFiber');
18 +var { createFiberFromElementType } = require('ReactFiber');
19
20 export type ReifiedYield = { continuation: Fiber, props: Object };
21
22 exports.createReifiedYield = function(yieldNode : ReactYield) : ReifiedYield {
23 - var fiber = ReactFiber.createFiberFromElementType(
23 + var fiber = createFiberFromElementType(
24 yieldNode.continuation,
25 yieldNode.key
26 );