                         }
                         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

    /// The current size of the layout node's contents
    // TODO: currently this is only used by UIScrollView - should it be public?
    public var contentSize: CGSize {
        return attempt { try inferContentSize() } ?? .zero
    }

    // AutoLayout support

            return
        }
        cleanUp()
        attempt(update)
    }

    // Create the node using a UIView or UIViewController subclass
