...
1#Issue: 758
2#Issue: 1044
3
4// TODO(perf): reduce number of conjunctions and disjunctions.
5-- stats.txt --
6Leaks: 0
7Freed: 24096
8Reused: 24051
9Allocs: 45
10Retain: 1
11
12Unifications: 18724
13Conjuncts: 100730
14Disjuncts: 24097
15
16-- in.cue --
17A: #Task
18B: #steps: #Script & {mount: [A]}
19C: #steps: #Script & {mount: [B]}
20
21#Script: {mount: [...#Task]}
22
23#Task: {
24 // Without the proper constructs, repeating the below results
25 // in exponential runtime.
26 #ref
27 #ref
28 _ | {}
29 _ | {}
30 #steps: #Script
31 ...
32}
33
34#ref: {a: 1} | {b: 2}
35-- out/eval/stats --
36Leaks: 0
37Freed: 24096
38Reused: 24051
39Allocs: 45
40Retain: 1
41
42Unifications: 18724
43Conjuncts: 100730
44Disjuncts: 24097
45-- out/eval --
46(struct){
47 A: (#struct){ |((#struct){
48 #steps: (#struct){
49 mount: (list){
50 }
51 }
52 a: (int){ 1 }
53 }, (#struct){
54 #steps: (#struct){
55 mount: (list){
56 }
57 }
58 a: (int){ 1 }
59 b: (int){ 2 }
60 }, (#struct){
61 #steps: (#struct){
62 mount: (list){
63 }
64 }
65 b: (int){ 2 }
66 }) }
67 B: (struct){
68 #steps: (#struct){
69 mount: (#list){
70 0: (#struct){ |((#struct){
71 #steps: (#struct){
72 mount: (list){
73 }
74 }
75 a: (int){ 1 }
76 }, (#struct){
77 #steps: (#struct){
78 mount: (list){
79 }
80 }
81 a: (int){ 1 }
82 b: (int){ 2 }
83 }, (#struct){
84 #steps: (#struct){
85 mount: (list){
86 }
87 }
88 b: (int){ 2 }
89 }) }
90 }
91 }
92 }
93 C: (struct){
94 #steps: (#struct){
95 mount: (#list){
96 0: (#struct){ |((#struct){
97 #steps: (#struct){
98 mount: (#list){
99 0: (#struct){ |((#struct){
100 #steps: (#struct){
101 mount: (list){
102 }
103 }
104 a: (int){ 1 }
105 }, (#struct){
106 #steps: (#struct){
107 mount: (list){
108 }
109 }
110 a: (int){ 1 }
111 b: (int){ 2 }
112 }, (#struct){
113 #steps: (#struct){
114 mount: (list){
115 }
116 }
117 b: (int){ 2 }
118 }) }
119 }
120 }
121 a: (int){ 1 }
122 }, (#struct){
123 #steps: (#struct){
124 mount: (#list){
125 0: (#struct){ |((#struct){
126 #steps: (#struct){
127 mount: (list){
128 }
129 }
130 a: (int){ 1 }
131 }, (#struct){
132 #steps: (#struct){
133 mount: (list){
134 }
135 }
136 a: (int){ 1 }
137 b: (int){ 2 }
138 }, (#struct){
139 #steps: (#struct){
140 mount: (list){
141 }
142 }
143 b: (int){ 2 }
144 }) }
145 }
146 }
147 a: (int){ 1 }
148 b: (int){ 2 }
149 }, (#struct){
150 #steps: (#struct){
151 mount: (#list){
152 0: (#struct){ |((#struct){
153 #steps: (#struct){
154 mount: (list){
155 }
156 }
157 a: (int){ 1 }
158 }, (#struct){
159 #steps: (#struct){
160 mount: (list){
161 }
162 }
163 a: (int){ 1 }
164 b: (int){ 2 }
165 }, (#struct){
166 #steps: (#struct){
167 mount: (list){
168 }
169 }
170 b: (int){ 2 }
171 }) }
172 }
173 }
174 b: (int){ 2 }
175 }) }
176 }
177 }
178 }
179 #Script: (#struct){
180 mount: (list){
181 }
182 }
183 #Task: (#struct){ |((#struct){
184 #steps: (#struct){
185 mount: (list){
186 }
187 }
188 a: (int){ 1 }
189 }, (#struct){
190 #steps: (#struct){
191 mount: (list){
192 }
193 }
194 a: (int){ 1 }
195 b: (int){ 2 }
196 }, (#struct){
197 #steps: (#struct){
198 mount: (list){
199 }
200 }
201 b: (int){ 2 }
202 }) }
203 #ref: (#struct){ |((#struct){
204 a: (int){ 1 }
205 }, (#struct){
206 b: (int){ 2 }
207 }) }
208}
209-- out/compile --
210--- in.cue
211{
212 A: 〈0;#Task〉
213 B: {
214 #steps: (〈1;#Script〉 & {
215 mount: [
216 〈3;A〉,
217 ]
218 })
219 }
220 C: {
221 #steps: (〈1;#Script〉 & {
222 mount: [
223 〈3;B〉,
224 ]
225 })
226 }
227 #Script: {
228 mount: [
229 ...〈2;#Task〉,
230 ]
231 }
232 #Task: {
233 〈1;#ref〉
234 〈1;#ref〉
235 (_|{})
236 (_|{})
237 #steps: 〈1;#Script〉
238 ...
239 }
240 #ref: ({
241 a: 1
242 }|{
243 b: 2
244 })
245}
View as plain text