| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 
							- 'use strict'
 
- var nextTick = nextTickArgs
 
- process.nextTick(upgrade, 42) // pass 42 and see if upgrade is called with it
 
- module.exports = thunky
 
- function thunky (fn) {
 
-   var state = run
 
-   return thunk
 
-   function thunk (callback) {
 
-     state(callback || noop)
 
-   }
 
-   function run (callback) {
 
-     var stack = [callback]
 
-     state = wait
 
-     fn(done)
 
-     function wait (callback) {
 
-       stack.push(callback)
 
-     }
 
-     function done (err) {
 
-       var args = arguments
 
-       state = isError(err) ? run : finished
 
-       while (stack.length) finished(stack.shift())
 
-       function finished (callback) {
 
-         nextTick(apply, callback, args)
 
-       }
 
-     }
 
-   }
 
- }
 
- function isError (err) { // inlined from util so this works in the browser
 
-   return Object.prototype.toString.call(err) === '[object Error]'
 
- }
 
- function noop () {}
 
- function apply (callback, args) {
 
-   callback.apply(null, args)
 
- }
 
- function upgrade (val) {
 
-   if (val === 42) nextTick = process.nextTick
 
- }
 
- function nextTickArgs (fn, a, b) {
 
-   process.nextTick(function () {
 
-     fn(a, b)
 
-   })
 
- }
 
 
  |