Two bugs, which sort of cancelled each other out.
* I failed to invoke `new' when I made `BAD', which meant that `BAD'
actually ended up set to `undefined'.
* I didn't set `DEP.val' properly if `value' wasn't passed explicitly,
so, err, it ended up being `undefined', which is then erroneously
considered to be equivalent to `BAD'.
Fix this silliness.
var F_RECOMPUTING = 8; // Currently being recomputed.
var F_QUEUED = 16; // Queued for recomputation.
-var BAD = Tag('BAD') // Used for the value of `bad' deps.
+var BAD = new Tag('BAD'); // Used for the value of `bad' deps.
var DELAYED = []; // Actions delayed by `with_frozen'.
var PENDING = []; // Deps awaiting recomputation.
func = value;
f |= F_QUEUED;
} else {
- val = value;
+ val = value === undefined ? BAD : value;
func = null;
f |= F_VALUE | F_DEPS;
}