Security:Strawman Model: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
< | <code> | ||
$ cat Iterator.js | $ cat Iterator.js | ||
function Iterator() { | function Iterator() { |
Revision as of 06:13, 24 September 2005
$ 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;
}