     // Used by LayoutExpression and for unit tests
     // Note: thrown error is always a SymbolError
     func value(forSymbol symbol: String) throws -> Any {
-        try setUpExpressions()
+        try setUpExpression(for: symbol)
         if let getter = _getters[symbol] {
             return try getter()
         }
+        assert(expressions[symbol] == nil)
         let getter: () throws -> Any
         switch symbol {
         case "left":

            }
        }
        if expressions["top"] == nil, expressions["bottom"] != nil {
            expressions["top"] = "bottom - height"
        }
    }

                return // Don't add to expressions arrays for re-evaluations
            } catch {
                // Something went wrong
            }
        }

        // Store expression
        if isViewControllerExpression {
            _viewControllerExpressions[symbol] = expression
        } else if isViewExpression {
