7 procedure pr_str(ast: inout mal_val_ptr; readable: in boolean; result: out line);
8 procedure pr_seq(start_ch: in string; end_ch: in string; delim: in string; a_seq: inout mal_seq_ptr; readable: in boolean; result: out line);
11 package body printer is
13 procedure pr_string(val: inout line; readable: in boolean; result: out line) is
15 variable src_i, dst_i: integer;
18 s := new string(1 to val'length * 2);
20 for src_i in val'range loop
36 s(dst_i) := val(src_i);
39 result := new string'("" & '"' & s(1 to dst_i) & '"');
46 procedure pr_str(ast: inout mal_val_ptr; readable: in boolean; result: out line) is
51 result := new string'("nil");
53 result := new string'("true");
55 result := new string'("false");
57 write(l, ast.number_val);
60 result := ast.string_val;
62 pr_string(ast.string_val, readable, result);
64 result := new string'(":" & ast.string_val.all);
66 pr_seq("(", ")", " ", ast.seq_val, readable, result);
68 pr_seq("[", "]", " ", ast.seq_val, readable, result);
70 pr_seq("{", "}", " ", ast.seq_val, readable, result);
72 pr_str(ast.seq_val(0), true, l);
73 result := new string'("(atom " & l.all & ")");
75 result := new string'("#<NativeFunction:" & ast.string_val.all & ">");
77 result := new string'("#<MalFunction>");
81 procedure pr_seq(start_ch: in string; end_ch: in string; delim: in string; a_seq: inout mal_seq_ptr; readable: in boolean; result: out line) is
82 variable s, element_s: line;
84 s := new string'(start_ch);
85 for i in a_seq'range loop
86 pr_str(a_seq(i), readable, element_s);
88 s := new string'(s.all & element_s.all);
90 s := new string'(s.all & delim & element_s.all);
93 s := new string'(s.all & end_ch);
97 end package body printer;