/
githubmr
/
facebook-react
Обзор
Документация
Войти
/
githubmr
/
facebook-react
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
v18.2.0
packages/react-reconciler/src/ReactFiberStack.new.js
97 строк
2 KB
Andrew Clark
Add forked copies of reconciler modules
09 апр 2020, 10:03
09 апр 2020, 10:03
17f582e
Код
Авторство
О чём код?
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import type {Fiber} from './ReactInternalTypes'; export type StackCursor<T> = {|current: T|}; const valueStack: Array<any> = []; let fiberStack: Array<Fiber | null>; if (__DEV__) { fiberStack = []; } let index = -1; function createCursor<T>(defaultValue: T): StackCursor<T> { return { current: defaultValue, }; } function isEmpty(): boolean { return index === -1; } function pop<T>(cursor: StackCursor<T>, fiber: Fiber): void { if (index < 0) { if (__DEV__) { console.error('Unexpected pop.'); } return; } if (__DEV__) { if (fiber !== fiberStack[index]) { console.error('Unexpected Fiber popped.'); } } cursor.current = valueStack[index]; valueStack[index] = null; if (__DEV__) { fiberStack[index] = null; } index--; } function push<T>(cursor: StackCursor<T>, value: T, fiber: Fiber): void { index++; valueStack[index] = cursor.current; if (__DEV__) { fiberStack[index] = fiber; } cursor.current = value; } function checkThatStackIsEmpty() { if (__DEV__) { if (index !== -1) { console.error( 'Expected an empty stack. Something was not reset properly.', ); } } } function resetStackAfterFatalErrorInDev() { if (__DEV__) { index = -1; valueStack.length = 0; fiberStack.length = 0; } } export { createCursor, isEmpty, pop, push, // DEV only: checkThatStackIsEmpty, resetStackAfterFatalErrorInDev, };