parser 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16e6e6480aa89b565b60ceca67280519331836c0
4
- data.tar.gz: 023823bcfbdf9f66858ed4de49d738cd94587891
3
+ metadata.gz: 23913ce91aee27e303077bef4f422f30ac9bc50c
4
+ data.tar.gz: 2fb3c11a836c677360f7b17a9590e3a41c30abdc
5
5
  SHA512:
6
- metadata.gz: 999557fa55073dbd6077d224409d740b6ec68b9f0198906db4e5bd20276adfb3eab75aa9e2823369f5db8bcf474c7e37d709354c9bf8ffdd1200ffe7ddcdaa45
7
- data.tar.gz: af1727c35cd4bdb1aea2735c9613c517ad363e9f3511a78d5287802b80fcfdbcf81bf6ce875d61e5f4e0fe8ff793adfde7692e882ac877519f51c7c53a177bf1
6
+ metadata.gz: 99b845aa3300fa99c75a726c41d81b33fc1019b6dc937d6eba139602c0c7f75b216344482f6ac57f288e1f1abb804a0ffdf315fc352f3d66ef680622cc7b8566
7
+ data.tar.gz: 72ce1310df9f19d5c16f7e4f61287ce187c250898cf15b70c4150e1315f7b57a78189feb48fc71448e9a16966cb44d0abb9d65cd95cba173c8297252a74e76fa
data/.gitignore CHANGED
@@ -10,6 +10,7 @@ coverage
10
10
  lib/bundler/man
11
11
  pkg
12
12
  rdoc
13
+ yardoc
13
14
  spec/reports
14
15
  test/tmp
15
16
  test/version_tmp
@@ -20,3 +21,4 @@ lib/parser/ruby18.rb
20
21
  lib/parser/ruby19.rb
21
22
  lib/parser/ruby20.rb
22
23
  lib/parser/ruby21.rb
