@@ -28,16 +28,17 @@ import {
2828 isHostSingletonType ,
2929} from './ReactFiberConfig' ;
3030import {
31- enableProfilerTimer ,
32- enableScopeAPI ,
33- enableLegacyHidden ,
34- forceConcurrentByDefaultForTesting ,
3531 allowConcurrentByDefault ,
36- enableTransitionTracing ,
32+ disableLegacyMode ,
3733 enableDebugTracing ,
3834 enableDO_NOT_USE_disableStrictPassiveEffect ,
35+ enableLegacyHidden ,
36+ enableObjectFiber ,
37+ enableProfilerTimer ,
3938 enableRenderableContext ,
40- disableLegacyMode ,
39+ enableScopeAPI ,
40+ enableTransitionTracing ,
41+ forceConcurrentByDefaultForTesting ,
4142} from 'shared/ReactFeatureFlags' ;
4243import { NoFlags , Placement , StaticMask } from './ReactFiberFlags' ;
4344import { ConcurrentRoot } from './ReactRootTags' ;
@@ -222,7 +223,7 @@ function FiberNode(
222223// is faster.
223224// 5) It should be easy to port this to a C struct and keep a C implementation
224225// compatible.
225- function createFiber (
226+ function createFiberImplClass (
226227 tag : WorkTag ,
227228 pendingProps : mixed ,
228229 key : null | string ,
@@ -232,6 +233,217 @@ function createFiber(
232233 return new FiberNode ( tag , pendingProps , key , mode ) ;
233234}
234235
236+ function createFiberImplObjectDev (
237+ tag : WorkTag ,
238+ pendingProps : mixed ,
239+ key : null | string ,
240+ mode : TypeOfMode ,
241+ ) : Fiber {
242+ const fiber = {
243+ // Instance
244+ tag,
245+ key,
246+ elementType : null ,
247+ type : null ,
248+ stateNode : null ,
249+
250+ // Fiber
251+ return : null ,
252+ child : null ,
253+ sibling : null ,
254+ index : 0 ,
255+
256+ ref : null ,
257+ refCleanup : null ,
258+
259+ pendingProps,
260+ memoizedProps : null ,
261+ updateQueue : null ,
262+ memoizedState : null ,
263+ dependencies : null ,
264+
265+ mode,
266+
267+ // Effects
268+ flags : NoFlags ,
269+ subtreeFlags : NoFlags ,
270+ deletions : null ,
271+
272+ lanes : NoLanes ,
273+ childLanes : NoLanes ,
274+
275+ alternate : null ,
276+
277+ // __DEV__ only
278+ _debugInfo : null ,
279+ _debugOwner : null ,
280+ _debugNeedsRemount : false ,
281+ _debugHookTypes : null ,
282+ } ;
283+ if ( ! hasBadMapPolyfill && typeof Object . preventExtensions === 'function' ) {
284+ Object . preventExtensions ( fiber ) ;
285+ }
286+ return fiber ;
287+ }
288+ function createFiberImplObjectDevProfile (
289+ tag : WorkTag ,
290+ pendingProps : mixed ,
291+ key : null | string ,
292+ mode : TypeOfMode ,
293+ ) : Fiber {
294+ const fiber = {
295+ // Instance
296+ tag,
297+ key,
298+ elementType : null ,
299+ type : null ,
300+ stateNode : null ,
301+
302+ // Fiber
303+ return : null ,
304+ child : null ,
305+ sibling : null ,
306+ index : 0 ,
307+
308+ ref : null ,
309+ refCleanup : null ,
310+
311+ pendingProps,
312+ memoizedProps : null ,
313+ updateQueue : null ,
314+ memoizedState : null ,
315+ dependencies : null ,
316+
317+ mode,
318+
319+ // Effects
320+ flags : NoFlags ,
321+ subtreeFlags : NoFlags ,
322+ deletions : null ,
323+
324+ lanes : NoLanes ,
325+ childLanes : NoLanes ,
326+
327+ alternate : null ,
328+
329+ // enableProfilerTimer only
330+ actualDuration : 0 ,
331+ actualStartTime : - 1 ,
332+ selfBaseDuration : 0 ,
333+ treeBaseDuration : 0 ,
334+
335+ // __DEV__ only
336+ _debugInfo : null ,
337+ _debugOwner : null ,
338+ _debugNeedsRemount : false ,
339+ _debugHookTypes : null ,
340+ } ;
341+ if ( ! hasBadMapPolyfill && typeof Object . preventExtensions === 'function' ) {
342+ Object . preventExtensions ( fiber ) ;
343+ }
344+ return fiber ;
345+ }
346+ function createFiberImplObjectProd (
347+ tag : WorkTag ,
348+ pendingProps : mixed ,
349+ key : null | string ,
350+ mode : TypeOfMode ,
351+ ) : Fiber {
352+ return {
353+ // Instance
354+ tag,
355+ key,
356+ elementType : null ,
357+ type : null ,
358+ stateNode : null ,
359+
360+ // Fiber
361+ return : null ,
362+ child : null ,
363+ sibling : null ,
364+ index : 0 ,
365+
366+ ref : null ,
367+ refCleanup : null ,
368+
369+ pendingProps,
370+ memoizedProps : null ,
371+ updateQueue : null ,
372+ memoizedState : null ,
373+ dependencies : null ,
374+
375+ mode,
376+
377+ // Effects
378+ flags : NoFlags ,
379+ subtreeFlags : NoFlags ,
380+ deletions : null ,
381+
382+ lanes : NoLanes ,
383+ childLanes : NoLanes ,
384+
385+ alternate : null ,
386+ } ;
387+ }
388+ function createFiberImplObjectProdProfile (
389+ tag : WorkTag ,
390+ pendingProps : mixed ,
391+ key : null | string ,
392+ mode : TypeOfMode ,
393+ ) : Fiber {
394+ return {
395+ // Instance
396+ tag,
397+ key,
398+ elementType : null ,
399+ type : null ,
400+ stateNode : null ,
401+
402+ // Fiber
403+ return : null ,
404+ child : null ,
405+ sibling : null ,
406+ index : 0 ,
407+
408+ ref : null ,
409+ refCleanup : null ,
410+
411+ pendingProps,
412+ memoizedProps : null ,
413+ updateQueue : null ,
414+ memoizedState : null ,
415+ dependencies : null ,
416+
417+ mode,
418+
419+ // Effects
420+ flags : NoFlags ,
421+ subtreeFlags : NoFlags ,
422+ deletions : null ,
423+
424+ lanes : NoLanes ,
425+ childLanes : NoLanes ,
426+
427+ alternate : null ,
428+
429+ // enableProfilerTimer only
430+ actualDuration : 0 ,
431+ actualStartTime : - 1 ,
432+ selfBaseDuration : 0 ,
433+ treeBaseDuration : 0 ,
434+ } ;
435+ }
436+
437+ const createFiber = ! enableObjectFiber
438+ ? createFiberImplClass
439+ : __DEV__
440+ ? enableProfilerTimer
441+ ? createFiberImplObjectDevProfile
442+ : createFiberImplObjectDev
443+ : enableProfilerTimer
444+ ? createFiberImplObjectProdProfile
445+ : createFiberImplObjectProd ;
446+
235447function shouldConstruct ( Component : Function ) {
236448 const prototype = Component . prototype ;
237449 return ! ! ( prototype && prototype . isReactComponent ) ;
0 commit comments