/** * Copyright (c) Meta Platforms, Inc. and 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 = {current: T}; const valueStack: Array = []; let fiberStack: Array; if (__DEV__) { fiberStack = []; } let index = -1; function createCursor(defaultValue: T): StackCursor { return { current: defaultValue, }; } function pop(cursor: StackCursor, 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(cursor: StackCursor, value: T, fiber: Fiber): void { index++; valueStack[index] = cursor.current; if (__DEV__) { fiberStack[index] = fiber; } cursor.current = value; } export {createCursor, pop, push};