| (function(){ |
| "use strict"; |
| var it = [][Symbol.iterator](); |
| while (it) { |
| if (it.hasOwnProperty('next')) |
| delete it.next; |
| it = Object.getPrototypeOf(it); |
| } |
| |
| var bind = Function.prototype.bind; |
| var uncurryThis = bind.bind(bind.call); |
| |
| var bindFn = uncurryThis(bind); |
| var applyFn = uncurryThis(bind.apply); |
| function test() { print("here"); } |
| var sliceFn = uncurryThis([].slice); |
| function addAll(var_args) { |
| var args = sliceFn(arguments, 0); |
| var result = this; |
| for (var i = 0; i < args.length; i++) |
| result += args[i]; |
| return result; |
| } |
| if (applyFn(addAll, 3, [4, 5, 6]) !== 18) |
| throw "incorrect result"; |
| |
| })(); |