From b89a7ee8b956c96a1dcee995ea840feddc5d4b27 Mon Sep 17 00:00:00 2001 From: Pierre Frisch Date: Thu, 22 Dec 2011 07:25:50 -0800 Subject: First commit of Ninja to ninja-internal Signed-off-by: Valerio Virgillito --- node_modules/montage/core/shim/timers.js | 87 ++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100755 node_modules/montage/core/shim/timers.js (limited to 'node_modules/montage/core/shim/timers.js') diff --git a/node_modules/montage/core/shim/timers.js b/node_modules/montage/core/shim/timers.js new file mode 100755 index 00000000..859a7aec --- /dev/null +++ b/node_modules/montage/core/shim/timers.js @@ -0,0 +1,87 @@ +/* + 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 [setImmediate()]{@link setImmediate} and [clearImmediate()]{@link clearImmediate} shim functions. + @see setImmediate + @see clearImmediate + @module montage/core/shim/timers + */ + +/** + @function + @name setImmediate + @global +*/ + +/** + @function + @name clearImmediate + @global +*/ + +(function (global) { + +var nextTick; +if (typeof process !== "undefined") { + nextTick = process.nextTick; +} else if (typeof MessageChannel !== "undefined") { + // http://www.nonblocking.io/2011/06/windownexttick.html + var channel = new MessageChannel(); + // linked list of tasks (single, with head node) + var head = {}, tail = head; + + channel.port1.onmessage = function () { + var next = head.next; + var task = next.task; + head = next; + task(); + }; + + nextTick = function (task) { + tail = tail.next = {task: task}; + channel.port2.postMessage(void 0); + } +} else if (typeof setTimeout !== "undefined") { + + nextTick = function (callback) { + setTimeout(callback, 0); + }; +} else { + throw new Error("Can't shim setImmediate."); +} + +if (typeof setImmediate === "undefined") { + var nextHandle = 0; + var handles = {}; + + + global.setImmediate = function setImmediate(callback) { + var handle = nextHandle++; + var args = arguments.length > 1 ? + Array.prototype.slice.call(arguments, 1) : + void 0; + handles[handle] = true; + nextTick(function () { + if (handles[handle]) { + callback.apply(void 0, args); + delete handles[handle]; + } + }); + return handle; + }; + + global.clearImmediate = function clearImmediate(handle) { + delete handles[handle]; + }; +} + +// Make this work as a