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()
}