Security:Strawman Model
Jump to navigation
Jump to search
$ cat Iterator.js function Iterator() {
var i = arguments.length;
if (i < 0 && 2 < i) throw TypeError("Iterator requires 0 to 2 arguments");
function generic_next() { return this(); };
var arg0 = arguments[0]; if (arg0 && typeof arg0 == "object") { if (i == 2 && typeof arg0 == "function") { var callable = arg0; var sentinel = arguments[1]; var last;
function funiter() { last = callable(); if (last == sentinel) throw "StopIteration"; return last; } funiter.next = generic_next; funiter.done = function () { return last == sentinel; }; return funiter; }
var keys = []; for (i in arg0) keys.push(i);
i = 0; function objiter() { if (i == keys.length) throw "StopIteration"; return keys[i++]; } objiter.next = generic_next; objiter.done = function () { return i == keys.length; }; return objiter; }
var end, start = 0, step = 1; i = 0; switch (arguments.length) { case 3: step = Number(arguments[2]); case 2: start = Number(arg0), i = 1; case 1: end = Number(arguments[i]); break; }
i = start; function iter() { if (i == end) throw "StopIteration"; var j = i; i += step; return j; } iter.next = generic_next; iter.done = function () { return i == end; }; return iter;
}