UNPKG

react-native-macos

Version:

A framework for building native macOS apps using React

93 lines (70 loc) 1.62 kB
/** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule ReactFiberStack * @flow */ 'use strict'; import type {Fiber} from 'ReactFiber'; export type StackCursor<T> = { current: T, }; const warning = require('fbjs/lib/warning'); const valueStack: Array<any> = []; if (__DEV__) { var fiberStack: Array<Fiber | null> = []; } let index = -1; exports.createCursor = function<T>(defaultValue: T): StackCursor<T> { return { current: defaultValue, }; }; exports.isEmpty = function(): boolean { return index === -1; }; exports.pop = function<T>(cursor: StackCursor<T>, fiber: Fiber): void { if (index < 0) { if (__DEV__) { warning(false, 'Unexpected pop.'); } return; } if (__DEV__) { if (fiber !== fiberStack[index]) { warning(false, 'Unexpected Fiber popped.'); } } cursor.current = valueStack[index]; valueStack[index] = null; if (__DEV__) { fiberStack[index] = null; } index--; }; exports.push = function<T>( cursor: StackCursor<T>, value: T, fiber: Fiber, ): void { index++; valueStack[index] = cursor.current; if (__DEV__) { fiberStack[index] = fiber; } cursor.current = value; }; exports.reset = function(): void { while (index > -1) { valueStack[index] = null; if (__DEV__) { fiberStack[index] = null; } index--; } };