yarp 0.7.0 → 0.8.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 +4 -4
- data/CHANGELOG.md +21 -2
- data/Makefile +2 -0
- data/README.md +5 -2
- data/config.yml +54 -267
- data/ext/yarp/api_node.c +135 -579
- data/ext/yarp/extension.c +2 -2
- data/ext/yarp/extension.h +1 -1
- data/include/yarp/ast.h +142 -285
- data/include/yarp/defines.h +5 -0
- data/include/yarp/unescape.h +1 -1
- data/include/yarp/util/yp_buffer.h +9 -1
- data/include/yarp/util/yp_constant_pool.h +3 -0
- data/include/yarp/util/yp_list.h +7 -7
- data/include/yarp/util/yp_newline_list.h +4 -0
- data/include/yarp/util/yp_state_stack.h +1 -1
- data/include/yarp/version.h +2 -2
- data/lib/yarp/ffi.rb +62 -47
- data/lib/yarp/node.rb +504 -1399
- data/lib/yarp/serialize.rb +111 -141
- data/lib/yarp.rb +6 -6
- data/src/node.c +70 -250
- data/src/prettyprint.c +41 -185
- data/src/serialize.c +35 -133
- data/src/unescape.c +29 -35
- data/src/util/yp_buffer.c +18 -0
- data/src/util/yp_list.c +7 -16
- data/src/util/yp_state_stack.c +0 -6
- data/src/yarp.c +265 -670
- data/yarp.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef0d177f2be8f0d5ecd0ba54901e3cdf17fd6ec6f44a1b04160082ae5a1cb519
|
4
|
+
data.tar.gz: 776a4c7b981d4d6f3848bef030a448ea7d402f6ea75c20fcd87d3cbf935ecfe5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e462ba8f51d24c8164ca67804a372d1bea6f6706828801cb2404af02ee183c301e221fef21725d59e013a64652eab06eae84b3e10a427f58ee7e0eed35c3950
|
7
|
+
data.tar.gz: 9594d53c55fc434c92c0601db17c548f473ca62812a0ab57b229d5b9753315198742c83f57a44744b6572def60b4b9659cfa1f93e4d86d66fd6b2f73e0db5234
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,24 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.8.0] - 2023-08-18
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Some performance improvements when converting from the C AST to the Ruby AST.
|
14
|
+
- Two rust crates have been added: `yarp-sys` and `yarp`. They are as yet unpublished.
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
|
18
|
+
- Escaped newlines in strings and heredocs are now handled more correctly.
|
19
|
+
- Dedenting heredocs that result in empty string nodes will now drop those string nodes from the list.
|
20
|
+
- Beginless and endless ranges in conditional expressions now properly form a flip flop node.
|
21
|
+
- `%` at the end of files no longer crashes.
|
22
|
+
- Location information has been corrected for `if/elsif` chains that have no `else`.
|
23
|
+
- `__END__` at the very end of the file was previously parsed as an identifier, but is now correct.
|
24
|
+
- **BREAKING**: Nodes that reference `&&=`, `||=`, and other writing operators have been consolidated. Previously, they were separate individual nodes. Now they are a tree with the target being the left-hand side and the value being the right-hand side with a joining `AndWriteNode`, `OrWriteNode`, or `OperatorWriteNode` in the middle. This impacts all of the nodes that match this pattern: `{ClassVariable,Constant,ConstantPath,GlobalVariable,InstanceVariable,LocalVariable}Operator{And,Or,}WriteNode`.
|
25
|
+
- **BREAKING**: `BlockParametersNode`, `ClassNode`, `DefNode`, `LambdaNode`, `ModuleNode`, `ParenthesesNode`, and `SingletonClassNode` have had their `statements` field renamed to `body` to give a hint that it might not be a `StatementsNode` (it could also be a `BeginNode`).
|
26
|
+
|
9
27
|
## [0.7.0] - 2023-08-14
|
10
28
|
|
11
29
|
### Added
|
@@ -22,7 +40,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
22
40
|
|
23
41
|
- Autotools has been removed from the build system, so when the gem is installed it will no longer need to go through a configure step.
|
24
42
|
- The AST for `foo = *bar` has changed to have an explicit array on the right hand side, rather than a splat node. This is more consistent with how other parsers handle this.
|
25
|
-
- `RangeNodeFlags` has been renamed to `RangeFlags`.
|
43
|
+
- **BREAKING**: `RangeNodeFlags` has been renamed to `RangeFlags`.
|
26
44
|
- Unary minus on number literals is now parsed as part of the literal, rather than a call to a unary operator. This is more consistent with how other parsers handle this.
|
27
45
|
|
28
46
|
## [0.6.0] - 2023-08-09
|
@@ -31,6 +49,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
31
49
|
|
32
50
|
- 🎉 Initial release! 🎉
|
33
51
|
|
34
|
-
[unreleased]: https://github.com/ruby/yarp/compare/v0.
|
52
|
+
[unreleased]: https://github.com/ruby/yarp/compare/v0.8.0...HEAD
|
53
|
+
[0.8.0]: https://github.com/ruby/yarp/compare/v0.7.0...v0.8.0
|
35
54
|
[0.7.0]: https://github.com/ruby/yarp/compare/v0.6.0...v0.7.0
|
36
55
|
[0.6.0]: https://github.com/ruby/yarp/compare/d60531...v0.6.0
|
data/Makefile
CHANGED
@@ -61,6 +61,8 @@ fuzz-docker-build: fuzz/docker/Dockerfile
|
|
61
61
|
$(Q) docker build -t yarp/fuzz fuzz/docker/
|
62
62
|
|
63
63
|
fuzz-run-%: FORCE fuzz-docker-build
|
64
|
+
$(ECHO) "generating templates"
|
65
|
+
$(Q) bundle exec rake templates
|
64
66
|
$(ECHO) "running $* fuzzer"
|
65
67
|
$(Q) docker run --rm -v $(shell pwd):/yarp yarp/fuzz /bin/bash -c "FUZZ_FLAGS=\"$(FUZZ_FLAGS)\" make build/fuzz.$*"
|
66
68
|
$(ECHO) "starting AFL++ run"
|
data/README.md
CHANGED
@@ -29,6 +29,8 @@ The repository contains the infrastructure for both a shared library (librubypar
|
|
29
29
|
│ ├── yarp Ruby library files
|
30
30
|
│ └── yarp.rb main entrypoint for the Ruby library
|
31
31
|
├── rakelib various Rake tasks for the project
|
32
|
+
├── rust
|
33
|
+
│ └── yarp-sys FFI binding for Rust
|
32
34
|
├── src
|
33
35
|
│ ├── enc various encoding files
|
34
36
|
│ ├── util various utility files
|
@@ -45,7 +47,7 @@ The repository contains the infrastructure for both a shared library (librubypar
|
|
45
47
|
To compile the shared library, you will need:
|
46
48
|
|
47
49
|
* A C99 compiler
|
48
|
-
* autotools
|
50
|
+
* autotools autoconf, automake, libtool)
|
49
51
|
* make
|
50
52
|
* Ruby 3.3.0-preview1 or later
|
51
53
|
|
@@ -77,10 +79,11 @@ See the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. We additio
|
|
77
79
|
* [Configuration](docs/configuration.md)
|
78
80
|
* [Design](docs/design.md)
|
79
81
|
* [Encoding](docs/encoding.md)
|
80
|
-
* [Extension](docs/extension.md)
|
81
82
|
* [Fuzzing](docs/fuzzing.md)
|
82
83
|
* [Heredocs](docs/heredocs.md)
|
83
84
|
* [Mapping](docs/mapping.md)
|
84
85
|
* [Ripper](docs/ripper.md)
|
86
|
+
* [Ruby API](docs/ruby_api.md)
|
85
87
|
* [Serialization](docs/serialization.md)
|
86
88
|
* [Testing](docs/testing.md)
|
89
|
+
|
data/config.yml
CHANGED
@@ -399,6 +399,19 @@ nodes:
|
|
399
399
|
|
400
400
|
left and right
|
401
401
|
^^^^^^^^^^^^^^
|
402
|
+
- name: AndWriteNode
|
403
|
+
child_nodes:
|
404
|
+
- name: target
|
405
|
+
type: node
|
406
|
+
- name: value
|
407
|
+
type: node
|
408
|
+
- name: operator_loc
|
409
|
+
type: location
|
410
|
+
comment: |
|
411
|
+
Represents the use of the `&&=` operator.
|
412
|
+
|
413
|
+
target &&= value
|
414
|
+
^^^^^^^^^^^^^^^^
|
402
415
|
- name: ArgumentsNode
|
403
416
|
child_nodes:
|
404
417
|
- name: arguments
|
@@ -527,7 +540,7 @@ nodes:
|
|
527
540
|
- name: parameters
|
528
541
|
type: node?
|
529
542
|
kind: BlockParametersNode
|
530
|
-
- name:
|
543
|
+
- name: body
|
531
544
|
type: node?
|
532
545
|
- name: opening_loc
|
533
546
|
type: location
|
@@ -714,7 +727,7 @@ nodes:
|
|
714
727
|
type: location?
|
715
728
|
- name: superclass
|
716
729
|
type: node?
|
717
|
-
- name:
|
730
|
+
- name: body
|
718
731
|
type: node?
|
719
732
|
- name: end_keyword_loc
|
720
733
|
type: location
|
@@ -723,47 +736,6 @@ nodes:
|
|
723
736
|
|
724
737
|
class Foo end
|
725
738
|
^^^^^^^^^^^^^
|
726
|
-
- name: ClassVariableOperatorAndWriteNode
|
727
|
-
child_nodes:
|
728
|
-
- name: name_loc
|
729
|
-
type: location
|
730
|
-
- name: operator_loc
|
731
|
-
type: location
|
732
|
-
- name: value
|
733
|
-
type: node
|
734
|
-
comment: |
|
735
|
-
Represents the use of the `&&=` operator for assignment to a class variable.
|
736
|
-
|
737
|
-
@@target &&= value
|
738
|
-
^^^^^^^^^^^^^^^^
|
739
|
-
- name: ClassVariableOperatorOrWriteNode
|
740
|
-
child_nodes:
|
741
|
-
- name: name_loc
|
742
|
-
type: location
|
743
|
-
- name: operator_loc
|
744
|
-
type: location
|
745
|
-
- name: value
|
746
|
-
type: node
|
747
|
-
comment: |
|
748
|
-
Represents the use of the `||=` operator for assignment to a class variable.
|
749
|
-
|
750
|
-
@@target ||= value
|
751
|
-
^^^^^^^^^^^^^^^^^^
|
752
|
-
- name: ClassVariableOperatorWriteNode
|
753
|
-
child_nodes:
|
754
|
-
- name: name_loc
|
755
|
-
type: location
|
756
|
-
- name: operator_loc
|
757
|
-
type: location
|
758
|
-
- name: value
|
759
|
-
type: node
|
760
|
-
- name: operator
|
761
|
-
type: constant
|
762
|
-
comment: |
|
763
|
-
Represents assigning to a class variable using an operator that isn't `=`.
|
764
|
-
|
765
|
-
@@target += value
|
766
|
-
^^^^^^^^^^^^^^^^^
|
767
739
|
- name: ClassVariableReadNode
|
768
740
|
comment: |
|
769
741
|
Represents referencing a class variable.
|
@@ -783,47 +755,6 @@ nodes:
|
|
783
755
|
|
784
756
|
@@foo = 1
|
785
757
|
^^^^^^^^^
|
786
|
-
- name: ConstantOperatorAndWriteNode
|
787
|
-
child_nodes:
|
788
|
-
- name: name_loc
|
789
|
-
type: location
|
790
|
-
- name: operator_loc
|
791
|
-
type: location
|
792
|
-
- name: value
|
793
|
-
type: node
|
794
|
-
comment: |
|
795
|
-
Represents the use of the `&&=` operator for assignment to a constant.
|
796
|
-
|
797
|
-
Target &&= value
|
798
|
-
^^^^^^^^^^^^^^^^
|
799
|
-
- name: ConstantOperatorOrWriteNode
|
800
|
-
child_nodes:
|
801
|
-
- name: name_loc
|
802
|
-
type: location
|
803
|
-
- name: operator_loc
|
804
|
-
type: location
|
805
|
-
- name: value
|
806
|
-
type: node
|
807
|
-
comment: |
|
808
|
-
Represents the use of the `||=` operator for assignment to a constant.
|
809
|
-
|
810
|
-
Target ||= value
|
811
|
-
^^^^^^^^^^^^^^^^
|
812
|
-
- name: ConstantOperatorWriteNode
|
813
|
-
child_nodes:
|
814
|
-
- name: name_loc
|
815
|
-
type: location
|
816
|
-
- name: operator_loc
|
817
|
-
type: location
|
818
|
-
- name: value
|
819
|
-
type: node
|
820
|
-
- name: operator
|
821
|
-
type: constant
|
822
|
-
comment: |
|
823
|
-
Represents assigning to a constant using an operator that isn't `=`.
|
824
|
-
|
825
|
-
Target += value
|
826
|
-
^^^^^^^^^^^^^^^
|
827
758
|
- name: ConstantPathNode
|
828
759
|
child_nodes:
|
829
760
|
- name: parent
|
@@ -837,50 +768,6 @@ nodes:
|
|
837
768
|
|
838
769
|
Foo::Bar
|
839
770
|
^^^^^^^^
|
840
|
-
- name: ConstantPathOperatorAndWriteNode
|
841
|
-
child_nodes:
|
842
|
-
- name: target
|
843
|
-
type: node
|
844
|
-
kind: ConstantPathNode
|
845
|
-
- name: operator_loc
|
846
|
-
type: location
|
847
|
-
- name: value
|
848
|
-
type: node
|
849
|
-
comment: |
|
850
|
-
Represents the use of the `&&=` operator for assignment to a constant path.
|
851
|
-
|
852
|
-
Parent::Child &&= value
|
853
|
-
^^^^^^^^^^^^^^^^^^^^^^^
|
854
|
-
- name: ConstantPathOperatorOrWriteNode
|
855
|
-
child_nodes:
|
856
|
-
- name: target
|
857
|
-
type: node
|
858
|
-
kind: ConstantPathNode
|
859
|
-
- name: operator_loc
|
860
|
-
type: location
|
861
|
-
- name: value
|
862
|
-
type: node
|
863
|
-
comment: |
|
864
|
-
Represents the use of the `||=` operator for assignment to a constant path.
|
865
|
-
|
866
|
-
Parent::Child ||= value
|
867
|
-
^^^^^^^^^^^^^^^^^^^^^^^
|
868
|
-
- name: ConstantPathOperatorWriteNode
|
869
|
-
child_nodes:
|
870
|
-
- name: target
|
871
|
-
type: node
|
872
|
-
kind: ConstantPathNode
|
873
|
-
- name: operator_loc
|
874
|
-
type: location
|
875
|
-
- name: value
|
876
|
-
type: node
|
877
|
-
- name: operator
|
878
|
-
type: constant
|
879
|
-
comment: |
|
880
|
-
Represents assigning to a constant path using an operator that isn't `=`.
|
881
|
-
|
882
|
-
Parent::Child += value
|
883
|
-
^^^^^^^^^^^^^^^^^^^^^^
|
884
771
|
- name: ConstantPathWriteNode
|
885
772
|
child_nodes:
|
886
773
|
- name: target
|
@@ -929,7 +816,7 @@ nodes:
|
|
929
816
|
- name: parameters
|
930
817
|
type: node?
|
931
818
|
kind: ParametersNode
|
932
|
-
- name:
|
819
|
+
- name: body
|
933
820
|
type: node?
|
934
821
|
- name: locals
|
935
822
|
type: constant[]
|
@@ -1123,47 +1010,6 @@ nodes:
|
|
1123
1010
|
|
1124
1011
|
super
|
1125
1012
|
^^^^^
|
1126
|
-
- name: GlobalVariableOperatorAndWriteNode
|
1127
|
-
child_nodes:
|
1128
|
-
- name: name_loc
|
1129
|
-
type: location
|
1130
|
-
- name: operator_loc
|
1131
|
-
type: location
|
1132
|
-
- name: value
|
1133
|
-
type: node
|
1134
|
-
comment: |
|
1135
|
-
Represents the use of the `&&=` operator for assignment to a global variable.
|
1136
|
-
|
1137
|
-
$target &&= value
|
1138
|
-
^^^^^^^^^^^^^^^^^
|
1139
|
-
- name: GlobalVariableOperatorOrWriteNode
|
1140
|
-
child_nodes:
|
1141
|
-
- name: name_loc
|
1142
|
-
type: location
|
1143
|
-
- name: operator_loc
|
1144
|
-
type: location
|
1145
|
-
- name: value
|
1146
|
-
type: node
|
1147
|
-
comment: |
|
1148
|
-
Represents the use of the `||=` operator for assignment to a global variable.
|
1149
|
-
|
1150
|
-
$target ||= value
|
1151
|
-
^^^^^^^^^^^^^^^^^
|
1152
|
-
- name: GlobalVariableOperatorWriteNode
|
1153
|
-
child_nodes:
|
1154
|
-
- name: name_loc
|
1155
|
-
type: location
|
1156
|
-
- name: operator_loc
|
1157
|
-
type: location
|
1158
|
-
- name: value
|
1159
|
-
type: node
|
1160
|
-
- name: operator
|
1161
|
-
type: constant
|
1162
|
-
comment: |
|
1163
|
-
Represents assigning to a global variable using an operator that isn't `=`.
|
1164
|
-
|
1165
|
-
$target += value
|
1166
|
-
^^^^^^^^^^^^^^^^
|
1167
1013
|
- name: GlobalVariableReadNode
|
1168
1014
|
comment: |
|
1169
1015
|
Represents referencing a global variable.
|
@@ -1263,47 +1109,6 @@ nodes:
|
|
1263
1109
|
|
1264
1110
|
case a; in b then c end
|
1265
1111
|
^^^^^^^^^^^
|
1266
|
-
- name: InstanceVariableOperatorAndWriteNode
|
1267
|
-
child_nodes:
|
1268
|
-
- name: name_loc
|
1269
|
-
type: location
|
1270
|
-
- name: operator_loc
|
1271
|
-
type: location
|
1272
|
-
- name: value
|
1273
|
-
type: node
|
1274
|
-
comment: |
|
1275
|
-
Represents the use of the `&&=` operator for assignment to an instance variable.
|
1276
|
-
|
1277
|
-
@target &&= value
|
1278
|
-
^^^^^^^^^^^^^^^^^
|
1279
|
-
- name: InstanceVariableOperatorOrWriteNode
|
1280
|
-
child_nodes:
|
1281
|
-
- name: name_loc
|
1282
|
-
type: location
|
1283
|
-
- name: operator_loc
|
1284
|
-
type: location
|
1285
|
-
- name: value
|
1286
|
-
type: node
|
1287
|
-
comment: |
|
1288
|
-
Represents the use of the `||=` operator for assignment to an instance variable.
|
1289
|
-
|
1290
|
-
@target ||= value
|
1291
|
-
^^^^^^^^^^^^^^^^^
|
1292
|
-
- name: InstanceVariableOperatorWriteNode
|
1293
|
-
child_nodes:
|
1294
|
-
- name: name_loc
|
1295
|
-
type: location
|
1296
|
-
- name: operator_loc
|
1297
|
-
type: location
|
1298
|
-
- name: value
|
1299
|
-
type: node
|
1300
|
-
- name: operator
|
1301
|
-
type: constant
|
1302
|
-
comment: |
|
1303
|
-
Represents assigning to an instance variable using an operator that isn't `=`.
|
1304
|
-
|
1305
|
-
@target += value
|
1306
|
-
^^^^^^^^^^^^^^^^
|
1307
1112
|
- name: InstanceVariableReadNode
|
1308
1113
|
comment: |
|
1309
1114
|
Represents referencing an instance variable.
|
@@ -1434,60 +1239,13 @@ nodes:
|
|
1434
1239
|
- name: parameters
|
1435
1240
|
type: node?
|
1436
1241
|
kind: BlockParametersNode
|
1437
|
-
- name:
|
1242
|
+
- name: body
|
1438
1243
|
type: node?
|
1439
1244
|
comment: |
|
1440
1245
|
Represents using a lambda literal (not the lambda method call).
|
1441
1246
|
|
1442
1247
|
->(value) { value * 2 }
|
1443
1248
|
^^^^^^^^^^^^^^^^^^^^^^^
|
1444
|
-
- name: LocalVariableOperatorAndWriteNode
|
1445
|
-
child_nodes:
|
1446
|
-
- name: name_loc
|
1447
|
-
type: location
|
1448
|
-
- name: operator_loc
|
1449
|
-
type: location
|
1450
|
-
- name: value
|
1451
|
-
type: node
|
1452
|
-
- name: constant_id
|
1453
|
-
type: constant
|
1454
|
-
comment: |
|
1455
|
-
Represents the use of the `&&=` operator for assignment to a local variable.
|
1456
|
-
|
1457
|
-
target &&= value
|
1458
|
-
^^^^^^^^^^^^^^^^
|
1459
|
-
- name: LocalVariableOperatorOrWriteNode
|
1460
|
-
child_nodes:
|
1461
|
-
- name: name_loc
|
1462
|
-
type: location
|
1463
|
-
- name: operator_loc
|
1464
|
-
type: location
|
1465
|
-
- name: value
|
1466
|
-
type: node
|
1467
|
-
- name: constant_id
|
1468
|
-
type: constant
|
1469
|
-
comment: |
|
1470
|
-
Represents the use of the `||=` operator for assignment to a local variable.
|
1471
|
-
|
1472
|
-
target ||= value
|
1473
|
-
^^^^^^^^^^^^^^^^
|
1474
|
-
- name: LocalVariableOperatorWriteNode
|
1475
|
-
child_nodes:
|
1476
|
-
- name: name_loc
|
1477
|
-
type: location
|
1478
|
-
- name: operator_loc
|
1479
|
-
type: location
|
1480
|
-
- name: value
|
1481
|
-
type: node
|
1482
|
-
- name: constant_id
|
1483
|
-
type: constant
|
1484
|
-
- name: operator_id
|
1485
|
-
type: constant
|
1486
|
-
comment: |
|
1487
|
-
Represents assigning to a local variable using an operator that isn't `=`.
|
1488
|
-
|
1489
|
-
target += value
|
1490
|
-
^^^^^^^^^^^^^^^
|
1491
1249
|
- name: LocalVariableReadNode
|
1492
1250
|
child_nodes:
|
1493
1251
|
- name: constant_id
|
@@ -1556,7 +1314,7 @@ nodes:
|
|
1556
1314
|
type: location
|
1557
1315
|
- name: constant_path
|
1558
1316
|
type: node
|
1559
|
-
- name:
|
1317
|
+
- name: body
|
1560
1318
|
type: node?
|
1561
1319
|
- name: end_keyword_loc
|
1562
1320
|
type: location
|
@@ -1618,6 +1376,21 @@ nodes:
|
|
1618
1376
|
|
1619
1377
|
$1
|
1620
1378
|
^^
|
1379
|
+
- name: OperatorWriteNode
|
1380
|
+
child_nodes:
|
1381
|
+
- name: target
|
1382
|
+
type: node
|
1383
|
+
- name: operator_loc
|
1384
|
+
type: location
|
1385
|
+
- name: operator
|
1386
|
+
type: constant
|
1387
|
+
- name: value
|
1388
|
+
type: node
|
1389
|
+
comment: |
|
1390
|
+
Represents the use of an operator on a write.
|
1391
|
+
|
1392
|
+
target += value
|
1393
|
+
^^^^^^^^^^^^^^^
|
1621
1394
|
- name: OptionalParameterNode
|
1622
1395
|
child_nodes:
|
1623
1396
|
- name: constant_id
|
@@ -1647,6 +1420,19 @@ nodes:
|
|
1647
1420
|
|
1648
1421
|
left or right
|
1649
1422
|
^^^^^^^^^^^^^
|
1423
|
+
- name: OrWriteNode
|
1424
|
+
child_nodes:
|
1425
|
+
- name: target
|
1426
|
+
type: node
|
1427
|
+
- name: value
|
1428
|
+
type: node
|
1429
|
+
- name: operator_loc
|
1430
|
+
type: location
|
1431
|
+
comment: |
|
1432
|
+
Represents the use of the `||=` operator.
|
1433
|
+
|
1434
|
+
target ||= value
|
1435
|
+
^^^^^^^^^^^^^^^^
|
1650
1436
|
- name: ParametersNode
|
1651
1437
|
child_nodes:
|
1652
1438
|
- name: requireds
|
@@ -1673,7 +1459,7 @@ nodes:
|
|
1673
1459
|
end
|
1674
1460
|
- name: ParenthesesNode
|
1675
1461
|
child_nodes:
|
1676
|
-
- name:
|
1462
|
+
- name: body
|
1677
1463
|
type: node?
|
1678
1464
|
- name: opening_loc
|
1679
1465
|
type: location
|
@@ -1916,7 +1702,7 @@ nodes:
|
|
1916
1702
|
type: location
|
1917
1703
|
- name: expression
|
1918
1704
|
type: node
|
1919
|
-
- name:
|
1705
|
+
- name: body
|
1920
1706
|
type: node?
|
1921
1707
|
- name: end_keyword_loc
|
1922
1708
|
type: location
|
@@ -1932,7 +1718,6 @@ nodes:
|
|
1932
1718
|
__ENCODING__
|
1933
1719
|
^^^^^^^^^^^^
|
1934
1720
|
- name: SourceFileNode
|
1935
|
-
is_migrated: true
|
1936
1721
|
child_nodes:
|
1937
1722
|
- name: filepath
|
1938
1723
|
type: string
|
@@ -2111,10 +1896,12 @@ nodes:
|
|
2111
1896
|
type: node?
|
2112
1897
|
kind: StatementsNode
|
2113
1898
|
comment: |
|
2114
|
-
case
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
1899
|
+
Represents the use of the `when` keyword within a case statement.
|
1900
|
+
|
1901
|
+
case true
|
1902
|
+
when true
|
1903
|
+
^^^^^^^^^
|
1904
|
+
end
|
2118
1905
|
- name: WhileNode
|
2119
1906
|
child_nodes:
|
2120
1907
|
- name: keyword_loc
|