Commit | Line | Data |
---|---|---|
8c7587af MK |
1 | function printer_pr_list(expr, print_readably, idx, len, i, str) |
2 | { | |
3 | idx = substr(expr, 2) | |
4 | len = types_heap[idx]["len"] | |
5 | for (i = 0; i < len; ++i) { | |
6 | str = str printer_pr_str(types_heap[idx][i], print_readably) " " | |
7 | } | |
8 | return substr(str, 1, length(str) - 1) | |
9 | } | |
10 | ||
11 | function printer_pr_hash(expr, print_readably, idx, var, str) | |
12 | { | |
13 | idx = substr(expr, 2) | |
14 | for (var in types_heap[idx]) { | |
15 | switch (var) { | |
16 | case /^"/: | |
17 | str = str printer_pr_string(var, print_readably) " " printer_pr_str(types_heap[idx][var], print_readably) " " | |
18 | break | |
19 | case /^:/: | |
20 | str = str substr(var, 2) " " printer_pr_str(types_heap[idx][var], print_readably) " " | |
21 | break | |
22 | } | |
23 | } | |
24 | return substr(str, 1, length(str) - 1) | |
25 | } | |
26 | ||
27 | function printer_pr_string(expr, print_readably, v, r) | |
28 | { | |
29 | if (!print_readably) { | |
30 | return substr(expr, 2) | |
31 | } | |
32 | expr = substr(expr, 2) | |
33 | while (match(expr, /["\n\\]/, r)) { | |
34 | v = v substr(expr, 1, RSTART - 1) (r[0] == "\n" ? "\\n" : "\\" r[0]) | |
35 | expr = substr(expr, RSTART + RLENGTH) | |
36 | } | |
37 | return "\"" v expr "\"" | |
38 | } | |
39 | ||
40 | function printer_pr_str(expr, print_readably, var) | |
41 | { | |
42 | switch (expr) { | |
43 | case /^\(/: | |
44 | return "(" printer_pr_list(expr, print_readably) ")" | |
45 | case /^\[/: | |
46 | return "[" printer_pr_list(expr, print_readably) "]" | |
47 | case /^\{/: | |
48 | return "{" printer_pr_hash(expr, print_readably) "}" | |
49 | case /^"/: | |
50 | return printer_pr_string(expr, print_readably) | |
51 | case /^\$/: | |
52 | var = substr(expr, 2) | |
53 | return "#<Function> (fn* " printer_pr_str(types_heap[var]["params"], print_readably) " " printer_pr_str(types_heap[var]["body"], print_readably) ")" | |
54 | case /^&/: | |
55 | return "#<BuiltinFunction " env_builtinnames[substr(expr, 2)] ">" | |
56 | case /^%/: | |
57 | return "#<BuiltinFunction " env_builtinnames[types_heap[substr(expr, 2)]["func"]] ">" | |
58 | case /^\?/: | |
59 | return "(atom " printer_pr_str(types_heap[substr(expr, 2)]["obj"], print_readably) ")" | |
60 | default: | |
61 | return substr(expr, 2) | |
62 | } | |
63 | } |