blob: 2062932ee751664d07039ca888f67a3cbb0f31cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
|
@ ProgramNode (location: (0...620))
├── locals: [:x]
└── statements:
@ StatementsNode (location: (0...620))
└── body: (length: 17)
├── @ ModuleNode (location: (0...68))
│ ├── locals: []
│ ├── module_keyword_loc: (0...6) = "module"
│ ├── constant_path:
│ │ @ ConstantReadNode (location: (7...8))
│ │ └── name: :A
│ ├── body:
│ │ @ StatementsNode (location: (11...64))
│ │ └── body: (length: 1)
│ │ └── @ CallNode (location: (11...64))
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── message_loc: (11...14) = "foo"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ ├── block:
│ │ │ @ BlockNode (location: (15...64))
│ │ │ ├── locals: [:bar, :foo]
│ │ │ ├── parameters:
│ │ │ │ @ BlockParametersNode (location: (17...22))
│ │ │ │ ├── parameters:
│ │ │ │ │ @ ParametersNode (location: (18...21))
│ │ │ │ │ ├── requireds: (length: 1)
│ │ │ │ │ │ └── @ RequiredParameterNode (location: (18...21))
│ │ │ │ │ │ └── name: :bar
│ │ │ │ │ ├── optionals: (length: 0)
│ │ │ │ │ ├── rest: ∅
│ │ │ │ │ ├── posts: (length: 0)
│ │ │ │ │ ├── keywords: (length: 0)
│ │ │ │ │ ├── keyword_rest: ∅
│ │ │ │ │ └── block: ∅
│ │ │ │ ├── locals: (length: 0)
│ │ │ │ ├── opening_loc: (17...18) = "|"
│ │ │ │ └── closing_loc: (21...22) = "|"
│ │ │ ├── body:
│ │ │ │ @ StatementsNode (location: (27...60))
│ │ │ │ └── body: (length: 1)
│ │ │ │ └── @ WhileNode (location: (27...60))
│ │ │ │ ├── keyword_loc: (27...32) = "while"
│ │ │ │ ├── closing_loc: (57...60) = "end"
│ │ │ │ ├── predicate:
│ │ │ │ │ @ CallNode (location: (33...36))
│ │ │ │ │ ├── receiver: ∅
│ │ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ │ ├── message_loc: (33...36) = "foo"
│ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── arguments: ∅
│ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ ├── block: ∅
│ │ │ │ │ ├── flags: variable_call
│ │ │ │ │ └── name: "foo"
│ │ │ │ ├── statements:
│ │ │ │ │ @ StatementsNode (location: (43...52))
│ │ │ │ │ └── body: (length: 1)
│ │ │ │ │ └── @ LocalVariableWriteNode (location: (43...52))
│ │ │ │ │ ├── name: :foo
│ │ │ │ │ ├── depth: 0
│ │ │ │ │ ├── name_loc: (43...46) = "foo"
│ │ │ │ │ ├── value:
│ │ │ │ │ │ @ LocalVariableReadNode (location: (49...52))
│ │ │ │ │ │ ├── name: :bar
│ │ │ │ │ │ └── depth: 0
│ │ │ │ │ └── operator_loc: (47...48) = "="
│ │ │ │ └── flags:
│ │ │ ├── opening_loc: (15...16) = "{"
│ │ │ └── closing_loc: (63...64) = "}"
│ │ ├── flags:
│ │ └── name: "foo"
│ ├── end_keyword_loc: (65...68) = "end"
│ └── name: :A
├── @ DefNode (location: (70...110))
│ ├── name: :foo
│ ├── name_loc: (74...77) = "foo"
│ ├── receiver: ∅
│ ├── parameters: ∅
│ ├── body:
│ │ @ StatementsNode (location: (80...106))
│ │ └── body: (length: 1)
│ │ └── @ WhileNode (location: (80...106))
│ │ ├── keyword_loc: (90...95) = "while"
│ │ ├── closing_loc: ∅
│ │ ├── predicate:
│ │ │ @ CallNode (location: (96...106))
│ │ │ ├── receiver:
│ │ │ │ @ LocalVariableReadNode (location: (96...99))
│ │ │ │ ├── name: :foo
│ │ │ │ └── depth: 0
│ │ │ ├── call_operator_loc: ∅
│ │ │ ├── message_loc: (100...102) = "!="
│ │ │ ├── opening_loc: ∅
│ │ │ ├── arguments:
│ │ │ │ @ ArgumentsNode (location: (103...106))
│ │ │ │ └── arguments: (length: 1)
│ │ │ │ └── @ CallNode (location: (103...106))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (103...106) = "baz"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "baz"
│ │ │ ├── closing_loc: ∅
│ │ │ ├── block: ∅
│ │ │ ├── flags:
│ │ │ └── name: "!="
│ │ ├── statements:
│ │ │ @ StatementsNode (location: (80...89))
│ │ │ └── body: (length: 1)
│ │ │ └── @ LocalVariableWriteNode (location: (80...89))
│ │ │ ├── name: :foo
│ │ │ ├── depth: 0
│ │ │ ├── name_loc: (80...83) = "foo"
│ │ │ ├── value:
│ │ │ │ @ CallNode (location: (86...89))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (86...89) = "bar"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "bar"
│ │ │ └── operator_loc: (84...85) = "="
│ │ └── flags:
│ ├── locals: [:foo]
│ ├── def_keyword_loc: (70...73) = "def"
│ ├── operator_loc: ∅
│ ├── lparen_loc: ∅
│ ├── rparen_loc: ∅
│ ├── equal_loc: ∅
│ └── end_keyword_loc: (107...110) = "end"
├── @ ModuleNode (location: (112...146))
│ ├── locals: [:foo]
│ ├── module_keyword_loc: (112...118) = "module"
│ ├── constant_path:
│ │ @ ConstantReadNode (location: (119...120))
│ │ └── name: :A
│ ├── body:
│ │ @ StatementsNode (location: (123...142))
│ │ └── body: (length: 1)
│ │ └── @ WhileNode (location: (123...142))
│ │ ├── keyword_loc: (133...138) = "while"
│ │ ├── closing_loc: ∅
│ │ ├── predicate:
│ │ │ @ LocalVariableReadNode (location: (139...142))
│ │ │ ├── name: :foo
│ │ │ └── depth: 0
│ │ ├── statements:
│ │ │ @ StatementsNode (location: (123...132))
│ │ │ └── body: (length: 1)
│ │ │ └── @ LocalVariableWriteNode (location: (123...132))
│ │ │ ├── name: :foo
│ │ │ ├── depth: 0
│ │ │ ├── name_loc: (123...126) = "foo"
│ │ │ ├── value:
│ │ │ │ @ CallNode (location: (129...132))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (129...132) = "bar"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "bar"
│ │ │ └── operator_loc: (127...128) = "="
│ │ └── flags:
│ ├── end_keyword_loc: (143...146) = "end"
│ └── name: :A
├── @ ModuleNode (location: (148...182))
│ ├── locals: [:foo]
│ ├── module_keyword_loc: (148...154) = "module"
│ ├── constant_path:
│ │ @ ConstantReadNode (location: (155...156))
│ │ └── name: :A
│ ├── body:
│ │ @ StatementsNode (location: (159...178))
│ │ └── body: (length: 1)
│ │ └── @ UntilNode (location: (159...178))
│ │ ├── keyword_loc: (169...174) = "until"
│ │ ├── closing_loc: ∅
│ │ ├── predicate:
│ │ │ @ LocalVariableReadNode (location: (175...178))
│ │ │ ├── name: :foo
│ │ │ └── depth: 0
│ │ ├── statements:
│ │ │ @ StatementsNode (location: (159...168))
│ │ │ └── body: (length: 1)
│ │ │ └── @ LocalVariableWriteNode (location: (159...168))
│ │ │ ├── name: :foo
│ │ │ ├── depth: 0
│ │ │ ├── name_loc: (159...162) = "foo"
│ │ │ ├── value:
│ │ │ │ @ CallNode (location: (165...168))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (165...168) = "bar"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "bar"
│ │ │ └── operator_loc: (163...164) = "="
│ │ └── flags:
│ ├── end_keyword_loc: (179...182) = "end"
│ └── name: :A
├── @ ModuleNode (location: (184...228))
│ ├── locals: [:foo]
│ ├── module_keyword_loc: (184...190) = "module"
│ ├── constant_path:
│ │ @ ConstantReadNode (location: (191...192))
│ │ └── name: :A
│ ├── body:
│ │ @ StatementsNode (location: (195...224))
│ │ └── body: (length: 1)
│ │ └── @ WhileNode (location: (195...224))
│ │ ├── keyword_loc: (195...200) = "while"
│ │ ├── closing_loc: (221...224) = "end"
│ │ ├── predicate:
│ │ │ @ CallNode (location: (201...204))
│ │ │ ├── receiver: ∅
│ │ │ ├── call_operator_loc: ∅
│ │ │ ├── message_loc: (201...204) = "foo"
│ │ │ ├── opening_loc: ∅
│ │ │ ├── arguments: ∅
│ │ │ ├── closing_loc: ∅
│ │ │ ├── block: ∅
│ │ │ ├── flags: variable_call
│ │ │ └── name: "foo"
│ │ ├── statements:
│ │ │ @ StatementsNode (location: (209...218))
│ │ │ └── body: (length: 1)
│ │ │ └── @ LocalVariableWriteNode (location: (209...218))
│ │ │ ├── name: :foo
│ │ │ ├── depth: 0
│ │ │ ├── name_loc: (209...212) = "foo"
│ │ │ ├── value:
│ │ │ │ @ CallNode (location: (215...218))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (215...218) = "bar"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "bar"
│ │ │ └── operator_loc: (213...214) = "="
│ │ └── flags:
│ ├── end_keyword_loc: (225...228) = "end"
│ └── name: :A
├── @ ModuleNode (location: (230...299))
│ ├── locals: []
│ ├── module_keyword_loc: (230...236) = "module"
│ ├── constant_path:
│ │ @ ConstantReadNode (location: (237...238))
│ │ └── name: :A
│ ├── body:
│ │ @ StatementsNode (location: (241...295))
│ │ └── body: (length: 1)
│ │ └── @ CallNode (location: (241...295))
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── message_loc: (241...245) = "each"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ ├── block:
│ │ │ @ BlockNode (location: (246...295))
│ │ │ ├── locals: [:baz, :foo]
│ │ │ ├── parameters:
│ │ │ │ @ BlockParametersNode (location: (248...253))
│ │ │ │ ├── parameters:
│ │ │ │ │ @ ParametersNode (location: (249...252))
│ │ │ │ │ ├── requireds: (length: 1)
│ │ │ │ │ │ └── @ RequiredParameterNode (location: (249...252))
│ │ │ │ │ │ └── name: :baz
│ │ │ │ │ ├── optionals: (length: 0)
│ │ │ │ │ ├── rest: ∅
│ │ │ │ │ ├── posts: (length: 0)
│ │ │ │ │ ├── keywords: (length: 0)
│ │ │ │ │ ├── keyword_rest: ∅
│ │ │ │ │ └── block: ∅
│ │ │ │ ├── locals: (length: 0)
│ │ │ │ ├── opening_loc: (248...249) = "|"
│ │ │ │ └── closing_loc: (252...253) = "|"
│ │ │ ├── body:
│ │ │ │ @ StatementsNode (location: (258...291))
│ │ │ │ └── body: (length: 1)
│ │ │ │ └── @ WhileNode (location: (258...291))
│ │ │ │ ├── keyword_loc: (258...263) = "while"
│ │ │ │ ├── closing_loc: (288...291) = "end"
│ │ │ │ ├── predicate:
│ │ │ │ │ @ CallNode (location: (264...267))
│ │ │ │ │ ├── receiver: ∅
│ │ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ │ ├── message_loc: (264...267) = "foo"
│ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── arguments: ∅
│ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ ├── block: ∅
│ │ │ │ │ ├── flags: variable_call
│ │ │ │ │ └── name: "foo"
│ │ │ │ ├── statements:
│ │ │ │ │ @ StatementsNode (location: (274...283))
│ │ │ │ │ └── body: (length: 1)
│ │ │ │ │ └── @ LocalVariableWriteNode (location: (274...283))
│ │ │ │ │ ├── name: :foo
│ │ │ │ │ ├── depth: 0
│ │ │ │ │ ├── name_loc: (274...277) = "foo"
│ │ │ │ │ ├── value:
│ │ │ │ │ │ @ CallNode (location: (280...283))
│ │ │ │ │ │ ├── receiver: ∅
│ │ │ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ │ │ ├── message_loc: (280...283) = "bar"
│ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ │ ├── arguments: ∅
│ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ │ ├── block: ∅
│ │ │ │ │ │ ├── flags: variable_call
│ │ │ │ │ │ └── name: "bar"
│ │ │ │ │ └── operator_loc: (278...279) = "="
│ │ │ │ └── flags:
│ │ │ ├── opening_loc: (246...247) = "{"
│ │ │ └── closing_loc: (294...295) = "}"
│ │ ├── flags:
│ │ └── name: "each"
│ ├── end_keyword_loc: (296...299) = "end"
│ └── name: :A
├── @ ModuleNode (location: (301...370))
│ ├── locals: []
│ ├── module_keyword_loc: (301...307) = "module"
│ ├── constant_path:
│ │ @ ConstantReadNode (location: (308...309))
│ │ └── name: :A
│ ├── body:
│ │ @ StatementsNode (location: (312...366))
│ │ └── body: (length: 1)
│ │ └── @ CallNode (location: (312...366))
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── message_loc: (312...316) = "each"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ ├── block:
│ │ │ @ BlockNode (location: (317...366))
│ │ │ ├── locals: [:foo]
│ │ │ ├── parameters:
│ │ │ │ @ BlockParametersNode (location: (319...324))
│ │ │ │ ├── parameters:
│ │ │ │ │ @ ParametersNode (location: (320...323))
│ │ │ │ │ ├── requireds: (length: 1)
│ │ │ │ │ │ └── @ RequiredParameterNode (location: (320...323))
│ │ │ │ │ │ └── name: :foo
│ │ │ │ │ ├── optionals: (length: 0)
│ │ │ │ │ ├── rest: ∅
│ │ │ │ │ ├── posts: (length: 0)
│ │ │ │ │ ├── keywords: (length: 0)
│ │ │ │ │ ├── keyword_rest: ∅
│ │ │ │ │ └── block: ∅
│ │ │ │ ├── locals: (length: 0)
│ │ │ │ ├── opening_loc: (319...320) = "|"
│ │ │ │ └── closing_loc: (323...324) = "|"
│ │ │ ├── body:
│ │ │ │ @ StatementsNode (location: (329...362))
│ │ │ │ └── body: (length: 1)
│ │ │ │ └── @ WhileNode (location: (329...362))
│ │ │ │ ├── keyword_loc: (329...334) = "while"
│ │ │ │ ├── closing_loc: (359...362) = "end"
│ │ │ │ ├── predicate:
│ │ │ │ │ @ LocalVariableReadNode (location: (335...338))
│ │ │ │ │ ├── name: :foo
│ │ │ │ │ └── depth: 0
│ │ │ │ ├── statements:
│ │ │ │ │ @ StatementsNode (location: (345...354))
│ │ │ │ │ └── body: (length: 1)
│ │ │ │ │ └── @ LocalVariableWriteNode (location: (345...354))
│ │ │ │ │ ├── name: :foo
│ │ │ │ │ ├── depth: 0
│ │ │ │ │ ├── name_loc: (345...348) = "foo"
│ │ │ │ │ ├── value:
│ │ │ │ │ │ @ CallNode (location: (351...354))
│ │ │ │ │ │ ├── receiver: ∅
│ │ │ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ │ │ ├── message_loc: (351...354) = "bar"
│ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ │ ├── arguments: ∅
│ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ │ ├── block: ∅
│ │ │ │ │ │ ├── flags: variable_call
│ │ │ │ │ │ └── name: "bar"
│ │ │ │ │ └── operator_loc: (349...350) = "="
│ │ │ │ └── flags:
│ │ │ ├── opening_loc: (317...318) = "{"
│ │ │ └── closing_loc: (365...366) = "}"
│ │ ├── flags:
│ │ └── name: "each"
│ ├── end_keyword_loc: (367...370) = "end"
│ └── name: :A
├── @ LocalVariableWriteNode (location: (371...402))
│ ├── name: :x
│ ├── depth: 0
│ ├── name_loc: (371...372) = "x"
│ ├── value:
│ │ @ ParenthesesNode (location: (375...402))
│ │ ├── body:
│ │ │ @ StatementsNode (location: (376...401))
│ │ │ └── body: (length: 1)
│ │ │ └── @ WhileNode (location: (376...401))
│ │ │ ├── keyword_loc: (392...397) = "while"
│ │ │ ├── closing_loc: ∅
│ │ │ ├── predicate:
│ │ │ │ @ CallNode (location: (398...401))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (398...401) = "baz"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "baz"
│ │ │ ├── statements:
│ │ │ │ @ StatementsNode (location: (376...391))
│ │ │ │ └── body: (length: 1)
│ │ │ │ └── @ BeginNode (location: (376...391))
│ │ │ │ ├── begin_keyword_loc: (376...381) = "begin"
│ │ │ │ ├── statements:
│ │ │ │ │ @ StatementsNode (location: (384...387))
│ │ │ │ │ └── body: (length: 1)
│ │ │ │ │ └── @ CallNode (location: (384...387))
│ │ │ │ │ ├── receiver: ∅
│ │ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ │ ├── message_loc: (384...387) = "foo"
│ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── arguments: ∅
│ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ ├── block: ∅
│ │ │ │ │ ├── flags: variable_call
│ │ │ │ │ └── name: "foo"
│ │ │ │ ├── rescue_clause: ∅
│ │ │ │ ├── else_clause: ∅
│ │ │ │ ├── ensure_clause: ∅
│ │ │ │ └── end_keyword_loc: (388...391) = "end"
│ │ │ └── flags: begin_modifier
│ │ ├── opening_loc: (375...376) = "("
│ │ └── closing_loc: (401...402) = ")"
│ └── operator_loc: (373...374) = "="
├── @ WhileNode (location: (403...428))
│ ├── keyword_loc: (419...424) = "while"
│ ├── closing_loc: ∅
│ ├── predicate:
│ │ @ CallNode (location: (425...428))
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── message_loc: (425...428) = "baz"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ ├── block: ∅
│ │ ├── flags: variable_call
│ │ └── name: "baz"
│ ├── statements:
│ │ @ StatementsNode (location: (403...418))
│ │ └── body: (length: 1)
│ │ └── @ BeginNode (location: (403...418))
│ │ ├── begin_keyword_loc: (403...408) = "begin"
│ │ ├── statements:
│ │ │ @ StatementsNode (location: (411...414))
│ │ │ └── body: (length: 1)
│ │ │ └── @ CallNode (location: (411...414))
│ │ │ ├── receiver: ∅
│ │ │ ├── call_operator_loc: ∅
│ │ │ ├── message_loc: (411...414) = "foo"
│ │ │ ├── opening_loc: ∅
│ │ │ ├── arguments: ∅
│ │ │ ├── closing_loc: ∅
│ │ │ ├── block: ∅
│ │ │ ├── flags: variable_call
│ │ │ └── name: "foo"
│ │ ├── rescue_clause: ∅
│ │ ├── else_clause: ∅
│ │ ├── ensure_clause: ∅
│ │ └── end_keyword_loc: (415...418) = "end"
│ └── flags: begin_modifier
├── @ UntilNode (location: (429...460))
│ ├── keyword_loc: (451...456) = "until"
│ ├── closing_loc: ∅
│ ├── predicate:
│ │ @ CallNode (location: (457...460))
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── message_loc: (457...460) = "baz"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ ├── block: ∅
│ │ ├── flags: variable_call
│ │ └── name: "baz"
│ ├── statements:
│ │ @ StatementsNode (location: (429...450))
│ │ └── body: (length: 1)
│ │ └── @ BeginNode (location: (429...450))
│ │ ├── begin_keyword_loc: (429...434) = "begin"
│ │ ├── statements:
│ │ │ @ StatementsNode (location: (437...446))
│ │ │ └── body: (length: 2)
│ │ │ ├── @ CallNode (location: (437...440))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (437...440) = "foo"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "foo"
│ │ │ └── @ CallNode (location: (443...446))
│ │ │ ├── receiver: ∅
│ │ │ ├── call_operator_loc: ∅
│ │ │ ├── message_loc: (443...446) = "bar"
│ │ │ ├── opening_loc: ∅
│ │ │ ├── arguments: ∅
│ │ │ ├── closing_loc: ∅
│ │ │ ├── block: ∅
│ │ │ ├── flags: variable_call
│ │ │ └── name: "bar"
│ │ ├── rescue_clause: ∅
│ │ ├── else_clause: ∅
│ │ ├── ensure_clause: ∅
│ │ └── end_keyword_loc: (447...450) = "end"
│ └── flags: begin_modifier
├── @ WhileNode (location: (461...492))
│ ├── keyword_loc: (483...488) = "while"
│ ├── closing_loc: ∅
│ ├── predicate:
│ │ @ CallNode (location: (489...492))
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── message_loc: (489...492) = "baz"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ ├── block: ∅
│ │ ├── flags: variable_call
│ │ └── name: "baz"
│ ├── statements:
│ │ @ StatementsNode (location: (461...482))
│ │ └── body: (length: 1)
│ │ └── @ BeginNode (location: (461...482))
│ │ ├── begin_keyword_loc: (461...466) = "begin"
│ │ ├── statements:
│ │ │ @ StatementsNode (location: (469...478))
│ │ │ └── body: (length: 2)
│ │ │ ├── @ CallNode (location: (469...472))
│ │ │ │ ├── receiver: ∅
│ │ │ │ ├── call_operator_loc: ∅
│ │ │ │ ├── message_loc: (469...472) = "foo"
│ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── arguments: ∅
│ │ │ │ ├── closing_loc: ∅
│ │ │ │ ├── block: ∅
│ │ │ │ ├── flags: variable_call
│ │ │ │ └── name: "foo"
│ │ │ └── @ CallNode (location: (475...478))
│ │ │ ├── receiver: ∅
│ │ │ ├── call_operator_loc: ∅
│ │ │ ├── message_loc: (475...478) = "bar"
│ │ │ ├── opening_loc: ∅
│ │ │ ├── arguments: ∅
│ │ │ ├── closing_loc: ∅
│ │ │ ├── block: ∅
│ │ │ ├── flags: variable_call
│ │ │ └── name: "bar"
│ │ ├── rescue_clause: ∅
│ │ ├── else_clause: ∅
│ │ ├── ensure_clause: ∅
│ │ └── end_keyword_loc: (479...482) = "end"
│ └── flags: begin_modifier
├── @ WhileNode (location: (493...508))
│ ├── keyword_loc: (493...498) = "while"
│ ├── closing_loc: (505...508) = "end"
│ ├── predicate:
│ │ @ FalseNode (location: (499...504))
│ ├── statements: ∅
│ └── flags:
├── @ WhileNode (location: (509...528))
│ ├── keyword_loc: (509...514) = "while"
│ ├── closing_loc: (525...528) = "end"
│ ├── predicate:
│ │ @ FalseNode (location: (515...520))
│ ├── statements:
│ │ @ StatementsNode (location: (523...524))
│ │ └── body: (length: 1)
│ │ └── @ IntegerNode (location: (523...524))
│ │ └── flags: decimal
│ └── flags:
├── @ WhileNode (location: (529...556))
│ ├── keyword_loc: (529...534) = "while"
│ ├── closing_loc: (553...556) = "end"
│ ├── predicate:
│ │ @ ParenthesesNode (location: (535...544))
│ │ ├── body:
│ │ │ @ StatementsNode (location: (536...543))
│ │ │ └── body: (length: 1)
│ │ │ └── @ CallNode (location: (536...543))
│ │ │ ├── receiver: ∅
│ │ │ ├── call_operator_loc: ∅
│ │ │ ├── message_loc: (536...539) = "foo"
│ │ │ ├── opening_loc: ∅
│ │ │ ├── arguments: ∅
│ │ │ ├── closing_loc: ∅
│ │ │ ├── block:
│ │ │ │ @ BlockNode (location: (540...543))
│ │ │ │ ├── locals: []
│ │ │ │ ├── parameters: ∅
│ │ │ │ ├── body: ∅
│ │ │ │ ├── opening_loc: (540...541) = "{"
│ │ │ │ └── closing_loc: (542...543) = "}"
│ │ │ ├── flags:
│ │ │ └── name: "foo"
│ │ ├── opening_loc: (535...536) = "("
│ │ └── closing_loc: (543...544) = ")"
│ ├── statements:
│ │ @ StatementsNode (location: (547...552))
│ │ └── body: (length: 1)
│ │ └── @ SymbolNode (location: (547...552))
│ │ ├── opening_loc: (547...548) = ":"
│ │ ├── value_loc: (548...552) = "body"
│ │ ├── closing_loc: ∅
│ │ └── unescaped: "body"
│ └── flags:
├── @ UntilNode (location: (557...572))
│ ├── keyword_loc: (557...562) = "until"
│ ├── closing_loc: (569...572) = "end"
│ ├── predicate:
│ │ @ FalseNode (location: (563...568))
│ ├── statements: ∅
│ └── flags:
├── @ UntilNode (location: (573...592))
│ ├── keyword_loc: (573...578) = "until"
│ ├── closing_loc: (589...592) = "end"
│ ├── predicate:
│ │ @ FalseNode (location: (579...584))
│ ├── statements:
│ │ @ StatementsNode (location: (587...588))
│ │ └── body: (length: 1)
│ │ └── @ IntegerNode (location: (587...588))
│ │ └── flags: decimal
│ └── flags:
└── @ UntilNode (location: (593...620))
├── keyword_loc: (593...598) = "until"
├── closing_loc: (617...620) = "end"
├── predicate:
│ @ ParenthesesNode (location: (599...608))
│ ├── body:
│ │ @ StatementsNode (location: (600...607))
│ │ └── body: (length: 1)
│ │ └── @ CallNode (location: (600...607))
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── message_loc: (600...603) = "foo"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ ├── block:
│ │ │ @ BlockNode (location: (604...607))
│ │ │ ├── locals: []
│ │ │ ├── parameters: ∅
│ │ │ ├── body: ∅
│ │ │ ├── opening_loc: (604...605) = "{"
│ │ │ └── closing_loc: (606...607) = "}"
│ │ ├── flags:
│ │ └── name: "foo"
│ ├── opening_loc: (599...600) = "("
│ └── closing_loc: (607...608) = ")"
├── statements:
│ @ StatementsNode (location: (611...616))
│ └── body: (length: 1)
│ └── @ SymbolNode (location: (611...616))
│ ├── opening_loc: (611...612) = ":"
│ ├── value_loc: (612...616) = "body"
│ ├── closing_loc: ∅
│ └── unescaped: "body"
└── flags:
|