Commit cccaaec
committed
miniscript: non-recursive Display implementation
This uses the new iterator extensions to implement a `DisplayNode`
wrapper around a `Terminal` which understands that pubkeys, threshold k
values, etc., count as "children" for display purposes.
We can then embed all the alias/wrapper logic in the `as_node` method
and the new `fragment_name` method. The latter is generally useful and
ought to be public; given a fragment, it outputs its name, without
recursing but with consideration of the aliasing rules. Previously this
logic was embedded in the Terminal::condition_fmt method.
The resulting display algorithm is much easier to follow, although it
uses more lines of code (primarily in the form of large repetitive match
statements). cargo bloat shows there is a slight reduction in code size
attributed to the miniscript crate, though a slight increase in the
total code size for an example binary which basically implements the
`string_rtt` test.
I think with some effort we should be able to reduce the code size of
this algorithm. The important thing though is that it's not recursive.
The exact results are as follows (though they have limited use without
my committing the actual example program, which is a little ugly and not
generally useful).
Before:
File .text Size Crate Name
0.0% 0.9% 7.3KiB miniscript miniscript::miniscript::astelem::<impl miniscript::expression::FromTree for miniscript::miniscript::decode::Terminal<Pk,Ctx>>::from_tree
0.0% 0.7% 5.8KiB miniscript miniscript::miniscript::types::Type::type_check
0.0% 0.6% 4.4KiB miniscript miniscript::miniscript::types::extra_props::ExtData::threshold
0.0% 0.5% 4.0KiB miniscript <miniscript::Error as core::fmt::Display>::fmt
0.0% 0.5% 4.0KiB miniscript miniscript::miniscript::astelem::<impl miniscript::miniscript::decode::Terminal<Pk,Ctx>>::conditional_fmt
0.0% 0.5% 3.7KiB miniscript miniscript::miniscript::wrap_into_miniscript
0.0% 0.4% 3.0KiB miniscript miniscript::miniscript::types::extra_props::ExtData::or_i
0.0% 0.4% 3.0KiB miniscript <miniscript::miniscript::decode::Terminal<Pk,Ctx> as core::cmp::PartialEq>::eq
0.0% 0.3% 2.8KiB miniscript <miniscript::miniscript::types::Error as core::fmt::Display>::fmt
0.0% 0.3% 2.5KiB miniscript miniscript::expression::Tree::from_slice_delim
0.0% 0.3% 2.4KiB miniscript miniscript::miniscript::types::extra_props::ExtData::type_check
0.0% 0.3% 2.4KiB miniscript alloc::collections::btree::node::BalancingContext<K,V>::bulk_steal_left
0.0% 0.3% 2.2KiB miniscript miniscript::miniscript::split_expression_name
0.0% 0.3% 2.2KiB miniscript <miniscript::Error as core::fmt::Debug>::fmt
0.0% 0.3% 2.1KiB miniscript miniscript::miniscript::types::extra_props::ExtData::and_or
0.0% 0.2% 1.9KiB miniscript miniscript::miniscript::types::extra_props::ExtData::or_b
0.0% 0.2% 1.9KiB miniscript core::slice::sort::merge
0.0% 0.2% 1.8KiB miniscript core::slice::sort::merge
0.0% 0.2% 1.8KiB miniscript core::slice::sort::merge
0.0% 0.2% 1.8KiB miniscript core::slice::sort::merge
0.7% 33.0% 262.1KiB And 1454 smaller methods. Use -n N to show more.
0.9% 40.7% 323.2KiB filtered data size, the file size is 34.8MiB
After:
File .text Size Crate Name
0.0% 0.9% 7.3KiB miniscript miniscript::miniscript::astelem::<impl miniscript::expression::FromTree for miniscript::miniscript::decode::Terminal<Pk,Ctx>>::from_tree
0.0% 0.7% 5.8KiB miniscript miniscript::miniscript::types::Type::type_check
0.0% 0.7% 5.7KiB miniscript miniscript::miniscript::display::<impl miniscript::miniscript::decode::Terminal<Pk,Ctx>>::conditional_fmt
0.0% 0.6% 4.4KiB miniscript miniscript::miniscript::types::extra_props::ExtData::threshold
0.0% 0.5% 4.3KiB miniscript <miniscript::miniscript::display::DisplayNode<Pk,Ctx> as miniscript::iter::tree::TreeLike>::as_node
0.0% 0.5% 4.0KiB miniscript <miniscript::Error as core::fmt::Display>::fmt
0.0% 0.5% 3.7KiB miniscript miniscript::miniscript::wrap_into_miniscript
0.0% 0.4% 3.0KiB miniscript miniscript::miniscript::types::extra_props::ExtData::or_i
0.0% 0.3% 2.8KiB miniscript <miniscript::miniscript::types::Error as core::fmt::Display>::fmt
0.0% 0.3% 2.5KiB miniscript miniscript::expression::Tree::from_slice_delim
0.0% 0.3% 2.4KiB miniscript miniscript::miniscript::types::extra_props::ExtData::type_check
0.0% 0.3% 2.4KiB miniscript alloc::collections::btree::node::BalancingContext<K,V>::bulk_steal_left
0.0% 0.3% 2.2KiB miniscript miniscript::miniscript::split_expression_name
0.0% 0.3% 2.2KiB miniscript <miniscript::Error as core::fmt::Debug>::fmt
0.0% 0.3% 2.1KiB miniscript miniscript::miniscript::types::extra_props::ExtData::and_or
0.0% 0.2% 1.9KiB miniscript miniscript::miniscript::types::extra_props::ExtData::or_b
0.0% 0.2% 1.9KiB miniscript core::slice::sort::merge
0.0% 0.2% 1.8KiB miniscript core::slice::sort::merge
0.0% 0.2% 1.8KiB miniscript core::slice::sort::merge
0.0% 0.2% 1.8KiB miniscript core::slice::sort::merge
0.7% 32.2% 256.3KiB And 1423 smaller methods. Use -n N to show more.
0.9% 40.2% 320.4KiB filtered data size, the file size is 35.2MiB1 parent 47bed0c commit cccaaec
4 files changed
+354
-227
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | 10 | | |
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
15 | 14 | | |
16 | 15 | | |
17 | 16 | | |
18 | | - | |
| 17 | + | |
19 | 18 | | |
20 | 19 | | |
21 | 20 | | |
22 | 21 | | |
23 | 22 | | |
24 | 23 | | |
25 | 24 | | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
163 | | - | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | 25 | | |
243 | 26 | | |
244 | 27 | | |
| |||
0 commit comments