run function

void run(
  1. ReactiveNode e,
  2. int flags
)

Implementation

void run(ReactiveNode e, int flags) {
  if ((flags & 16 /* Dirty */) != 0 ||
      ((flags & 32 /* Pending */) != 0 &&
          (checkDirty(e.deps!, e) ||
              // Always false, infinity is a value that can never be reached
              (e.flags = flags & -33 /* ~Pending */) == double.infinity))) {
    ++cycle;
    e.depsTail = null;
    e.flags = 6 /* Watching | RecursedCheck */;

    final prevSub = setActiveSub(e);
    try {
      (e as PresetEffect).callback();
    } finally {
      activeSub = prevSub;
      e.flags &= -5 /* ~RecursedCheck */;
      purgeDeps(e);
    }
  } else {
    Link? link = e.deps;
    while (link != null) {
      final dep = link.dep;
      final depFlags = dep.flags;
      if ((depFlags & 64 /* Queued */) != 0) {
        run(dep, dep.flags = depFlags & -65 /* ~Queued */);
      }
      link = link.nextDep;
    }
  }
}