From a3024011a91d3941f81481dd4d600e9684eb0fd4 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Thu, 2 Feb 2012 00:11:51 -0800 Subject: upgrading to Montage v0.6 Signed-off-by: Valerio Virgillito --- node_modules/montage/core/next-tick.js | 91 ++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 node_modules/montage/core/next-tick.js (limited to 'node_modules/montage/core/next-tick.js') diff --git a/node_modules/montage/core/next-tick.js b/node_modules/montage/core/next-tick.js new file mode 100644 index 00000000..0c3e209a --- /dev/null +++ b/node_modules/montage/core/next-tick.js @@ -0,0 +1,91 @@ +/* + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. +
*/ + +/** + Defines [nextTick()]{#link nextTick} + @see nextTick + @module montage/core/next-tick +*/ + +/** + @function + @name nextTick +*/ + +(function (definition) { + if (typeof bootstrap !== "undefined") { + bootstrap("core/next-tick", definition); + } else if (typeof require !== "undefined") { + definition(require, exports, module); + } else { + definition({}, {}, {}); + } +})(function (require, exports, module) { + +var nextTick; +// Node implementation: +if (typeof process !== "undefined") { + nextTick = process.nextTick; +// Browser implementation: based on MessageChannel, setImmediate, or setTimeout +} else { + + // queue of tasks implemented as a singly linked list with a head node + var head = {}, tail = head; + // whether a task is pending is represented by the existence of head.next + + nextTick = function (task) { + var alreadyPending = head.next; + tail = tail.next = {task: task}; + if (!alreadyPending) { + // setImmediate, + // postMessage, or + // setTimeout: + request(flush, 0); + } + } + + var flush = function () { + try { + // unroll all pending events + while (head.next) { + head = head.next; + // guarantee consistent queue state + // before task, because it may throw + head.task(); // may throw + } + } finally { + // if a task throws an exception and + // there are more pending tasks, dispatch + // another event + if (head.next) { + // setImmediate, + // postMessage, or + // setTimeout: + request(flush, 0); + } + } + }; + + var request; // must always be called like request(flush, 0); + // in order of desirability: + if (typeof setImmediate !== "undefined") { + request = setImmediate; + } else if (typeof MessageChannel !== "undefined") { + // http://www.nonblocking.io/2011/06/windownexttick.html + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + request = function (flush, zero) { + channel.port2.postMessage(0); + }; + } else { + request = setTimeout; + } + +} + +exports.nextTick = nextTick; + +}); -- cgit v1.2.3