Swift*: add seq/string?. swift: gensym/or macro fix
[jackhill/mal.git] / swift / printer.swift
1 //******************************************************************************
2 // MAL - printer
3 //******************************************************************************
4
5 import Foundation
6
7 var MalValPrintReadably = true
8
9 func with_print_readably<T>(print_readably: Bool, fn: () -> T) -> T {
10 let old = MalValPrintReadably
11 MalValPrintReadably = print_readably
12 let result = fn()
13 MalValPrintReadably = old
14 return result
15 }
16
17 func pr_str(m: MalVal, _ print_readably: Bool = MalValPrintReadably) -> String {
18 return with_print_readably(print_readably) {
19 if is_string(m) {
20 return print_readably ? escape(m.description) : m.description
21 }
22 if is_keyword(m) {
23 return ":\(m.description)"
24 }
25 return m.description
26 }
27 }