                         }
                         self._evaluating.append(symbol)
                         defer {
-                            assert(self._evaluating.last == symbol)
-                            self._evaluating.removeLast()
+                            if self._evaluating.last == symbol {
+                                self._evaluating.removeLast()
+                            } else {
+                                assertionFailure("symbol: `\(symbol)`, evaluating; `\(self._evaluating)`")
+                            }
                         }
                         let value = try SymbolError.wrap(evaluate, for: symbol)
                         cachedValue = value

        }
    }

    internal func logError(_ error: Error) {
        let error = LayoutError(error, for: self)
        if _unhandledError == nil || (_unhandledError?.isTransient == true && !error.isTransient) {
            _unhandledError = error
            bubbleUnhandledError()
        }
    }

    private func attempt<T>(_ closure: () throws -> T) -> T? {
        do {
            return try closure()
        } catch {
            logError(error)
            return nil
        }
    }

            return
        }
        cleanUp()
        attempt(update)
    }

    // Create the node using a UIView or UIViewController subclass
