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
);