Skip to content

Commit 3490f52

Browse files
authored
Use null for computing rather than undefined (#235)
* Use `null` rather than `undefined` on `computing` This is consistent with the type specified for `currentComputed()`. * Specify the (trivial) semantics of `currentComputed()`
1 parent b6e8adf commit 3490f52

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

README.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ Some aspects of the algorithm:
442442
443443
Signal algorithms need to reference certain global state. This state is global for the entire thread, or "agent".
444444
445-
- `computing`: The innermost computed or effect Signal currently being reevaluated due to a `.get` or `.run` call, or `undefined`. Initially `undefined`.
445+
- `computing`: The innermost computed or effect Signal currently being reevaluated due to a `.get` or `.run` call, or `null`. Initially `null`.
446446
- `frozen`: Boolean denoting whether there is a callback currently executing which requires that the graph not be modified. Initially `false`.
447447
- `generation`: An incrementing integer, starting at 0, used to track how current a value is while avoiding circularities.
448448
@@ -549,7 +549,7 @@ With [AsyncContext](https://github.com/tc39/proposal-async-context), the callbac
549549
#### Method: `Signal.Computed.prototype.get`
550550
551551
1. If the current execution context is `frozen` or if this Signal has the state `~computing~`, or if this signal is an Effect and `computing` a computed Signal, throw an exception.
552-
1. If `computing` is not `undefined`, add this Signal to `computing`'s `sources` set.
552+
1. If `computing` is not `null`, add this Signal to `computing`'s `sources` set.
553553
1. NOTE: We do not add `computing` to this Signal's `sinks` set until/unless it becomes watched by a Watcher.
554554
1. If this Signal's state is `~dirty~` or `~checked~`: Repeat the following steps until this Signal is `~clean~`:
555555
1. Recurse up via `sources` to find the deepest, left-most (i.e. earliest observed) recursive source which is marked `~dirty~` (cutting off search when hitting a `~clean~` Signal, and including this Signal as the last thing to search).
@@ -632,13 +632,17 @@ With [AsyncContext](https://github.com/tc39/proposal-async-context), the callbac
632632
### Method: `Signal.subtle.untrack(cb)`
633633
634634
1. Let `c` be the execution context's current `computing` state.
635-
1. Set `computing` to undefined.
635+
1. Set `computing` to null.
636636
1. Call `cb`.
637637
1. Restore `computing` to `c` (even if `cb` threw an exception).
638638
1. Return the return value of `cb` (rethrowing any exception).
639639
640640
Note: untrack doesn't get you out of the `frozen` state, which is maintained strictly.
641641
642+
### Method: `Signal.subtle.currentComputed()`
643+
644+
1. Return the current `computing` value.
645+
642646
### Common algorithms
643647
644648
##### Algorithm: recalculate dirty computed Signal

0 commit comments

Comments
 (0)