Commit | Line | Data |
---|---|---|
4f8c7db9 | 1 | import { _symbol, _symbol_Q, _list_Q, _vector_Q, _hash_map_Q, Atom } from './types' |
4eb71990 JM |
2 | |
3 | export function pr_str(obj, print_readably) { | |
4f8c7db9 JM |
4 | if (typeof print_readably === 'undefined') { print_readably = true } |
5 | var _r = print_readably | |
afa79313 | 6 | if (_list_Q(obj)) { |
4f8c7db9 JM |
7 | var ret = obj.map(function(e) { return pr_str(e,_r) }) |
8 | return "(" + ret.join(' ') + ")" | |
afa79313 | 9 | } else if (_vector_Q(obj)) { |
4f8c7db9 JM |
10 | var ret = obj.map(function(e) { return pr_str(e,_r) }) |
11 | return "[" + ret.join(' ') + "]" | |
afa79313 | 12 | } else if (_hash_map_Q(obj)) { |
4f8c7db9 | 13 | var ret = [] |
afa79313 | 14 | for (let [k,v] of obj) { |
4f8c7db9 | 15 | ret.push(pr_str(k,_r), pr_str(v,_r)) |
afa79313 | 16 | } |
4f8c7db9 | 17 | return "{" + ret.join(' ') + "}" |
4eb71990 JM |
18 | } else if (typeof obj === "string") { |
19 | if (obj[0] === '\u029e') { | |
4f8c7db9 | 20 | return ':' + obj.slice(1) |
4eb71990 JM |
21 | } else if (_r) { |
22 | return '"' + obj.replace(/\\/g, "\\\\") | |
23 | .replace(/"/g, '\\"') | |
4f8c7db9 | 24 | .replace(/\n/g, "\\n") + '"' // string |
4eb71990 | 25 | } else { |
4f8c7db9 | 26 | return obj |
4eb71990 | 27 | } |
4f8c7db9 JM |
28 | } else if (_symbol_Q(obj)) { |
29 | return Symbol.keyFor(obj) | |
4eb71990 | 30 | } else if (obj === null) { |
4f8c7db9 | 31 | return "nil" |
e5c4e656 | 32 | } else if (obj instanceof Atom) { |
4f8c7db9 | 33 | return "(atom " + pr_str(obj.val,_r) + ")" |
4eb71990 | 34 | } else { |
4f8c7db9 | 35 | return obj.toString() |
4eb71990 JM |
36 | } |
37 | } |