react-native
Version:
A framework for building native apps using React
96 lines (73 loc) • 1.64 kB
JavaScript
/**
* 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
*/
;
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--;
}
};