24
+
@@ -0,0 +1 @@
1
+ -Xcext.enabled=true
@@ -0,0 +1,4 @@
1
+ --markup-provider redcarpet
2
+ --markup markdown
3
+ -o yardoc/
4
+ - doc/*
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in parser.gemspec
4
4
  gemspec
5
+
6
+ gem 'redcarpet', '~> 1.0', :platform => :mri
data/README.md CHANGED
@@ -13,6 +13,7 @@ _Parser_ is a Ruby parser written in pure Ruby.
13
13
  ## Usage
14
14
 
15
15
  Parse a chunk of code:
16
+
16
17
  ``` ruby
17
18
  require 'parser/ruby20'
18
19
 
@@ -23,7 +24,8 @@ p Parser::Ruby20.parse("2 + 2")
23
24
  ```
24
25
 
25
26
  Parse a chunk of code and display all diagnostics:
26
- ``` ruby
27
+
28
+ ```ruby
27
29
  parser = Parser::Ruby20.new
28
30
  parser.diagnostics.consumer = lambda do |diag|
29
31
  puts diag.render
@@ -1,7 +1,7 @@
1
1
  AST and Source Location RFC
2
2
  ===========================
3
3
 
4
- # Open questions:
4
+ ## Open questions:
5
5
 
6
6
  * Should we handle these cases at all? They do not have special syntax associated.
7
7
  1. How to handle lvar-injecting match (`if /(?<a>foo)/ =~ bar`)?
@@ -14,6 +14,7 @@ AST and Source Location RFC
14
14
  ### Singletons
15
15
 
16
16
  Format:
17
+
17
18
  ```
18
19
  (true)
19
20
  "true"
@@ -31,6 +32,7 @@ Format:
31
32
  ### Integer
32
33
 
33
34
  Format:
35
+
34
36
  ```
35
37
  (int 123)
36
38
  "123"
@@ -40,6 +42,7 @@ Format:
40
42
  ### Float
41
43
 
42
44
  Format:
45
+
43
46
  ```
44
47
  (float 1.0)
45
48
  "1.0"
@@ -51,6 +54,7 @@ Format:
51
54
  #### Plain
52
55
 
53
56
  Format:
57
+
54
58
  ```
55
59
  (str "foo")
56
60
  "'foo'"
@@ -62,6 +66,7 @@ Format:
62
66
  #### With interpolation
63
67
 
64
68
  Format:
69
+
65
70
  ```
66
71
  (dstr (str "foo") (lvar bar) (str "baz"))
67
72
  '"foo#{bar}baz"'
@@ -74,6 +79,7 @@ Format:
74
79
  #### Plain
75
80
 
76
81
  Format:
82
+
77
83
  ```
78
84
  (sym :foo)
79
85
  ":foo"
@@ -88,6 +94,7 @@ Format:
88
94
  #### With interpolation
89
95
 
90
96
  Format:
97
+
91
98
  ```
92
99
  (dsym (str "foo") (lvar bar) (str "baz"))
93
100
  ':"foo#{bar}baz"'
@@ -98,6 +105,7 @@ Format:
98
105
  ### Execute-string
99
106
 
100
107
  Format:
108
+
101
109
  ```
102
110
  (xstr (str "foo") (lvar bar))
103
111
  "`foo#{bar}`"
@@ -110,6 +118,7 @@ Format:
110
118
  #### Options
111
119
 
112
120
  Format:
121
+
113
122
  ```
114
123
  (regopt :i :m)
115
124
  "im"
@@ -119,6 +128,7 @@ Format:
119
128
  #### Regexp
120
129
 
121
130
  Format:
131
+
122
132
  ```
123
133
  (regexp (str "foo") (lvar :bar) (regopt :i))
124
134
  "/foo#{bar}/i"
@@ -131,6 +141,7 @@ Format:
131
141
  #### Plain
132
142
 
133
143
  Format:
144
+
134
145
  ```
135
146
  (array (int 1) (int 2))
136
147
 
@@ -143,6 +154,7 @@ Format:
143
154
  Can also be used in argument lists: `foo(bar, *baz)`
144
155
 
145
156
  Format:
157
+
146
158
  ```
147
159
  (splat (lvar :foo))
148
160
  "*foo"
@@ -153,6 +165,7 @@ Format:
153
165
  #### With interpolation
154
166
 
155
167
  Format:
168
+
156
169
  ```
157
170
  (array (int 1) (splat (lvar :foo)) (int 2))
158
171
 
@@ -168,6 +181,7 @@ Format:
168
181
  ##### With hashrocket
169
182
 
170
183
  Format:
184
+
171
185
  ```
172
186
  (pair (int 1) (int 2))
173
187
  "1 => 2"
@@ -178,6 +192,7 @@ Format:
178
192
  ##### With label (1.9)
179
193
 
180
194
  Format:
195
+
181
196
  ```
182
197
  (pair (sym :answer) (int 42))
183
198
  "answer: 42"
@@ -189,6 +204,7 @@ Format:
189
204
  #### Plain
190
205
 
191
206
  Format:
207
+
192
208
  ```
193
209
  (hash (pair (int 1) (int 2)) (pair (int 3) (int 4)))
194
210
  "{1 => 2, 3 => 4}"
@@ -201,6 +217,7 @@ Format:
201
217
  Can also be used in argument lists: `foo(bar, **baz)`
202
218
 
203
219
  Format:
220
+
204
221
  ```
205
222
  (kwsplat (lvar :foo))
206
223
  "**foo"
@@ -211,6 +228,7 @@ Format:
211
228
  #### With interpolation (2.0)
212
229
 
213
230
  Format:
231
+
214
232
  ```
215
233
  (hash (pair (sym :foo) (int 2)) (kwsplat (lvar :bar)))
216
234
  "{ foo: 2, **bar }"
@@ -223,6 +241,7 @@ Format:
223
241
  #### Inclusive
224
242
 
225
243
  Format:
244
+
226
245
  ```
227
246
  (irange (int 1) (int 2))
228
247
  "1..2"
@@ -233,6 +252,7 @@ Format:
233
252
  #### Exclusive
234
253
 
235
254
  Format:
255
+
236
256
  ```
237
257
  (erange (int 1) (int 2))
238
258
  "1...2"
@@ -245,6 +265,7 @@ Format:
245
265
  ### Self
246
266
 
247
267
  Format:
268
+
248
269
  ```
249
270
  (self)
250
271
  "self"
@@ -254,6 +275,7 @@ Format:
254
275
  ### Local variable
255
276
 
256
277
  Format:
278
+
257
279
  ```
258
280
  (lvar :foo)
259
281
  "foo"
@@ -263,6 +285,7 @@ Format:
263
285
  ### Instance variable
264
286
 
265
287
  Format:
288
+
266
289
  ```
267
290
  (ivar :@foo)
268
291
  "@foo"
@@ -272,6 +295,7 @@ Format:
272
295
  ### Class variable
273
296
 
274
297
  Format:
298
+
275
299
  ```
276
300
  (cvar :$foo)
277
301
  "$foo"
@@ -281,6 +305,7 @@ Format:
281
305
  ### Global variable
282
306
 
283
307
  Format:
308
+
284
309
  ```
285
310
  (gvar :$foo)
286
311
  "$foo"
@@ -292,6 +317,7 @@ Format:
292
317
  #### Top-level constant
293
318
 
294
319
  Format:
320
+
295
321
  ```
296
322
  (const (cbase) :Foo)
297
323
  "::Foo"
@@ -303,6 +329,7 @@ Format:
303
329
  #### Scoped constant
304
330
 
305
331
  Format:
332
+
306
333
  ```
307
334
  (const (lvar :a) :Foo)
308
335
  "a::Foo"
@@ -314,6 +341,7 @@ Format:
314
341
  #### Unscoped constant
315
342
 
316
343
  Format:
344
+
317
345
  ```
318
346
  (const nil :Foo)
319
347
  "Foo"
@@ -324,6 +352,7 @@ Format:
324
352
  ### defined?
325
353
 
326
354
  Format:
355
+
327
356
  ```
328
357
  (defined? (lvar :a))
329
358
  "defined? a"
@@ -342,6 +371,7 @@ Format:
342
371
  ### To local variable
343
372
 
344
373
  Format:
374
+
345
375
  ```
346
376
  (lvasgn :foo (lvar :bar))
347
377
  "foo = bar"
@@ -352,6 +382,7 @@ Format:
352
382
  ### To instance variable
353
383
 
354
384
  Format:
385
+
355
386
  ```
356
387
  (ivasgn :@foo (lvar :bar))
357
388
  "@foo = bar"
@@ -364,6 +395,7 @@ Format:
364
395
  #### Inside a class scope
365
396
 
366
397
  Format:
398
+
367
399
  ```
368
400
  (cvdecl :@@foo (lvar :bar))
369
401
  "@@foo = bar"
@@ -374,6 +406,7 @@ Format:
374
406
  #### Inside a method scope
375
407
 
376
408
  Format:
409
+
377
410
  ```
378
411
  (cvasgn :@@foo (lvar :bar))
379
412
  "@@foo = bar"
@@ -384,6 +417,7 @@ Format:
384
417
  ### To global variable
385
418
 
386
419
  Format:
420
+
387
421
  ```
388
422
  (gvasgn :$foo (lvar :bar))
389
423
  "$foo = bar"
@@ -396,6 +430,7 @@ Format:
396
430
  #### Top-level constant
397
431
 
398
432
  Format:
433
+
399
434
  ```
400
435
  (cdecl (cbase) :Foo (int 1))
401
436
  "::Foo = 1"
@@ -407,6 +442,7 @@ Format:
407
442
  #### Scoped constant
408
443
 
409
444
  Format:
445
+
410
446
  ```
411
447
  (cdecl (lvar :a) :Foo (int 1))
412
448
  "a::Foo = 1"
@@ -418,6 +454,7 @@ Format:
418
454
  #### Unscoped constant
419
455
 
420
456
  Format:
457
+
421
458
  ```
422
459
  (cdecl nil :Foo (int 1))
423
460
  "Foo = 1"
@@ -432,6 +469,7 @@ Format:
432
469
  #### Multiple left hand side
433
470
 
434
471
  Format:
472
+
435
473
  ```
436
474
  (mlhs (lvasgn :a) (lvasgn :b))
437
475
  "a, b"
@@ -451,6 +489,7 @@ side-effect free assignments (`lvasgn`, etc) and side-effectful
451
489
  assignments (`send`).
452
490
 
453
491
  Format:
492
+
454
493
  ```
455
494
  (masgn (mlhs (lvasgn :foo) (lvasgn :bar)) (array (int 1) (int 2)))
456
495
  "foo, bar = 1, 2"
@@ -474,6 +513,7 @@ Binary operator-assignment features the same "incomplete assignments" and "incom
474
513
  #### Variable binary operator-assignment
475
514
 
476
515
  Format:
516
+
477
517
  ```
478
518
  (op-asgn (lvasgn :a) :+ (int 1))
479
519
  "a += 1"
@@ -496,6 +536,7 @@ s(:iasgn, :@a, s(:call, s(:ivar, :@a), :+, s(:int, 1)))
496
536
  #### Method binary operator-assignment
497
537
 
498
538
  Format:
539
+
499
540
  ```
500
541
  (op-asgn (send (ivar :@a) :b) :+ (int 1))
501
542
  "@a.b += 1"
@@ -528,6 +569,7 @@ Logical operator-assignment features the same "incomplete assignments" and "inco
528
569
  #### Variable logical operator-assignment
529
570
 
530
571
  Format:
572
+
531
573
  ```
532
574
  (or-asgn (iasgn :@a) (int 1))
533
575
  "@a ||= 1"
@@ -552,6 +594,7 @@ s(:op_asgn_and, s(:lvar, :a), s(:lasgn, :a, s(:int, 1)))
552
594
  #### Method logical operator-assignment
553
595
 
554
596
  Format:
597
+
555
598
  ```
556
599
  (or-asgn (send (ivar :@foo) :bar) (int 1))
557
600
  "@foo.bar ||= 1"
@@ -591,6 +634,7 @@ s(:op_asgn1, s(:ivar, :@foo), s(:arglist, s(:int, 0)), :"||", s(:int, 1))
591
634
  ### Module
592
635
 
593
636
  Format:
637
+
594
638
  ```
595
639
  (module (const nil :Foo) (nil))
596
640
  "module Foo; end"
@@ -601,6 +645,7 @@ Format:
601
645
  ### Class
602
646
 
603
647
  Format:
648
+
604
649
  ```
605
650
  (class (const nil :Foo) (const nil :Bar) (nil))
606
651
  "class Foo < Bar; end"
@@ -618,6 +663,7 @@ Format:
618
663
  ### Singleton class
619
664
 
620
665
  Format:
666
+
621
667
  ```
622
668
  (sclass (lvar :a) (nil))
623
669
  "class << a; end"
@@ -632,6 +678,7 @@ Format:
632
678
  ### Instance methods
633
679
 
634
680
  Format:
681
+
635
682
  ```
636
683
  (def :foo (args) nil)
637
684
  "def foo; end"
@@ -644,6 +691,7 @@ Format:
644
691
  ### Singleton methods
645
692
 
646
693
  Format:
694
+
647
695
  ```
648
696
  (defs (self) (args) nil)
649
697
  "def self.foo; end"
@@ -656,6 +704,7 @@ Format:
656
704
  ### Undefinition
657
705
 
658
706
  Format:
707
+
659
708
  ```
660
709
  (undef (sym :foo) (sym :bar) (dsym (str "foo") (int 1)))
661
710
  "undef foo :bar :"foo#{1}""
@@ -668,6 +717,7 @@ Format:
668
717
  ### Method aliasing
669
718
 
670
719
  Format:
720
+
671
721
  ```
672
722
  (alias (sym :foo) (dsym (str "foo") (int 1)))
673
723
  "alias foo :"foo#{1}""
@@ -678,6 +728,7 @@ Format:
678
728
  ### Global variable aliasing
679
729
 
680
730
  Format:
731
+
681
732
  ```
682
733
  (alias (gvar :$foo) (gvar :$bar))
683
734
  "alias $foo $bar"
@@ -693,6 +744,7 @@ Format:
693
744
  ## Formal arguments
694
745
 
695
746
  Format:
747
+
696
748
  ```
697
749
  (args (arg :foo))
698
750
  "(foo)"
@@ -702,6 +754,7 @@ Format:
702
754
  ### Required argument
703
755
 
704
756
  Format:
757
+
705
758
  ```
706
759
  (arg :foo)
707
760
  "foo"
@@ -712,6 +765,7 @@ Format:
712
765
  ### Optional argument
713
766
 
714
767
  Format:
768
+
715
769
  ```
716
770
  (optarg :foo (int 1))
717
771
  "foo = 1"
@@ -723,6 +777,7 @@ Format:
723
777
  ### Named splat argument
724
778
 
725
779
  Format:
780
+
726
781
  ```
727
782
  (restarg :foo)
728
783
  "*foo"
@@ -735,6 +790,7 @@ Begin of the `expression` points to `*`.
735
790
  ### Unnamed splat argument
736
791
 
737
792
  Format:
793
+
738
794
  ```
739
795
  (restarg)
740
796
  "*"
@@ -744,6 +800,7 @@ Format:
744
800
  ### Block argument
745
801
 
746
802
  Format:
803
+
747
804
  ```
748
805
  (blockarg :foo)
749
806
  "&foo"
@@ -760,6 +817,7 @@ such as `@var` or `foo.bar`. Such expressions should be treated as
760
817
  if they were on the lhs of a multiple assignment.
761
818
 
762
819
  Format:
820
+
763
821
  ```
764
822
  (args (arg_expr (ivasgn :@bar)))
765
823
  "|@bar|"
@@ -777,6 +835,7 @@ Format:
777
835
  ### Block shadow arguments
778
836
 
779
837
  Format:
838
+
780
839
  ```
781
840
  (args (shadowarg :foo) (shadowarg :bar))
782
841
  "|; foo, bar|"
@@ -785,6 +844,7 @@ Format:
785
844
  ### Decomposition
786
845
 
787
846
  Format:
847
+
788
848
  ```
789
849
  (def :f (args (arg :a) (mlhs (arg :foo) (restarg :bar))))
790
850
  "def f(a, (foo, *bar)); end"
@@ -795,6 +855,7 @@ Format:
795
855
  ### Required keyword argument
796
856
 
797
857
  Format:
858
+
798
859
  ```
799
860
  (kwarg :foo (int 1))
800
861
  "foo:"
@@ -805,6 +866,7 @@ Format:
805
866
  ### Optional keyword argument
806
867
 
807
868
  Format:
869
+
808
870
  ```
809
871
  (kwoptarg :foo (int 1))
810
872
  "foo: 1"
@@ -815,6 +877,7 @@ Format:
815
877
  ### Named keyword splat argument
816
878
 
817
879
  Format:
880
+
818
881
  ```
819
882
  (kwrestarg :foo)
820
883
  "**foo"
@@ -825,6 +888,7 @@ Format:
825
888
  ### Unnamed keyword splat argument
826
889
 
827
890
  Format:
891
+
828
892
  ```
829
893
  (kwrestarg)
830
894
  "**"
@@ -836,6 +900,7 @@ Format:
836
900
  ### To self
837
901
 
838
902
  Format:
903
+
839
904
  ```
840
905
  (send nil :foo (lvar :bar))
841
906
  "foo(bar)"
@@ -848,6 +913,7 @@ Format:
848
913
  ### To receiver
849
914
 
850
915
  Format:
916
+
851
917
  ```
852
918
  (send (lvar :foo) :bar (int 1))
853
919
  "foo.bar(1)"
@@ -913,6 +979,7 @@ Format of super without arguments (**z**ero-arity):
913
979
  ### To block argument
914
980
 
915
981
  Format:
982
+
916
983
  ```
917
984
  (yield (lvar :foo))
918
985
  "yield(foo)"
@@ -950,6 +1017,7 @@ Used when passing expression as block `foo(&bar)`
950
1017
  #### Binary (and or && ||)
951
1018
 
952
1019
  Format:
1020
+
953
1021
  ```
954
1022
  (and (lvar :foo) (lvar :bar))
955
1023
  "foo and bar"
@@ -960,6 +1028,7 @@ Format:
960
1028
  #### Unary (! not) (1.8)
961
1029
 
962
1030
  Format:
1031
+
963
1032
  ```
964
1033
  (not (lvar :foo))
965
1034
  "!foo"
@@ -973,6 +1042,7 @@ Format:
973
1042
  #### Without else
974
1043
 
975
1044
  Format:
1045
+
976
1046
  ```
977
1047
  (if (lvar :cond) (lvar :iftrue) nil)
978
1048
  "if cond then iftrue; end"
@@ -1010,6 +1080,7 @@ Format:
1010
1080
  #### With else
1011
1081
 
1012
1082
  Format:
1083
+
1013
1084
  ```
1014
1085
  (if (lvar :cond) (lvar :iftrue) (lvar :iffalse))
1015
1086
  "if cond then iftrue; else; iffalse; end"
@@ -1043,6 +1114,7 @@ Format:
1043
1114
  #### With elsif
1044
1115
 
1045
1116
  Format:
1117
+
1046
1118
  ```
1047
1119
  (if (lvar :cond1) (int 1) (if (lvar :cond2 (int 2) (int 3))))
1048
1120
  "if cond1; 1; elsif cond2; 2; else 3; end"
@@ -1057,6 +1129,7 @@ Format:
1057
1129
  #### Ternary
1058
1130
 
1059
1131
  Format:
1132
+
1060
1133
  ```
1061
1134
  (if (lvar :cond) (lvar :iftrue) (lvar :iffalse))
1062
1135
  "cond ? iftrue : iffalse"
@@ -1070,6 +1143,7 @@ Format:
1070
1143
  #### When clause
1071
1144
 
1072
1145
  Format:
1146
+
1073
1147
  ```
1074
1148
  (when (regexp "foo" (regopt)) (begin (lvar :bar)))
1075
1149
  "when /foo/ then bar"
@@ -1092,6 +1166,7 @@ Format:
1092
1166
  ##### Without else
1093
1167
 
1094
1168
  Format:
1169
+
1095
1170
  ```
1096
1171
  (case (lvar :foo) (when (str "bar") (lvar :bar)) nil)
1097
1172
  "case foo; when "bar"; bar; end"
@@ -1101,6 +1176,7 @@ Format:
1101
1176
  ##### With else
1102
1177
 
1103
1178
  Format:
1179
+
1104
1180
  ```
1105
1181
  (case (lvar :foo) (when (str "bar") (lvar :bar)) (lvar :baz))
1106
1182
  "case foo; when "bar"; bar; else baz; end"
@@ -1112,6 +1188,7 @@ Format:
1112
1188
  ##### Without else
1113
1189
 
1114
1190
  Format:
1191
+
1115
1192
  ```
1116
1193
  (case nil (when (lvar :bar) (lvar :bar)) nil)
1117
1194
  "case; when bar; bar; end"
@@ -1121,6 +1198,7 @@ Format:
1121
1198
  ##### With else
1122
1199
 
1123
1200
  Format:
1201
+
1124
1202
  ```
1125
1203
  (case nil (when (lvar :bar) (lvar :bar)) (lvar :baz))
1126
1204
  "case; when bar; bar; else baz; end"
@@ -1138,6 +1216,7 @@ Format:
1138
1216
  #### With precondition
1139
1217
 
1140
1218
  Format:
1219
+
1141
1220
  ```
1142
1221
  (while (lvar :condition) (send nil :foo))
1143
1222
  "while condition do foo; end"
@@ -1176,6 +1255,7 @@ Format:
1176
1255
  #### With postcondition
1177
1256
 
1178
1257
  Format:
1258
+
1179
1259
  ```
1180
1260
  (while-post (lvar :condition) (begin (send nil :foo)))
1181
1261
  "begin; foo; end while condition"
@@ -1193,6 +1273,7 @@ Format:
1193
1273
  #### For-in
1194
1274
 
1195
1275
  Format:
1276
+
1196
1277
  ```
1197
1278
  (for (lasgn :a) (lvar :array) (send nil :p (lvar :a)))
1198
1279
  "for a in array do p a; end"
@@ -1215,6 +1296,7 @@ Format:
1215
1296
  #### Break
1216
1297
 
1217
1298
  Format:
1299
+
1218
1300
  ```
1219
1301
  (break (int 1))
1220
1302
  "break 1"
@@ -1225,6 +1307,7 @@ Format:
1225
1307
  #### Next
1226
1308
 
1227
1309
  Format:
1310
+
1228
1311
  ```
1229
1312
  (next (int 1))
1230
1313
  "next 1"
@@ -1235,6 +1318,7 @@ Format:
1235
1318
  #### Redo
1236
1319
 
1237
1320
  Format:
1321
+
1238
1322
  ```
1239
1323
  (redo)
1240
1324
  "redo"
@@ -1245,6 +1329,7 @@ Format:
1245
1329
  ### Return
1246
1330
 
1247
1331
  Format:
1332
+
1248
1333
  ```
1249
1334
  (return (lvar :foo))
1250
1335
  "return(foo)"
@@ -1257,6 +1342,7 @@ Format:
1257
1342
  #### Rescue body
1258
1343
 
1259
1344
  Format:
1345
+
1260
1346
  ```
1261
1347
  (resbody (array (const nil :Exception) (const nil :A)) (lvasgn :bar) (int 1))
1262
1348
  "rescue Exception, A => bar; 1"
@@ -1286,6 +1372,7 @@ Format:
1286
1372
  ##### Without else
1287
1373
 
1288
1374
  Format:
1375
+
1289
1376
  ```
1290
1377
  (begin
1291
1378
  (rescue (send nil :foo) (resbody ...) (resbody ...) nil))
@@ -1299,6 +1386,7 @@ Format:
1299
1386
  ##### With else
1300
1387
 
1301
1388
  Format:
1389
+
1302
1390
  ```
1303
1391
  (begin
1304
1392
  (rescue (send nil :foo) (resbody ...) (resbody ...) (true)))
@@ -1310,6 +1398,7 @@ Format:
1310
1398
  #### Ensure statement
1311
1399
 
1312
1400
  Format:
1401
+
1313
1402
  ```
1314
1403
  (begin
1315
1404
  (ensure (send nil :foo) (send nil :bar))
@@ -1321,6 +1410,7 @@ Format:
1321
1410
  #### Rescue with ensure
1322
1411
 
1323
1412
  Format:
1413
+
1324
1414
  ```
1325
1415
  (begin
1326
1416
  (ensure
@@ -1338,6 +1428,7 @@ Format:
1338
1428
  #### Retry
1339
1429
 
1340
1430
  Format:
1431
+
1341
1432
  ```
1342
1433
  (retry)
1343
1434
  "retry"
@@ -1348,6 +1439,7 @@ Format:
1348
1439
  ### BEGIN and END
1349
1440
 
1350
1441
  Format:
1442
+
1351
1443
  ```
1352
1444
  (preexe (send nil :puts (str "foo")))
1353
1445
  "BEGIN { puts "foo" }"