func parseExpr()

in Sources/SIL/SExpr.swift [35:57]


    func parseExpr() throws -> SExpr {
        if skip("(") {
            var properties: [SExpr.Property] = []
            guard case let .symbol(name) = try parseExpr() else {
                throw parseError("Expected an expression body to start with a symbol")
            }
            while !skip(")") {
                let expr = try parseExpr()
                if case let .symbol(propName) = expr, skip("=") {
                    properties.append(.field(propName, try parseValue()))
                } else {
                    if case let .symbol(exprValue) = expr {
                        guard !exprValue.isEmpty else {
                            throw parseError("Malformed expression")
                        }
                    }
                    properties.append(.value(expr))
                }
            }
            return .record(name, properties)
        }
        return try parseValue()
    }