1[
2 {"type":"KeywordReserved","value":"const"},
3 {"type":"TextWhitespace","value":" "},
4 {"type":"Name","value":"std"},
5 {"type":"TextWhitespace","value":" "},
6 {"type":"Operator","value":"="},
7 {"type":"TextWhitespace","value":" "},
8 {"type":"NameBuiltin","value":"@import"},
9 {"type":"Punctuation","value":"("},
10 {"type":"LiteralString","value":"\"std.zig\""},
11 {"type":"Punctuation","value":");"},
12 {"type":"TextWhitespace","value":"\n"},
13 {"type":"KeywordReserved","value":"const"},
14 {"type":"TextWhitespace","value":" "},
15 {"type":"Name","value":"builtin"},
16 {"type":"TextWhitespace","value":" "},
17 {"type":"Operator","value":"="},
18 {"type":"TextWhitespace","value":" "},
19 {"type":"Name","value":"std"},
20 {"type":"Punctuation","value":"."},
21 {"type":"Name","value":"builtin"},
22 {"type":"Punctuation","value":";"},
23 {"type":"TextWhitespace","value":"\n"},
24 {"type":"KeywordReserved","value":"const"},
25 {"type":"TextWhitespace","value":" "},
26 {"type":"Name","value":"testing"},
27 {"type":"TextWhitespace","value":" "},
28 {"type":"Operator","value":"="},
29 {"type":"TextWhitespace","value":" "},
30 {"type":"Name","value":"std"},
31 {"type":"Punctuation","value":"."},
32 {"type":"Name","value":"testing"},
33 {"type":"Punctuation","value":";"},
34 {"type":"TextWhitespace","value":"\n\n"},
35 {"type":"KeywordReserved","value":"pub"},
36 {"type":"TextWhitespace","value":" "},
37 {"type":"Keyword","value":"fn"},
38 {"type":"TextWhitespace","value":" "},
39 {"type":"Name","value":"once"},
40 {"type":"Punctuation","value":"("},
41 {"type":"KeywordReserved","value":"comptime"},
42 {"type":"TextWhitespace","value":" "},
43 {"type":"Name","value":"f"},
44 {"type":"Operator","value":":"},
45 {"type":"TextWhitespace","value":" "},
46 {"type":"Keyword","value":"fn"},
47 {"type":"TextWhitespace","value":" "},
48 {"type":"Punctuation","value":"()"},
49 {"type":"TextWhitespace","value":" "},
50 {"type":"KeywordType","value":"void"},
51 {"type":"Punctuation","value":")"},
52 {"type":"TextWhitespace","value":" "},
53 {"type":"Name","value":"Once"},
54 {"type":"Punctuation","value":"("},
55 {"type":"Name","value":"f"},
56 {"type":"Punctuation","value":")"},
57 {"type":"TextWhitespace","value":" "},
58 {"type":"Punctuation","value":"{"},
59 {"type":"TextWhitespace","value":"\n "},
60 {"type":"Keyword","value":"return"},
61 {"type":"TextWhitespace","value":" "},
62 {"type":"Name","value":"Once"},
63 {"type":"Punctuation","value":"("},
64 {"type":"Name","value":"f"},
65 {"type":"Punctuation","value":"){};"},
66 {"type":"TextWhitespace","value":"\n"},
67 {"type":"Punctuation","value":"}"},
68 {"type":"TextWhitespace","value":"\n\n"},
69 {"type":"CommentSingle","value":"/// An object that executes the function `f` just once.\n"},
70 {"type":"KeywordReserved","value":"pub"},
71 {"type":"TextWhitespace","value":" "},
72 {"type":"Keyword","value":"fn"},
73 {"type":"TextWhitespace","value":" "},
74 {"type":"Name","value":"Once"},
75 {"type":"Punctuation","value":"("},
76 {"type":"KeywordReserved","value":"comptime"},
77 {"type":"TextWhitespace","value":" "},
78 {"type":"Name","value":"f"},
79 {"type":"Operator","value":":"},
80 {"type":"TextWhitespace","value":" "},
81 {"type":"Keyword","value":"fn"},
82 {"type":"TextWhitespace","value":" "},
83 {"type":"Punctuation","value":"()"},
84 {"type":"TextWhitespace","value":" "},
85 {"type":"KeywordType","value":"void"},
86 {"type":"Punctuation","value":")"},
87 {"type":"TextWhitespace","value":" "},
88 {"type":"KeywordType","value":"type"},
89 {"type":"TextWhitespace","value":" "},
90 {"type":"Punctuation","value":"{"},
91 {"type":"TextWhitespace","value":"\n "},
92 {"type":"Keyword","value":"return"},
93 {"type":"TextWhitespace","value":" "},
94 {"type":"Keyword","value":"struct"},
95 {"type":"TextWhitespace","value":" "},
96 {"type":"Punctuation","value":"{"},
97 {"type":"TextWhitespace","value":"\n "},
98 {"type":"Name","value":"done"},
99 {"type":"Operator","value":":"},
100 {"type":"TextWhitespace","value":" "},
101 {"type":"KeywordType","value":"bool"},
102 {"type":"TextWhitespace","value":" "},
103 {"type":"Operator","value":"="},
104 {"type":"TextWhitespace","value":" "},
105 {"type":"KeywordConstant","value":"false"},
106 {"type":"Punctuation","value":","},
107 {"type":"TextWhitespace","value":"\n "},
108 {"type":"Name","value":"mutex"},
109 {"type":"Operator","value":":"},
110 {"type":"TextWhitespace","value":" "},
111 {"type":"Name","value":"std"},
112 {"type":"Punctuation","value":"."},
113 {"type":"Name","value":"Mutex"},
114 {"type":"TextWhitespace","value":" "},
115 {"type":"Operator","value":"="},
116 {"type":"TextWhitespace","value":" "},
117 {"type":"Name","value":"std"},
118 {"type":"Punctuation","value":"."},
119 {"type":"Name","value":"Mutex"},
120 {"type":"Punctuation","value":"."},
121 {"type":"Name","value":"init"},
122 {"type":"Punctuation","value":"(),"},
123 {"type":"TextWhitespace","value":"\n\n "},
124 {"type":"CommentSingle","value":"/// Call the function `f`.\n"},
125 {"type":"TextWhitespace","value":" "},
126 {"type":"CommentSingle","value":"/// If `call` is invoked multiple times `f` will be executed only the\n"},
127 {"type":"TextWhitespace","value":" "},
128 {"type":"CommentSingle","value":"/// first time.\n"},
129 {"type":"TextWhitespace","value":" "},
130 {"type":"CommentSingle","value":"/// The invocations are thread-safe.\n"},
131 {"type":"TextWhitespace","value":" "},
132 {"type":"KeywordReserved","value":"pub"},
133 {"type":"TextWhitespace","value":" "},
134 {"type":"Keyword","value":"fn"},
135 {"type":"TextWhitespace","value":" "},
136 {"type":"Name","value":"call"},
137 {"type":"Punctuation","value":"("},
138 {"type":"Name","value":"self"},
139 {"type":"Operator","value":":"},
140 {"type":"TextWhitespace","value":" "},
141 {"type":"Operator","value":"*"},
142 {"type":"NameBuiltin","value":"@This"},
143 {"type":"Punctuation","value":"())"},
144 {"type":"TextWhitespace","value":" "},
145 {"type":"KeywordType","value":"void"},
146 {"type":"TextWhitespace","value":" "},
147 {"type":"Punctuation","value":"{"},
148 {"type":"TextWhitespace","value":"\n "},
149 {"type":"Keyword","value":"if"},
150 {"type":"TextWhitespace","value":" "},
151 {"type":"Punctuation","value":"("},
152 {"type":"NameBuiltin","value":"@atomicLoad"},
153 {"type":"Punctuation","value":"("},
154 {"type":"KeywordType","value":"bool"},
155 {"type":"Punctuation","value":","},
156 {"type":"TextWhitespace","value":" "},
157 {"type":"Operator","value":"\u0026"},
158 {"type":"Name","value":"self"},
159 {"type":"Punctuation","value":"."},
160 {"type":"Name","value":"done"},
161 {"type":"Punctuation","value":","},
162 {"type":"TextWhitespace","value":" "},
163 {"type":"Punctuation","value":"."},
164 {"type":"Name","value":"Acquire"},
165 {"type":"Punctuation","value":"))"},
166 {"type":"TextWhitespace","value":"\n "},
167 {"type":"Keyword","value":"return"},
168 {"type":"Punctuation","value":";"},
169 {"type":"TextWhitespace","value":"\n\n "},
170 {"type":"Keyword","value":"return"},
171 {"type":"TextWhitespace","value":" "},
172 {"type":"Name","value":"self"},
173 {"type":"Punctuation","value":"."},
174 {"type":"Name","value":"callSlow"},
175 {"type":"Punctuation","value":"();"},
176 {"type":"TextWhitespace","value":"\n "},
177 {"type":"Punctuation","value":"}"},
178 {"type":"TextWhitespace","value":"\n\n "},
179 {"type":"Keyword","value":"fn"},
180 {"type":"TextWhitespace","value":" "},
181 {"type":"Name","value":"callSlow"},
182 {"type":"Punctuation","value":"("},
183 {"type":"Name","value":"self"},
184 {"type":"Operator","value":":"},
185 {"type":"TextWhitespace","value":" "},
186 {"type":"Operator","value":"*"},
187 {"type":"NameBuiltin","value":"@This"},
188 {"type":"Punctuation","value":"())"},
189 {"type":"TextWhitespace","value":" "},
190 {"type":"KeywordType","value":"void"},
191 {"type":"TextWhitespace","value":" "},
192 {"type":"Punctuation","value":"{"},
193 {"type":"TextWhitespace","value":"\n "},
194 {"type":"NameBuiltin","value":"@setCold"},
195 {"type":"Punctuation","value":"("},
196 {"type":"KeywordConstant","value":"true"},
197 {"type":"Punctuation","value":");"},
198 {"type":"TextWhitespace","value":"\n\n "},
199 {"type":"KeywordReserved","value":"const"},
200 {"type":"TextWhitespace","value":" "},
201 {"type":"Name","value":"T"},
202 {"type":"TextWhitespace","value":" "},
203 {"type":"Operator","value":"="},
204 {"type":"TextWhitespace","value":" "},
205 {"type":"Name","value":"self"},
206 {"type":"Punctuation","value":"."},
207 {"type":"Name","value":"mutex"},
208 {"type":"Punctuation","value":"."},
209 {"type":"Name","value":"acquire"},
210 {"type":"Punctuation","value":"();"},
211 {"type":"TextWhitespace","value":"\n "},
212 {"type":"Keyword","value":"defer"},
213 {"type":"TextWhitespace","value":" "},
214 {"type":"Name","value":"T"},
215 {"type":"Punctuation","value":"."},
216 {"type":"Name","value":"release"},
217 {"type":"Punctuation","value":"();"},
218 {"type":"TextWhitespace","value":"\n\n "},
219 {"type":"CommentSingle","value":"// The first thread to acquire the mutex gets to run the initializer\n"},
220 {"type":"TextWhitespace","value":" "},
221 {"type":"Keyword","value":"if"},
222 {"type":"TextWhitespace","value":" "},
223 {"type":"Punctuation","value":"("},
224 {"type":"Operator","value":"!"},
225 {"type":"Name","value":"self"},
226 {"type":"Punctuation","value":"."},
227 {"type":"Name","value":"done"},
228 {"type":"Punctuation","value":")"},
229 {"type":"TextWhitespace","value":" "},
230 {"type":"Punctuation","value":"{"},
231 {"type":"TextWhitespace","value":"\n "},
232 {"type":"Name","value":"f"},
233 {"type":"Punctuation","value":"();"},
234 {"type":"TextWhitespace","value":"\n "},
235 {"type":"NameBuiltin","value":"@atomicStore"},
236 {"type":"Punctuation","value":"("},
237 {"type":"KeywordType","value":"bool"},
238 {"type":"Punctuation","value":","},
239 {"type":"TextWhitespace","value":" "},
240 {"type":"Operator","value":"\u0026"},
241 {"type":"Name","value":"self"},
242 {"type":"Punctuation","value":"."},
243 {"type":"Name","value":"done"},
244 {"type":"Punctuation","value":","},
245 {"type":"TextWhitespace","value":" "},
246 {"type":"KeywordConstant","value":"true"},
247 {"type":"Punctuation","value":","},
248 {"type":"TextWhitespace","value":" "},
249 {"type":"Punctuation","value":"."},
250 {"type":"Name","value":"Release"},
251 {"type":"Punctuation","value":");"},
252 {"type":"TextWhitespace","value":"\n "},
253 {"type":"Punctuation","value":"}"},
254 {"type":"TextWhitespace","value":"\n "},
255 {"type":"Punctuation","value":"}"},
256 {"type":"TextWhitespace","value":"\n "},
257 {"type":"Punctuation","value":"};"},
258 {"type":"TextWhitespace","value":"\n"},
259 {"type":"Punctuation","value":"}"},
260 {"type":"TextWhitespace","value":"\n\n"},
261 {"type":"KeywordReserved","value":"var"},
262 {"type":"TextWhitespace","value":" "},
263 {"type":"Name","value":"global_number"},
264 {"type":"Operator","value":":"},
265 {"type":"TextWhitespace","value":" "},
266 {"type":"KeywordType","value":"i32"},
267 {"type":"TextWhitespace","value":" "},
268 {"type":"Operator","value":"="},
269 {"type":"TextWhitespace","value":" "},
270 {"type":"LiteralNumberInteger","value":"0"},
271 {"type":"Punctuation","value":";"},
272 {"type":"TextWhitespace","value":"\n"},
273 {"type":"KeywordReserved","value":"var"},
274 {"type":"TextWhitespace","value":" "},
275 {"type":"Name","value":"global_once"},
276 {"type":"TextWhitespace","value":" "},
277 {"type":"Operator","value":"="},
278 {"type":"TextWhitespace","value":" "},
279 {"type":"Name","value":"once"},
280 {"type":"Punctuation","value":"("},
281 {"type":"Name","value":"incr"},
282 {"type":"Punctuation","value":");"},
283 {"type":"TextWhitespace","value":"\n\n"},
284 {"type":"Keyword","value":"fn"},
285 {"type":"TextWhitespace","value":" "},
286 {"type":"Name","value":"incr"},
287 {"type":"Punctuation","value":"()"},
288 {"type":"TextWhitespace","value":" "},
289 {"type":"KeywordType","value":"void"},
290 {"type":"TextWhitespace","value":" "},
291 {"type":"Punctuation","value":"{"},
292 {"type":"TextWhitespace","value":"\n "},
293 {"type":"Name","value":"global_number"},
294 {"type":"TextWhitespace","value":" "},
295 {"type":"Operator","value":"+="},
296 {"type":"TextWhitespace","value":" "},
297 {"type":"LiteralNumberInteger","value":"1"},
298 {"type":"Punctuation","value":";"},
299 {"type":"TextWhitespace","value":"\n"},
300 {"type":"Punctuation","value":"}"},
301 {"type":"TextWhitespace","value":"\n\n"},
302 {"type":"Keyword","value":"test"},
303 {"type":"TextWhitespace","value":" "},
304 {"type":"LiteralString","value":"\"Once executes its function just once\""},
305 {"type":"TextWhitespace","value":" "},
306 {"type":"Punctuation","value":"{"},
307 {"type":"TextWhitespace","value":"\n "},
308 {"type":"Keyword","value":"if"},
309 {"type":"TextWhitespace","value":" "},
310 {"type":"Punctuation","value":"("},
311 {"type":"Name","value":"builtin"},
312 {"type":"Punctuation","value":"."},
313 {"type":"Name","value":"single_threaded"},
314 {"type":"Punctuation","value":")"},
315 {"type":"TextWhitespace","value":" "},
316 {"type":"Punctuation","value":"{"},
317 {"type":"TextWhitespace","value":"\n "},
318 {"type":"Name","value":"global_once"},
319 {"type":"Punctuation","value":"."},
320 {"type":"Name","value":"call"},
321 {"type":"Punctuation","value":"();"},
322 {"type":"TextWhitespace","value":"\n "},
323 {"type":"Name","value":"global_once"},
324 {"type":"Punctuation","value":"."},
325 {"type":"Name","value":"call"},
326 {"type":"Punctuation","value":"();"},
327 {"type":"TextWhitespace","value":"\n "},
328 {"type":"Punctuation","value":"}"},
329 {"type":"TextWhitespace","value":" "},
330 {"type":"Keyword","value":"else"},
331 {"type":"TextWhitespace","value":" "},
332 {"type":"Punctuation","value":"{"},
333 {"type":"TextWhitespace","value":"\n "},
334 {"type":"KeywordReserved","value":"var"},
335 {"type":"TextWhitespace","value":" "},
336 {"type":"Name","value":"threads"},
337 {"type":"Operator","value":":"},
338 {"type":"TextWhitespace","value":" "},
339 {"type":"Punctuation","value":"["},
340 {"type":"LiteralNumberInteger","value":"10"},
341 {"type":"Punctuation","value":"]"},
342 {"type":"Operator","value":"*"},
343 {"type":"Name","value":"std"},
344 {"type":"Punctuation","value":"."},
345 {"type":"Name","value":"Thread"},
346 {"type":"TextWhitespace","value":" "},
347 {"type":"Operator","value":"="},
348 {"type":"TextWhitespace","value":" "},
349 {"type":"KeywordConstant","value":"undefined"},
350 {"type":"Punctuation","value":";"},
351 {"type":"TextWhitespace","value":"\n "},
352 {"type":"Keyword","value":"defer"},
353 {"type":"TextWhitespace","value":" "},
354 {"type":"Keyword","value":"for"},
355 {"type":"TextWhitespace","value":" "},
356 {"type":"Punctuation","value":"("},
357 {"type":"Name","value":"threads"},
358 {"type":"Punctuation","value":")"},
359 {"type":"TextWhitespace","value":" "},
360 {"type":"Operator","value":"|"},
361 {"type":"Name","value":"handle"},
362 {"type":"Operator","value":"|"},
363 {"type":"TextWhitespace","value":" "},
364 {"type":"Name","value":"handle"},
365 {"type":"Punctuation","value":"."},
366 {"type":"Name","value":"wait"},
367 {"type":"Punctuation","value":"();"},
368 {"type":"TextWhitespace","value":"\n\n "},
369 {"type":"Keyword","value":"for"},
370 {"type":"TextWhitespace","value":" "},
371 {"type":"Punctuation","value":"("},
372 {"type":"Name","value":"threads"},
373 {"type":"Punctuation","value":")"},
374 {"type":"TextWhitespace","value":" "},
375 {"type":"Operator","value":"|*"},
376 {"type":"Name","value":"handle"},
377 {"type":"Operator","value":"|"},
378 {"type":"TextWhitespace","value":" "},
379 {"type":"Punctuation","value":"{"},
380 {"type":"TextWhitespace","value":"\n "},
381 {"type":"Name","value":"handle"},
382 {"type":"Punctuation","value":"."},
383 {"type":"Operator","value":"*"},
384 {"type":"TextWhitespace","value":" "},
385 {"type":"Operator","value":"="},
386 {"type":"TextWhitespace","value":" "},
387 {"type":"Keyword","value":"try"},
388 {"type":"TextWhitespace","value":" "},
389 {"type":"Name","value":"std"},
390 {"type":"Punctuation","value":"."},
391 {"type":"Name","value":"Thread"},
392 {"type":"Punctuation","value":"."},
393 {"type":"Name","value":"spawn"},
394 {"type":"Punctuation","value":"("},
395 {"type":"NameBuiltin","value":"@as"},
396 {"type":"Punctuation","value":"("},
397 {"type":"KeywordType","value":"u8"},
398 {"type":"Punctuation","value":","},
399 {"type":"TextWhitespace","value":" "},
400 {"type":"LiteralNumberInteger","value":"0"},
401 {"type":"Punctuation","value":"),"},
402 {"type":"TextWhitespace","value":" "},
403 {"type":"Keyword","value":"struct"},
404 {"type":"TextWhitespace","value":" "},
405 {"type":"Punctuation","value":"{"},
406 {"type":"TextWhitespace","value":"\n "},
407 {"type":"Keyword","value":"fn"},
408 {"type":"TextWhitespace","value":" "},
409 {"type":"Name","value":"thread_fn"},
410 {"type":"Punctuation","value":"("},
411 {"type":"Name","value":"x"},
412 {"type":"Operator","value":":"},
413 {"type":"TextWhitespace","value":" "},
414 {"type":"KeywordType","value":"u8"},
415 {"type":"Punctuation","value":")"},
416 {"type":"TextWhitespace","value":" "},
417 {"type":"KeywordType","value":"void"},
418 {"type":"TextWhitespace","value":" "},
419 {"type":"Punctuation","value":"{"},
420 {"type":"TextWhitespace","value":"\n "},
421 {"type":"Name","value":"global_once"},
422 {"type":"Punctuation","value":"."},
423 {"type":"Name","value":"call"},
424 {"type":"Punctuation","value":"();"},
425 {"type":"TextWhitespace","value":"\n "},
426 {"type":"Punctuation","value":"}"},
427 {"type":"TextWhitespace","value":"\n "},
428 {"type":"Punctuation","value":"}."},
429 {"type":"Name","value":"thread_fn"},
430 {"type":"Punctuation","value":");"},
431 {"type":"TextWhitespace","value":"\n "},
432 {"type":"Punctuation","value":"}"},
433 {"type":"TextWhitespace","value":"\n "},
434 {"type":"Punctuation","value":"}"},
435 {"type":"TextWhitespace","value":"\n\n "},
436 {"type":"Name","value":"testing"},
437 {"type":"Punctuation","value":"."},
438 {"type":"Name","value":"expectEqual"},
439 {"type":"Punctuation","value":"("},
440 {"type":"NameBuiltin","value":"@as"},
441 {"type":"Punctuation","value":"("},
442 {"type":"KeywordType","value":"i32"},
443 {"type":"Punctuation","value":","},
444 {"type":"TextWhitespace","value":" "},
445 {"type":"LiteralNumberInteger","value":"1"},
446 {"type":"Punctuation","value":"),"},
447 {"type":"TextWhitespace","value":" "},
448 {"type":"Name","value":"global_number"},
449 {"type":"Punctuation","value":");"},
450 {"type":"TextWhitespace","value":"\n"},
451 {"type":"Punctuation","value":"}"},
452 {"type":"TextWhitespace","value":"\n"}
453]
View as plain text