* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
-var DEP = { }; (function () { with (DEP) {
+var DEP = { }; (function () {
/*----- Utility functions and classes -------------------------------------*/
-DEP.dolist = function (list, func) {
+function dolist(list, func) {
/* Apply FUNC to each element of LIST, discarding the results.
*
* JavaScript's looping iterates over indices rather than values, which is
var i;
for (i in list) func(list[i]);
}
+DEP.dolist = dolist;
function eql(x, y) {
/* A standard equality function, suitable for detecting changes to `Dep'
* that the set of Tags is basically determined by the static structure of
* the program.
*/
-DEP.Tag = function (what) {
+function Tag(what) {
this.what = what;
}
Tag.prototype = {
toString: function () { return '#{Tag ' + this.what + '}'; }
}
+DEP.Tag = Tag;
/* A Generation is like a Tag, except that it's expected that a program will
* manufacture Generations repeatedly, and perhaps use them to determine
* whether an object is `up-to-date' in some sense.
*/
-DEP.Generation = function (what) {
+function Generation(what) {
this.what = what;
this.seq = Generation._next++;
}
/*----- Exceptions --------------------------------------------------------*/
-DEP.CircularDependency = new Tag('CircularDependency');
-DEP.BusyRecomputing = new Tag('BusyRecomputing');
+CircularDependency = new Tag('CircularDependency');
+DEP.CircularDependency = CircularDependency;
+
+BusyRecomputing = new Tag('BusyRecomputing');
+DEP.BusyRecomputing = BusyRecomputing;
/*----- Main code ---------------------------------------------------------*/
* causes that `Dep' to become bad in turn.
*/
-DEP.Dep = function (value, maybefunc) {
+function Dep(value, maybefunc) {
/* Initialize a new `Dep' object.
*
* Handling of the arguments is a little fiddly. If two arguments are
}
}
+DEP.Dep = Dep;
Dep._seq = 0; // Next sequence number to allocate.
Dep.prototype = {
}
};
-DEP.orelse = function (thunk, errthunk) {
+function orelse(thunk, errthunk) {
/* Call THUNK. If it succeeds, then return its result. If THUNK
* reads a bad dep then call ERRTHINK and return its result instead.
*/
else throw e;
}
}
+DEP.orelse = orelse;
-DEP.bad = function () {
+function bad() {
/* For use in a value-function: make the dep be bad. */
throw BAD;
}
+DEP.bad = bad;
function recompute_pending() {
/* Recompute any pending dependencies.
}
}
-DEP.with_frozen = function (body, delay) {
+function with_frozen(body, delay) {
/* Call BODY with dependencies frozen.
*
* If the BODY function changes any dep values (using D.set_value(...))
break;
}
}
+DEP.with_frozen = with_frozen;
/*----- That's all, folks -------------------------------------------------*/
-} })();
+})();