prism 0.18.0 → 0.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -1
- data/README.md +2 -1
- data/config.yml +188 -55
- data/docs/building.md +9 -2
- data/docs/configuration.md +10 -9
- data/docs/encoding.md +24 -56
- data/docs/local_variable_depth.md +229 -0
- data/docs/ruby_api.md +2 -0
- data/docs/serialization.md +18 -13
- data/ext/prism/api_node.c +337 -195
- data/ext/prism/extconf.rb +13 -7
- data/ext/prism/extension.c +96 -32
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +340 -137
- data/include/prism/defines.h +17 -0
- data/include/prism/diagnostic.h +11 -5
- data/include/prism/encoding.h +248 -0
- data/include/prism/options.h +2 -2
- data/include/prism/parser.h +62 -42
- data/include/prism/regexp.h +2 -2
- data/include/prism/util/pm_buffer.h +9 -1
- data/include/prism/util/pm_memchr.h +2 -2
- data/include/prism/util/pm_strpbrk.h +3 -3
- data/include/prism/version.h +2 -2
- data/include/prism.h +13 -15
- data/lib/prism/compiler.rb +12 -0
- data/lib/prism/debug.rb +9 -4
- data/lib/prism/desugar_compiler.rb +3 -3
- data/lib/prism/dispatcher.rb +56 -0
- data/lib/prism/dot_visitor.rb +476 -198
- data/lib/prism/dsl.rb +66 -46
- data/lib/prism/ffi.rb +16 -3
- data/lib/prism/lex_compat.rb +19 -9
- data/lib/prism/mutation_compiler.rb +20 -0
- data/lib/prism/node.rb +1173 -450
- data/lib/prism/node_ext.rb +41 -16
- data/lib/prism/parse_result.rb +12 -15
- data/lib/prism/ripper_compat.rb +49 -34
- data/lib/prism/serialize.rb +242 -212
- data/lib/prism/visitor.rb +12 -0
- data/lib/prism.rb +20 -4
- data/prism.gemspec +4 -10
- data/rbi/prism.rbi +605 -230
- data/rbi/prism_static.rbi +3 -0
- data/sig/prism.rbs +379 -124
- data/sig/prism_static.rbs +1 -0
- data/src/diagnostic.c +228 -222
- data/src/encoding.c +5137 -0
- data/src/node.c +66 -0
- data/src/options.c +21 -2
- data/src/prettyprint.c +806 -406
- data/src/prism.c +1092 -700
- data/src/regexp.c +3 -3
- data/src/serialize.c +227 -157
- data/src/util/pm_buffer.c +10 -1
- data/src/util/pm_memchr.c +1 -1
- data/src/util/pm_strpbrk.c +4 -4
- metadata +5 -11
- data/include/prism/enc/pm_encoding.h +0 -227
- data/src/enc/pm_big5.c +0 -116
- data/src/enc/pm_cp51932.c +0 -57
- data/src/enc/pm_euc_jp.c +0 -69
- data/src/enc/pm_gbk.c +0 -65
- data/src/enc/pm_shift_jis.c +0 -57
- data/src/enc/pm_tables.c +0 -2073
- data/src/enc/pm_unicode.c +0 -2369
- data/src/enc/pm_windows_31j.c +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72e48ffbc7a58cb622a709f860470c4cf2178113a2ba6a2c9cd4f838229ccff8
|
4
|
+
data.tar.gz: 709ecc0c274a141a868661f94d28aad3fda3032e1b253b2f699a15ff71200c37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42a21574ff5ca1ce62c836839a8c54ed7d6a3f943cfbbd13d860aa30f3d1cf2b6fd5add3082d7622b30e3403ecbf98a404f3c9ef831744e60d40deabeae44ba2
|
7
|
+
data.tar.gz: 8ef39e9818ba2f13808a0e1131514709e6c7cbbbf2a0c784d047637d56b0024d35951a852c91d8f29c72477b5e923a6cc2687335cf44ccc761ab2e8e5eb5e521
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,35 @@ 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.19.0] - 2023-12-14
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- `ArrayNode` now has a `contains_splat?` flag if it has a splatted element in it.
|
14
|
+
- All of the remaining encodings have been implemented.
|
15
|
+
- Allow forwarding `&` in a method that has a `...` parameter.
|
16
|
+
- Many statements that are found in non-statement positions are being properly rejected now.
|
17
|
+
- Void values are now properly checked.
|
18
|
+
- Referencing a parameter in its own default value is now properly rejected.
|
19
|
+
- `DATA`/`__END__` is now parsed as its own field on parse result (`data_loc`) as opposed to as a comment.
|
20
|
+
- Blank `*` now properly forwards into arrays.
|
21
|
+
- `ImplicitRestNode` is introduced to represent the implicit rest of a destructure.
|
22
|
+
- We now support negative start lines.
|
23
|
+
- `StringNode#heredoc?`, `InterpolatedStringNode#heredoc?`, `XStringNode#heredoc?`, and `InterpolatedXStringNode#heredoc?` are introduced.
|
24
|
+
- `NumberedParametersNode` is introduced to represent the implicit set of parameters when numbered parameters are used.
|
25
|
+
- `Prism::parse_success?` and `Prism::parse_failure?` are introduced to bypass reifying the AST.
|
26
|
+
- We now emit a warning for constant assignments in method definitions.
|
27
|
+
- We now provide flags on strings and xstrings to indicate the correct encoding.
|
28
|
+
- The hash pattern `rest` field now more accurately parses `**` and `**nil`.
|
29
|
+
- The equality operators are now properly parsed as non-associative.
|
30
|
+
|
31
|
+
### Changed
|
32
|
+
|
33
|
+
- **BREAKING**: Many fields have changed positions within their nodes. This impacts the C API and the Ruby API if you are manually creating nodes through the initializer.
|
34
|
+
- **BREAKING**: Almost all of the error messages have been updated to begin with lowercase characters to match ruby/spec.
|
35
|
+
- Unterminated strings with only plain content are now always `StringNode` as opposed to `InterpolatedStringNode`
|
36
|
+
- **BREAKING**: Call node has been split up when it is in the target position into `CallTargetNode` and `IndexTargetNode`.
|
37
|
+
|
9
38
|
## [0.18.0] - 2023-11-21
|
10
39
|
|
11
40
|
### Added
|
@@ -267,7 +296,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
267
296
|
|
268
297
|
- 🎉 Initial release! 🎉
|
269
298
|
|
270
|
-
[unreleased]: https://github.com/ruby/prism/compare/v0.
|
299
|
+
[unreleased]: https://github.com/ruby/prism/compare/v0.19.0...HEAD
|
300
|
+
[0.19.0]: https://github.com/ruby/prism/compare/v0.18.0...v0.19.0
|
271
301
|
[0.18.0]: https://github.com/ruby/prism/compare/v0.17.1...v0.18.0
|
272
302
|
[0.17.1]: https://github.com/ruby/prism/compare/v0.17.0...v0.17.1
|
273
303
|
[0.17.0]: https://github.com/ruby/prism/compare/v0.16.0...v0.17.0
|
data/README.md
CHANGED
@@ -64,7 +64,7 @@ bundle install
|
|
64
64
|
to fetch the Ruby dependencies. Finally, run:
|
65
65
|
|
66
66
|
```
|
67
|
-
rake compile
|
67
|
+
bundle exec rake compile
|
68
68
|
```
|
69
69
|
|
70
70
|
to compile the shared library. It will be built in the `build` directory. To test that everything is working, run:
|
@@ -86,6 +86,7 @@ See the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. We additio
|
|
86
86
|
* [Fuzzing](docs/fuzzing.md)
|
87
87
|
* [Heredocs](docs/heredocs.md)
|
88
88
|
* [JavaScript](docs/javascript.md)
|
89
|
+
* [Local variable depth](docs/local_variable_depth.md)
|
89
90
|
* [Mapping](docs/mapping.md)
|
90
91
|
* [Releasing](docs/releasing.md)
|
91
92
|
* [Ripper](docs/ripper.md)
|
data/config.yml
CHANGED
@@ -331,27 +331,46 @@ tokens:
|
|
331
331
|
flags:
|
332
332
|
- name: ArgumentsNodeFlags
|
333
333
|
values:
|
334
|
-
- name:
|
334
|
+
- name: CONTAINS_KEYWORD_SPLAT
|
335
335
|
comment: "if arguments contain keyword splat"
|
336
336
|
comment: Flags for arguments nodes.
|
337
|
+
- name: ArrayNodeFlags
|
338
|
+
values:
|
339
|
+
- name: CONTAINS_SPLAT
|
340
|
+
comment: "if array contains splat nodes"
|
341
|
+
comment: Flags for array nodes.
|
337
342
|
- name: CallNodeFlags
|
338
343
|
values:
|
339
344
|
- name: SAFE_NAVIGATION
|
340
345
|
comment: "&. operator"
|
341
346
|
- name: VARIABLE_CALL
|
342
347
|
comment: "a call that could have been a local variable"
|
348
|
+
- name: ATTRIBUTE_WRITE
|
349
|
+
comment: "a call that is an attribute write, so the value being written should be returned"
|
343
350
|
comment: Flags for call nodes.
|
351
|
+
- name: EncodingFlags
|
352
|
+
values:
|
353
|
+
- name: FORCED_UTF8_ENCODING
|
354
|
+
comment: "internal bytes forced the encoding to UTF-8"
|
355
|
+
- name: FORCED_BINARY_ENCODING
|
356
|
+
comment: "internal bytes forced the encoding to binary"
|
357
|
+
comment: Flags for nodes that have unescaped content.
|
344
358
|
- name: IntegerBaseFlags
|
345
359
|
values:
|
346
360
|
- name: BINARY
|
347
361
|
comment: "0b prefix"
|
348
|
-
- name: OCTAL
|
349
|
-
comment: "0o or 0 prefix"
|
350
362
|
- name: DECIMAL
|
351
363
|
comment: "0d or no prefix"
|
364
|
+
- name: OCTAL
|
365
|
+
comment: "0o or 0 prefix"
|
352
366
|
- name: HEXADECIMAL
|
353
367
|
comment: "0x prefix"
|
354
368
|
comment: Flags for integer nodes that correspond to the base of the integer.
|
369
|
+
- name: KeywordHashNodeFlags
|
370
|
+
values:
|
371
|
+
- name: STATIC_KEYS
|
372
|
+
comment: "a keyword hash which only has `AssocNode` elements all with static literal keys, which means the elements can be treated as keyword arguments"
|
373
|
+
comment: Flags for keyword hash nodes.
|
355
374
|
- name: LoopFlags
|
356
375
|
values:
|
357
376
|
- name: BEGIN_MODIFIER
|
@@ -380,12 +399,31 @@ flags:
|
|
380
399
|
comment: "s - forces the Windows-31J encoding"
|
381
400
|
- name: UTF_8
|
382
401
|
comment: "u - forces the UTF-8 encoding"
|
402
|
+
- name: FORCED_UTF8_ENCODING
|
403
|
+
comment: "internal bytes forced the encoding to UTF-8"
|
404
|
+
- name: FORCED_BINARY_ENCODING
|
405
|
+
comment: "internal bytes forced the encoding to binary"
|
406
|
+
- name: FORCED_US_ASCII_ENCODING
|
407
|
+
comment: "internal bytes forced the encoding to US-ASCII"
|
383
408
|
comment: Flags for regular expression and match last line nodes.
|
384
409
|
- name: StringFlags
|
385
410
|
values:
|
411
|
+
- name: FORCED_UTF8_ENCODING
|
412
|
+
comment: "internal bytes forced the encoding to UTF-8"
|
413
|
+
- name: FORCED_BINARY_ENCODING
|
414
|
+
comment: "internal bytes forced the encoding to binary"
|
386
415
|
- name: FROZEN
|
387
416
|
comment: "frozen by virtue of a `frozen_string_literal` comment"
|
388
417
|
comment: Flags for string nodes.
|
418
|
+
- name: SymbolFlags
|
419
|
+
values:
|
420
|
+
- name: FORCED_UTF8_ENCODING
|
421
|
+
comment: "internal bytes forced the encoding to UTF-8"
|
422
|
+
- name: FORCED_BINARY_ENCODING
|
423
|
+
comment: "internal bytes forced the encoding to binary"
|
424
|
+
- name: FORCED_US_ASCII_ENCODING
|
425
|
+
comment: "internal bytes forced the encoding to US-ASCII"
|
426
|
+
comment: Flags for symbol nodes.
|
389
427
|
nodes:
|
390
428
|
- name: AliasGlobalVariableNode
|
391
429
|
fields:
|
@@ -441,11 +479,11 @@ nodes:
|
|
441
479
|
^^^^^^^^^^^^^^
|
442
480
|
- name: ArgumentsNode
|
443
481
|
fields:
|
444
|
-
- name: arguments
|
445
|
-
type: node[]
|
446
482
|
- name: flags
|
447
483
|
type: flags
|
448
484
|
kind: ArgumentsNodeFlags
|
485
|
+
- name: arguments
|
486
|
+
type: node[]
|
449
487
|
comment: |
|
450
488
|
Represents a set of arguments to a method or a keyword.
|
451
489
|
|
@@ -453,6 +491,9 @@ nodes:
|
|
453
491
|
^^^^^^^^^^^^^
|
454
492
|
- name: ArrayNode
|
455
493
|
fields:
|
494
|
+
- name: flags
|
495
|
+
type: flags
|
496
|
+
kind: ArrayNodeFlags
|
456
497
|
- name: elements
|
457
498
|
type: node[]
|
458
499
|
- name: opening_loc
|
@@ -579,9 +620,10 @@ nodes:
|
|
579
620
|
fields:
|
580
621
|
- name: locals
|
581
622
|
type: constant[]
|
623
|
+
- name: locals_body_index
|
624
|
+
type: uint32
|
582
625
|
- name: parameters
|
583
626
|
type: node?
|
584
|
-
kind: BlockParametersNode
|
585
627
|
- name: body
|
586
628
|
type: node?
|
587
629
|
- name: opening_loc
|
@@ -641,15 +683,15 @@ nodes:
|
|
641
683
|
^^^^^^^^^
|
642
684
|
- name: CallAndWriteNode
|
643
685
|
fields:
|
686
|
+
- name: flags
|
687
|
+
type: flags
|
688
|
+
kind: CallNodeFlags
|
644
689
|
- name: receiver
|
645
690
|
type: node?
|
646
691
|
- name: call_operator_loc
|
647
692
|
type: location?
|
648
693
|
- name: message_loc
|
649
694
|
type: location?
|
650
|
-
- name: flags
|
651
|
-
type: flags
|
652
|
-
kind: CallNodeFlags
|
653
695
|
- name: read_name
|
654
696
|
type: constant
|
655
697
|
- name: write_name
|
@@ -665,10 +707,15 @@ nodes:
|
|
665
707
|
^^^^^^^^^^^^^^^^^
|
666
708
|
- name: CallNode
|
667
709
|
fields:
|
710
|
+
- name: flags
|
711
|
+
type: flags
|
712
|
+
kind: CallNodeFlags
|
668
713
|
- name: receiver
|
669
714
|
type: node?
|
670
715
|
- name: call_operator_loc
|
671
716
|
type: location?
|
717
|
+
- name: name
|
718
|
+
type: constant
|
672
719
|
- name: message_loc
|
673
720
|
type: location?
|
674
721
|
- name: opening_loc
|
@@ -680,11 +727,6 @@ nodes:
|
|
680
727
|
type: location?
|
681
728
|
- name: block
|
682
729
|
type: node?
|
683
|
-
- name: flags
|
684
|
-
type: flags
|
685
|
-
kind: CallNodeFlags
|
686
|
-
- name: name
|
687
|
-
type: constant
|
688
730
|
comment: |
|
689
731
|
Represents a method call, in all of the various forms that can take.
|
690
732
|
|
@@ -707,15 +749,15 @@ nodes:
|
|
707
749
|
^^^^^^^^
|
708
750
|
- name: CallOperatorWriteNode
|
709
751
|
fields:
|
752
|
+
- name: flags
|
753
|
+
type: flags
|
754
|
+
kind: CallNodeFlags
|
710
755
|
- name: receiver
|
711
756
|
type: node?
|
712
757
|
- name: call_operator_loc
|
713
758
|
type: location?
|
714
759
|
- name: message_loc
|
715
760
|
type: location?
|
716
|
-
- name: flags
|
717
|
-
type: flags
|
718
|
-
kind: CallNodeFlags
|
719
761
|
- name: read_name
|
720
762
|
type: constant
|
721
763
|
- name: write_name
|
@@ -733,15 +775,15 @@ nodes:
|
|
733
775
|
^^^^^^^^^^^^^^
|
734
776
|
- name: CallOrWriteNode
|
735
777
|
fields:
|
778
|
+
- name: flags
|
779
|
+
type: flags
|
780
|
+
kind: CallNodeFlags
|
736
781
|
- name: receiver
|
737
782
|
type: node?
|
738
783
|
- name: call_operator_loc
|
739
784
|
type: location?
|
740
785
|
- name: message_loc
|
741
786
|
type: location?
|
742
|
-
- name: flags
|
743
|
-
type: flags
|
744
|
-
kind: CallNodeFlags
|
745
787
|
- name: read_name
|
746
788
|
type: constant
|
747
789
|
- name: write_name
|
@@ -755,6 +797,32 @@ nodes:
|
|
755
797
|
|
756
798
|
foo.bar ||= value
|
757
799
|
^^^^^^^^^^^^^^^^^
|
800
|
+
- name: CallTargetNode
|
801
|
+
fields:
|
802
|
+
- name: flags
|
803
|
+
type: flags
|
804
|
+
kind: CallNodeFlags
|
805
|
+
- name: receiver
|
806
|
+
type: node
|
807
|
+
- name: call_operator_loc
|
808
|
+
type: location
|
809
|
+
- name: name
|
810
|
+
type: constant
|
811
|
+
- name: message_loc
|
812
|
+
type: location
|
813
|
+
comment: |
|
814
|
+
Represents assigning to a method call.
|
815
|
+
|
816
|
+
foo.bar, = 1
|
817
|
+
^^^^^^^
|
818
|
+
|
819
|
+
begin
|
820
|
+
rescue => foo.bar
|
821
|
+
^^^^^^^
|
822
|
+
end
|
823
|
+
|
824
|
+
for foo.bar in baz do end
|
825
|
+
^^^^^^^
|
758
826
|
- name: CapturePatternNode
|
759
827
|
fields:
|
760
828
|
- name: value
|
@@ -1096,6 +1164,8 @@ nodes:
|
|
1096
1164
|
type: node?
|
1097
1165
|
- name: locals
|
1098
1166
|
type: constant[]
|
1167
|
+
- name: locals_body_index
|
1168
|
+
type: uint32
|
1099
1169
|
- name: def_keyword_loc
|
1100
1170
|
type: location
|
1101
1171
|
- name: operator_loc
|
@@ -1219,15 +1289,15 @@ nodes:
|
|
1219
1289
|
^^^^^^^^^^^^^^^^^^^^
|
1220
1290
|
- name: FlipFlopNode
|
1221
1291
|
fields:
|
1292
|
+
- name: flags
|
1293
|
+
type: flags
|
1294
|
+
kind: RangeFlags
|
1222
1295
|
- name: left
|
1223
1296
|
type: node?
|
1224
1297
|
- name: right
|
1225
1298
|
type: node?
|
1226
1299
|
- name: operator_loc
|
1227
1300
|
type: location
|
1228
|
-
- name: flags
|
1229
|
-
type: flags
|
1230
|
-
kind: RangeFlags
|
1231
1301
|
comment: |
|
1232
1302
|
Represents the use of the `..` or `...` operators to create flip flops.
|
1233
1303
|
|
@@ -1445,6 +1515,21 @@ nodes:
|
|
1445
1515
|
|
1446
1516
|
{ Foo: }
|
1447
1517
|
^^^^
|
1518
|
+
- name: ImplicitRestNode
|
1519
|
+
comment: |
|
1520
|
+
Represents using a trailing comma to indicate an implicit rest parameter.
|
1521
|
+
|
1522
|
+
foo { |bar,| }
|
1523
|
+
^
|
1524
|
+
|
1525
|
+
foo in [bar,]
|
1526
|
+
^
|
1527
|
+
|
1528
|
+
for foo, in bar do end
|
1529
|
+
^
|
1530
|
+
|
1531
|
+
foo, = bar
|
1532
|
+
^
|
1448
1533
|
- name: InNode
|
1449
1534
|
fields:
|
1450
1535
|
- name: pattern
|
@@ -1463,6 +1548,9 @@ nodes:
|
|
1463
1548
|
^^^^^^^^^^^
|
1464
1549
|
- name: IndexAndWriteNode
|
1465
1550
|
fields:
|
1551
|
+
- name: flags
|
1552
|
+
type: flags
|
1553
|
+
kind: CallNodeFlags
|
1466
1554
|
- name: receiver
|
1467
1555
|
type: node?
|
1468
1556
|
- name: call_operator_loc
|
@@ -1476,9 +1564,6 @@ nodes:
|
|
1476
1564
|
type: location
|
1477
1565
|
- name: block
|
1478
1566
|
type: node?
|
1479
|
-
- name: flags
|
1480
|
-
type: flags
|
1481
|
-
kind: CallNodeFlags
|
1482
1567
|
- name: operator_loc
|
1483
1568
|
type: location
|
1484
1569
|
- name: value
|
@@ -1490,6 +1575,9 @@ nodes:
|
|
1490
1575
|
^^^^^^^^^^^^^^^^^^^^^^
|
1491
1576
|
- name: IndexOperatorWriteNode
|
1492
1577
|
fields:
|
1578
|
+
- name: flags
|
1579
|
+
type: flags
|
1580
|
+
kind: CallNodeFlags
|
1493
1581
|
- name: receiver
|
1494
1582
|
type: node?
|
1495
1583
|
- name: call_operator_loc
|
@@ -1503,9 +1591,6 @@ nodes:
|
|
1503
1591
|
type: location
|
1504
1592
|
- name: block
|
1505
1593
|
type: node?
|
1506
|
-
- name: flags
|
1507
|
-
type: flags
|
1508
|
-
kind: CallNodeFlags
|
1509
1594
|
- name: operator
|
1510
1595
|
type: constant
|
1511
1596
|
- name: operator_loc
|
@@ -1519,6 +1604,9 @@ nodes:
|
|
1519
1604
|
^^^^^^^^^^^^^^^^^^^^^
|
1520
1605
|
- name: IndexOrWriteNode
|
1521
1606
|
fields:
|
1607
|
+
- name: flags
|
1608
|
+
type: flags
|
1609
|
+
kind: CallNodeFlags
|
1522
1610
|
- name: receiver
|
1523
1611
|
type: node?
|
1524
1612
|
- name: call_operator_loc
|
@@ -1532,9 +1620,6 @@ nodes:
|
|
1532
1620
|
type: location
|
1533
1621
|
- name: block
|
1534
1622
|
type: node?
|
1535
|
-
- name: flags
|
1536
|
-
type: flags
|
1537
|
-
kind: CallNodeFlags
|
1538
1623
|
- name: operator_loc
|
1539
1624
|
type: location
|
1540
1625
|
- name: value
|
@@ -1544,6 +1629,35 @@ nodes:
|
|
1544
1629
|
|
1545
1630
|
foo.bar[baz] ||= value
|
1546
1631
|
^^^^^^^^^^^^^^^^^^^^^^
|
1632
|
+
- name: IndexTargetNode
|
1633
|
+
fields:
|
1634
|
+
- name: flags
|
1635
|
+
type: flags
|
1636
|
+
kind: CallNodeFlags
|
1637
|
+
- name: receiver
|
1638
|
+
type: node
|
1639
|
+
- name: opening_loc
|
1640
|
+
type: location
|
1641
|
+
- name: arguments
|
1642
|
+
type: node?
|
1643
|
+
kind: ArgumentsNode
|
1644
|
+
- name: closing_loc
|
1645
|
+
type: location
|
1646
|
+
- name: block
|
1647
|
+
type: node?
|
1648
|
+
comment: |
|
1649
|
+
Represents assigning to an index.
|
1650
|
+
|
1651
|
+
foo[bar], = 1
|
1652
|
+
^^^^^^^^
|
1653
|
+
|
1654
|
+
begin
|
1655
|
+
rescue => foo[bar]
|
1656
|
+
^^^^^^^^
|
1657
|
+
end
|
1658
|
+
|
1659
|
+
for foo[bar] in baz do end
|
1660
|
+
^^^^^^^^
|
1547
1661
|
- name: InstanceVariableAndWriteNode
|
1548
1662
|
fields:
|
1549
1663
|
- name: name
|
@@ -1636,15 +1750,15 @@ nodes:
|
|
1636
1750
|
^
|
1637
1751
|
- name: InterpolatedMatchLastLineNode
|
1638
1752
|
fields:
|
1753
|
+
- name: flags
|
1754
|
+
type: flags
|
1755
|
+
kind: RegularExpressionFlags
|
1639
1756
|
- name: opening_loc
|
1640
1757
|
type: location
|
1641
1758
|
- name: parts
|
1642
1759
|
type: node[]
|
1643
1760
|
- name: closing_loc
|
1644
1761
|
type: location
|
1645
|
-
- name: flags
|
1646
|
-
type: flags
|
1647
|
-
kind: RegularExpressionFlags
|
1648
1762
|
newline: parts
|
1649
1763
|
comment: |
|
1650
1764
|
Represents a regular expression literal that contains interpolation that
|
@@ -1655,15 +1769,15 @@ nodes:
|
|
1655
1769
|
^^^^^^^^^^^^^^^^
|
1656
1770
|
- name: InterpolatedRegularExpressionNode
|
1657
1771
|
fields:
|
1772
|
+
- name: flags
|
1773
|
+
type: flags
|
1774
|
+
kind: RegularExpressionFlags
|
1658
1775
|
- name: opening_loc
|
1659
1776
|
type: location
|
1660
1777
|
- name: parts
|
1661
1778
|
type: node[]
|
1662
1779
|
- name: closing_loc
|
1663
1780
|
type: location
|
1664
|
-
- name: flags
|
1665
|
-
type: flags
|
1666
|
-
kind: RegularExpressionFlags
|
1667
1781
|
newline: parts
|
1668
1782
|
comment: |
|
1669
1783
|
Represents a regular expression literal that contains interpolation.
|
@@ -1714,6 +1828,9 @@ nodes:
|
|
1714
1828
|
^^^^^^^^^^^^^^^^
|
1715
1829
|
- name: KeywordHashNode
|
1716
1830
|
fields:
|
1831
|
+
- name: flags
|
1832
|
+
type: flags
|
1833
|
+
kind: KeywordHashNodeFlags
|
1717
1834
|
- name: elements
|
1718
1835
|
type: node[]
|
1719
1836
|
comment: |
|
@@ -1739,6 +1856,8 @@ nodes:
|
|
1739
1856
|
fields:
|
1740
1857
|
- name: locals
|
1741
1858
|
type: constant[]
|
1859
|
+
- name: locals_body_index
|
1860
|
+
type: uint32
|
1742
1861
|
- name: operator_loc
|
1743
1862
|
type: location
|
1744
1863
|
- name: opening_loc
|
@@ -1747,7 +1866,6 @@ nodes:
|
|
1747
1866
|
type: location
|
1748
1867
|
- name: parameters
|
1749
1868
|
type: node?
|
1750
|
-
kind: BlockParametersNode
|
1751
1869
|
- name: body
|
1752
1870
|
type: node?
|
1753
1871
|
comment: |
|
@@ -1851,6 +1969,9 @@ nodes:
|
|
1851
1969
|
^^^^^^^
|
1852
1970
|
- name: MatchLastLineNode
|
1853
1971
|
fields:
|
1972
|
+
- name: flags
|
1973
|
+
type: flags
|
1974
|
+
kind: RegularExpressionFlags
|
1854
1975
|
- name: opening_loc
|
1855
1976
|
type: location
|
1856
1977
|
- name: content_loc
|
@@ -1859,9 +1980,6 @@ nodes:
|
|
1859
1980
|
type: location
|
1860
1981
|
- name: unescaped
|
1861
1982
|
type: string
|
1862
|
-
- name: flags
|
1863
|
-
type: flags
|
1864
|
-
kind: RegularExpressionFlags
|
1865
1983
|
comment: |
|
1866
1984
|
Represents a regular expression literal used in the predicate of a
|
1867
1985
|
conditional to implicitly match against the last line read by an IO
|
@@ -1999,6 +2117,16 @@ nodes:
|
|
1999
2117
|
def a(**nil)
|
2000
2118
|
^^^^^
|
2001
2119
|
end
|
2120
|
+
- name: NumberedParametersNode
|
2121
|
+
fields:
|
2122
|
+
- name: maximum
|
2123
|
+
type: uint8
|
2124
|
+
comment: |
|
2125
|
+
Represents an implicit set of parameters through the use of numbered
|
2126
|
+
parameters within a block or lambda.
|
2127
|
+
|
2128
|
+
-> { _1 + _2 }
|
2129
|
+
^^^^^^^^^^^^^^
|
2002
2130
|
- name: NumberedReferenceReadNode
|
2003
2131
|
fields:
|
2004
2132
|
- name: number
|
@@ -2059,7 +2187,6 @@ nodes:
|
|
2059
2187
|
type: node[]
|
2060
2188
|
- name: rest
|
2061
2189
|
type: node?
|
2062
|
-
kind: RestParameterNode
|
2063
2190
|
- name: posts
|
2064
2191
|
type: node[]
|
2065
2192
|
- name: keywords
|
@@ -2159,15 +2286,15 @@ nodes:
|
|
2159
2286
|
comment: The top level node of any parse tree.
|
2160
2287
|
- name: RangeNode
|
2161
2288
|
fields:
|
2289
|
+
- name: flags
|
2290
|
+
type: flags
|
2291
|
+
kind: RangeFlags
|
2162
2292
|
- name: left
|
2163
2293
|
type: node?
|
2164
2294
|
- name: right
|
2165
2295
|
type: node?
|
2166
2296
|
- name: operator_loc
|
2167
2297
|
type: location
|
2168
|
-
- name: flags
|
2169
|
-
type: flags
|
2170
|
-
kind: RangeFlags
|
2171
2298
|
comment: |
|
2172
2299
|
Represents the use of the `..` or `...` operators.
|
2173
2300
|
|
@@ -2193,6 +2320,9 @@ nodes:
|
|
2193
2320
|
^^^^
|
2194
2321
|
- name: RegularExpressionNode
|
2195
2322
|
fields:
|
2323
|
+
- name: flags
|
2324
|
+
type: flags
|
2325
|
+
kind: RegularExpressionFlags
|
2196
2326
|
- name: opening_loc
|
2197
2327
|
type: location
|
2198
2328
|
- name: content_loc
|
@@ -2201,9 +2331,6 @@ nodes:
|
|
2201
2331
|
type: location
|
2202
2332
|
- name: unescaped
|
2203
2333
|
type: string
|
2204
|
-
- name: flags
|
2205
|
-
type: flags
|
2206
|
-
kind: RegularExpressionFlags
|
2207
2334
|
comment: |
|
2208
2335
|
Represents a regular expression literal with no interpolation.
|
2209
2336
|
|
@@ -2418,6 +2545,9 @@ nodes:
|
|
2418
2545
|
^^^^^^^^^^^^^^
|
2419
2546
|
- name: SymbolNode
|
2420
2547
|
fields:
|
2548
|
+
- name: flags
|
2549
|
+
type: flags
|
2550
|
+
kind: SymbolFlags
|
2421
2551
|
- name: opening_loc
|
2422
2552
|
type: location?
|
2423
2553
|
- name: value_loc
|
@@ -2478,6 +2608,9 @@ nodes:
|
|
2478
2608
|
^^^^^^^^^^^^^^^^^^^^^^^
|
2479
2609
|
- name: UntilNode
|
2480
2610
|
fields:
|
2611
|
+
- name: flags
|
2612
|
+
type: flags
|
2613
|
+
kind: LoopFlags
|
2481
2614
|
- name: keyword_loc
|
2482
2615
|
type: location
|
2483
2616
|
- name: closing_loc
|
@@ -2487,9 +2620,6 @@ nodes:
|
|
2487
2620
|
- name: statements
|
2488
2621
|
type: node?
|
2489
2622
|
kind: StatementsNode
|
2490
|
-
- name: flags
|
2491
|
-
type: flags
|
2492
|
-
kind: LoopFlags
|
2493
2623
|
newline: predicate
|
2494
2624
|
comment: |
|
2495
2625
|
Represents the use of the `until` keyword, either in the block form or the modifier form.
|
@@ -2517,6 +2647,9 @@ nodes:
|
|
2517
2647
|
end
|
2518
2648
|
- name: WhileNode
|
2519
2649
|
fields:
|
2650
|
+
- name: flags
|
2651
|
+
type: flags
|
2652
|
+
kind: LoopFlags
|
2520
2653
|
- name: keyword_loc
|
2521
2654
|
type: location
|
2522
2655
|
- name: closing_loc
|
@@ -2526,9 +2659,6 @@ nodes:
|
|
2526
2659
|
- name: statements
|
2527
2660
|
type: node?
|
2528
2661
|
kind: StatementsNode
|
2529
|
-
- name: flags
|
2530
|
-
type: flags
|
2531
|
-
kind: LoopFlags
|
2532
2662
|
newline: predicate
|
2533
2663
|
comment: |
|
2534
2664
|
Represents the use of the `while` keyword, either in the block form or the modifier form.
|
@@ -2540,6 +2670,9 @@ nodes:
|
|
2540
2670
|
^^^^^^^^^^^^^^^^^^^^
|
2541
2671
|
- name: XStringNode
|
2542
2672
|
fields:
|
2673
|
+
- name: flags
|
2674
|
+
type: flags
|
2675
|
+
kind: EncodingFlags
|
2543
2676
|
- name: opening_loc
|
2544
2677
|
type: location
|
2545
2678
|
- name: content_loc
|
data/docs/building.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Building
|
2
2
|
|
3
|
-
The following describes how to build prism from source.
|
4
|
-
This comes directly from the [Makefile](../Makefile).
|
3
|
+
The following describes how to build prism from source. This comes directly from the [Makefile](../Makefile).
|
5
4
|
|
6
5
|
## Common
|
7
6
|
|
@@ -20,3 +19,11 @@ If you want to build prism as a shared library and link against it, you should c
|
|
20
19
|
|
21
20
|
* `-fPIC -shared` - Compile as a shared library
|
22
21
|
* `-DPRISM_EXPORT_SYMBOLS` - Export the symbols (by default nothing is exported)
|
22
|
+
|
23
|
+
## Flags
|
24
|
+
|
25
|
+
`make` respects the `MAKEFLAGS` environment variable. As such, to speed up the build you can run:
|
26
|
+
|
27
|
+
```
|
28
|
+
MAKEFLAGS="-j10" bundle exec rake compile
|
29
|
+
```
|
data/docs/configuration.md
CHANGED
@@ -50,14 +50,15 @@ Optionally, every node can define a `child_nodes` key that is an array. This arr
|
|
50
50
|
|
51
51
|
The available values for `type` are:
|
52
52
|
|
53
|
-
* `node` - A
|
54
|
-
* `node?` - A
|
55
|
-
* `node[]` - A
|
56
|
-
* `string` - A
|
57
|
-
* `constant` - A
|
58
|
-
* `constant[]` - A
|
59
|
-
* `location` - A
|
60
|
-
* `location?` - A
|
61
|
-
* `
|
53
|
+
* `node` - A field that is a node. This is a `pm_node_t *` in C.
|
54
|
+
* `node?` - A field that is a node that is optionally present. This is also a `pm_node_t *` in C, but can be `NULL`.
|
55
|
+
* `node[]` - A field that is an array of nodes. This is a `pm_node_list_t` in C.
|
56
|
+
* `string` - A field that is a string. For example, this is used as the name of the method in a call node, since it cannot directly reference the source string (as in `@-` or `foo=`). This is a `pm_string_t` in C.
|
57
|
+
* `constant` - A field that is an integer that represents an index in the constant pool. This is a `pm_constant_id_t` in C.
|
58
|
+
* `constant[]` - A field that is an array of constants. This is a `pm_constant_id_list_t` in C.
|
59
|
+
* `location` - A field that is a location. This is a `pm_location_t` in C.
|
60
|
+
* `location?` - A field that is a location that is optionally present. This is a `pm_location_t` in C, but if the value is not present then the `start` and `end` fields will be `NULL`.
|
61
|
+
* `uint8` - A field that is an 8-bit unsigned integer. This is a `uint8_t` in C.
|
62
|
+
* `uint32` - A field that is a 32-bit unsigned integer. This is a `uint32_t` in C.
|
62
63
|
|
63
64
|
If the type is `node` or `node?` then the value also accepts an optional `kind` key (a string). This key is expected to match to the name of another node type within `config.yml`. This changes a couple of places where code is templated out to use the more specific struct name instead of the generic `pm_node_t`. For example, with `kind: StatementsNode` the `pm_node_t *` in C becomes a `pm_statements_node_t *`.
|