prism 0.17.1 → 0.19.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 +60 -1
- data/Makefile +5 -5
- data/README.md +4 -3
- data/config.yml +214 -68
- data/docs/build_system.md +6 -6
- data/docs/building.md +10 -3
- data/docs/configuration.md +11 -9
- data/docs/encoding.md +92 -88
- data/docs/heredocs.md +1 -1
- data/docs/javascript.md +29 -1
- data/docs/local_variable_depth.md +229 -0
- data/docs/ruby_api.md +16 -0
- data/docs/serialization.md +18 -13
- data/ext/prism/api_node.c +411 -240
- data/ext/prism/extconf.rb +97 -127
- data/ext/prism/extension.c +97 -33
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +377 -159
- data/include/prism/defines.h +17 -0
- data/include/prism/diagnostic.h +38 -6
- data/include/prism/{enc/pm_encoding.h → encoding.h} +126 -64
- data/include/prism/options.h +2 -2
- data/include/prism/parser.h +62 -36
- 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 +3 -3
- data/include/prism.h +13 -15
- data/lib/prism/compiler.rb +15 -3
- data/lib/prism/debug.rb +13 -4
- data/lib/prism/desugar_compiler.rb +4 -3
- data/lib/prism/dispatcher.rb +70 -14
- data/lib/prism/dot_visitor.rb +4612 -0
- data/lib/prism/dsl.rb +77 -57
- data/lib/prism/ffi.rb +19 -6
- data/lib/prism/lex_compat.rb +19 -9
- data/lib/prism/mutation_compiler.rb +26 -6
- data/lib/prism/node.rb +1314 -522
- data/lib/prism/node_ext.rb +102 -19
- data/lib/prism/parse_result.rb +58 -27
- data/lib/prism/ripper_compat.rb +49 -34
- data/lib/prism/serialize.rb +251 -227
- data/lib/prism/visitor.rb +15 -3
- data/lib/prism.rb +21 -4
- data/prism.gemspec +7 -9
- data/rbi/prism.rbi +688 -284
- data/rbi/prism_static.rbi +3 -0
- data/sig/prism.rbs +426 -156
- data/sig/prism_static.rbs +1 -0
- data/src/diagnostic.c +280 -216
- data/src/encoding.c +5137 -0
- data/src/node.c +99 -21
- data/src/options.c +21 -2
- data/src/prettyprint.c +1743 -1241
- data/src/prism.c +1774 -831
- data/src/regexp.c +15 -15
- data/src/serialize.c +261 -164
- 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 +8 -10
- data/src/enc/pm_big5.c +0 -53
- data/src/enc/pm_euc_jp.c +0 -59
- data/src/enc/pm_gbk.c +0 -62
- data/src/enc/pm_shift_jis.c +0 -57
- data/src/enc/pm_tables.c +0 -743
- data/src/enc/pm_unicode.c +0 -2369
- data/src/enc/pm_windows_31j.c +0 -57
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
|
@@ -768,6 +836,26 @@ nodes:
|
|
768
836
|
|
769
837
|
foo => [bar => baz]
|
770
838
|
^^^^^^^^^^^^
|
839
|
+
- name: CaseMatchNode
|
840
|
+
fields:
|
841
|
+
- name: predicate
|
842
|
+
type: node?
|
843
|
+
- name: conditions
|
844
|
+
type: node[]
|
845
|
+
- name: consequent
|
846
|
+
type: node?
|
847
|
+
kind: ElseNode
|
848
|
+
- name: case_keyword_loc
|
849
|
+
type: location
|
850
|
+
- name: end_keyword_loc
|
851
|
+
type: location
|
852
|
+
comment: |
|
853
|
+
Represents the use of a case statement for pattern matching.
|
854
|
+
|
855
|
+
case true
|
856
|
+
in false
|
857
|
+
end
|
858
|
+
^^^^^^^^^
|
771
859
|
- name: CaseNode
|
772
860
|
fields:
|
773
861
|
- name: predicate
|
@@ -1076,6 +1164,8 @@ nodes:
|
|
1076
1164
|
type: node?
|
1077
1165
|
- name: locals
|
1078
1166
|
type: constant[]
|
1167
|
+
- name: locals_body_index
|
1168
|
+
type: uint32
|
1079
1169
|
- name: def_keyword_loc
|
1080
1170
|
type: location
|
1081
1171
|
- name: operator_loc
|
@@ -1199,15 +1289,15 @@ nodes:
|
|
1199
1289
|
^^^^^^^^^^^^^^^^^^^^
|
1200
1290
|
- name: FlipFlopNode
|
1201
1291
|
fields:
|
1292
|
+
- name: flags
|
1293
|
+
type: flags
|
1294
|
+
kind: RangeFlags
|
1202
1295
|
- name: left
|
1203
1296
|
type: node?
|
1204
1297
|
- name: right
|
1205
1298
|
type: node?
|
1206
1299
|
- name: operator_loc
|
1207
1300
|
type: location
|
1208
|
-
- name: flags
|
1209
|
-
type: flags
|
1210
|
-
kind: RangeFlags
|
1211
1301
|
comment: |
|
1212
1302
|
Represents the use of the `..` or `...` operators to create flip flops.
|
1213
1303
|
|
@@ -1385,6 +1475,8 @@ nodes:
|
|
1385
1475
|
type: location?
|
1386
1476
|
- name: predicate
|
1387
1477
|
type: node
|
1478
|
+
- name: then_keyword_loc
|
1479
|
+
type: location?
|
1388
1480
|
- name: statements
|
1389
1481
|
type: node?
|
1390
1482
|
kind: StatementsNode
|
@@ -1423,6 +1515,21 @@ nodes:
|
|
1423
1515
|
|
1424
1516
|
{ Foo: }
|
1425
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
|
+
^
|
1426
1533
|
- name: InNode
|
1427
1534
|
fields:
|
1428
1535
|
- name: pattern
|
@@ -1441,6 +1548,9 @@ nodes:
|
|
1441
1548
|
^^^^^^^^^^^
|
1442
1549
|
- name: IndexAndWriteNode
|
1443
1550
|
fields:
|
1551
|
+
- name: flags
|
1552
|
+
type: flags
|
1553
|
+
kind: CallNodeFlags
|
1444
1554
|
- name: receiver
|
1445
1555
|
type: node?
|
1446
1556
|
- name: call_operator_loc
|
@@ -1454,9 +1564,6 @@ nodes:
|
|
1454
1564
|
type: location
|
1455
1565
|
- name: block
|
1456
1566
|
type: node?
|
1457
|
-
- name: flags
|
1458
|
-
type: flags
|
1459
|
-
kind: CallNodeFlags
|
1460
1567
|
- name: operator_loc
|
1461
1568
|
type: location
|
1462
1569
|
- name: value
|
@@ -1468,6 +1575,9 @@ nodes:
|
|
1468
1575
|
^^^^^^^^^^^^^^^^^^^^^^
|
1469
1576
|
- name: IndexOperatorWriteNode
|
1470
1577
|
fields:
|
1578
|
+
- name: flags
|
1579
|
+
type: flags
|
1580
|
+
kind: CallNodeFlags
|
1471
1581
|
- name: receiver
|
1472
1582
|
type: node?
|
1473
1583
|
- name: call_operator_loc
|
@@ -1481,9 +1591,6 @@ nodes:
|
|
1481
1591
|
type: location
|
1482
1592
|
- name: block
|
1483
1593
|
type: node?
|
1484
|
-
- name: flags
|
1485
|
-
type: flags
|
1486
|
-
kind: CallNodeFlags
|
1487
1594
|
- name: operator
|
1488
1595
|
type: constant
|
1489
1596
|
- name: operator_loc
|
@@ -1497,6 +1604,9 @@ nodes:
|
|
1497
1604
|
^^^^^^^^^^^^^^^^^^^^^
|
1498
1605
|
- name: IndexOrWriteNode
|
1499
1606
|
fields:
|
1607
|
+
- name: flags
|
1608
|
+
type: flags
|
1609
|
+
kind: CallNodeFlags
|
1500
1610
|
- name: receiver
|
1501
1611
|
type: node?
|
1502
1612
|
- name: call_operator_loc
|
@@ -1510,9 +1620,6 @@ nodes:
|
|
1510
1620
|
type: location
|
1511
1621
|
- name: block
|
1512
1622
|
type: node?
|
1513
|
-
- name: flags
|
1514
|
-
type: flags
|
1515
|
-
kind: CallNodeFlags
|
1516
1623
|
- name: operator_loc
|
1517
1624
|
type: location
|
1518
1625
|
- name: value
|
@@ -1522,6 +1629,35 @@ nodes:
|
|
1522
1629
|
|
1523
1630
|
foo.bar[baz] ||= value
|
1524
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
|
+
^^^^^^^^
|
1525
1661
|
- name: InstanceVariableAndWriteNode
|
1526
1662
|
fields:
|
1527
1663
|
- name: name
|
@@ -1614,15 +1750,15 @@ nodes:
|
|
1614
1750
|
^
|
1615
1751
|
- name: InterpolatedMatchLastLineNode
|
1616
1752
|
fields:
|
1753
|
+
- name: flags
|
1754
|
+
type: flags
|
1755
|
+
kind: RegularExpressionFlags
|
1617
1756
|
- name: opening_loc
|
1618
1757
|
type: location
|
1619
1758
|
- name: parts
|
1620
1759
|
type: node[]
|
1621
1760
|
- name: closing_loc
|
1622
1761
|
type: location
|
1623
|
-
- name: flags
|
1624
|
-
type: flags
|
1625
|
-
kind: RegularExpressionFlags
|
1626
1762
|
newline: parts
|
1627
1763
|
comment: |
|
1628
1764
|
Represents a regular expression literal that contains interpolation that
|
@@ -1633,15 +1769,15 @@ nodes:
|
|
1633
1769
|
^^^^^^^^^^^^^^^^
|
1634
1770
|
- name: InterpolatedRegularExpressionNode
|
1635
1771
|
fields:
|
1772
|
+
- name: flags
|
1773
|
+
type: flags
|
1774
|
+
kind: RegularExpressionFlags
|
1636
1775
|
- name: opening_loc
|
1637
1776
|
type: location
|
1638
1777
|
- name: parts
|
1639
1778
|
type: node[]
|
1640
1779
|
- name: closing_loc
|
1641
1780
|
type: location
|
1642
|
-
- name: flags
|
1643
|
-
type: flags
|
1644
|
-
kind: RegularExpressionFlags
|
1645
1781
|
newline: parts
|
1646
1782
|
comment: |
|
1647
1783
|
Represents a regular expression literal that contains interpolation.
|
@@ -1692,6 +1828,9 @@ nodes:
|
|
1692
1828
|
^^^^^^^^^^^^^^^^
|
1693
1829
|
- name: KeywordHashNode
|
1694
1830
|
fields:
|
1831
|
+
- name: flags
|
1832
|
+
type: flags
|
1833
|
+
kind: KeywordHashNodeFlags
|
1695
1834
|
- name: elements
|
1696
1835
|
type: node[]
|
1697
1836
|
comment: |
|
@@ -1717,6 +1856,8 @@ nodes:
|
|
1717
1856
|
fields:
|
1718
1857
|
- name: locals
|
1719
1858
|
type: constant[]
|
1859
|
+
- name: locals_body_index
|
1860
|
+
type: uint32
|
1720
1861
|
- name: operator_loc
|
1721
1862
|
type: location
|
1722
1863
|
- name: opening_loc
|
@@ -1725,7 +1866,6 @@ nodes:
|
|
1725
1866
|
type: location
|
1726
1867
|
- name: parameters
|
1727
1868
|
type: node?
|
1728
|
-
kind: BlockParametersNode
|
1729
1869
|
- name: body
|
1730
1870
|
type: node?
|
1731
1871
|
comment: |
|
@@ -1829,6 +1969,9 @@ nodes:
|
|
1829
1969
|
^^^^^^^
|
1830
1970
|
- name: MatchLastLineNode
|
1831
1971
|
fields:
|
1972
|
+
- name: flags
|
1973
|
+
type: flags
|
1974
|
+
kind: RegularExpressionFlags
|
1832
1975
|
- name: opening_loc
|
1833
1976
|
type: location
|
1834
1977
|
- name: content_loc
|
@@ -1837,9 +1980,6 @@ nodes:
|
|
1837
1980
|
type: location
|
1838
1981
|
- name: unescaped
|
1839
1982
|
type: string
|
1840
|
-
- name: flags
|
1841
|
-
type: flags
|
1842
|
-
kind: RegularExpressionFlags
|
1843
1983
|
comment: |
|
1844
1984
|
Represents a regular expression literal used in the predicate of a
|
1845
1985
|
conditional to implicitly match against the last line read by an IO
|
@@ -1878,8 +2018,8 @@ nodes:
|
|
1878
2018
|
- name: call
|
1879
2019
|
type: node
|
1880
2020
|
kind: CallNode
|
1881
|
-
- name:
|
1882
|
-
type:
|
2021
|
+
- name: targets
|
2022
|
+
type: node[]
|
1883
2023
|
comment: |
|
1884
2024
|
Represents writing local variables using a regular expression match with
|
1885
2025
|
named capture groups.
|
@@ -1977,6 +2117,16 @@ nodes:
|
|
1977
2117
|
def a(**nil)
|
1978
2118
|
^^^^^
|
1979
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
|
+
^^^^^^^^^^^^^^
|
1980
2130
|
- name: NumberedReferenceReadNode
|
1981
2131
|
fields:
|
1982
2132
|
- name: number
|
@@ -2037,7 +2187,6 @@ nodes:
|
|
2037
2187
|
type: node[]
|
2038
2188
|
- name: rest
|
2039
2189
|
type: node?
|
2040
|
-
kind: RestParameterNode
|
2041
2190
|
- name: posts
|
2042
2191
|
type: node[]
|
2043
2192
|
- name: keywords
|
@@ -2137,15 +2286,15 @@ nodes:
|
|
2137
2286
|
comment: The top level node of any parse tree.
|
2138
2287
|
- name: RangeNode
|
2139
2288
|
fields:
|
2289
|
+
- name: flags
|
2290
|
+
type: flags
|
2291
|
+
kind: RangeFlags
|
2140
2292
|
- name: left
|
2141
2293
|
type: node?
|
2142
2294
|
- name: right
|
2143
2295
|
type: node?
|
2144
2296
|
- name: operator_loc
|
2145
2297
|
type: location
|
2146
|
-
- name: flags
|
2147
|
-
type: flags
|
2148
|
-
kind: RangeFlags
|
2149
2298
|
comment: |
|
2150
2299
|
Represents the use of the `..` or `...` operators.
|
2151
2300
|
|
@@ -2171,6 +2320,9 @@ nodes:
|
|
2171
2320
|
^^^^
|
2172
2321
|
- name: RegularExpressionNode
|
2173
2322
|
fields:
|
2323
|
+
- name: flags
|
2324
|
+
type: flags
|
2325
|
+
kind: RegularExpressionFlags
|
2174
2326
|
- name: opening_loc
|
2175
2327
|
type: location
|
2176
2328
|
- name: content_loc
|
@@ -2179,9 +2331,6 @@ nodes:
|
|
2179
2331
|
type: location
|
2180
2332
|
- name: unescaped
|
2181
2333
|
type: string
|
2182
|
-
- name: flags
|
2183
|
-
type: flags
|
2184
|
-
kind: RegularExpressionFlags
|
2185
2334
|
comment: |
|
2186
2335
|
Represents a regular expression literal with no interpolation.
|
2187
2336
|
|
@@ -2348,17 +2497,6 @@ nodes:
|
|
2348
2497
|
|
2349
2498
|
foo; bar; baz
|
2350
2499
|
^^^^^^^^^^^^^
|
2351
|
-
- name: StringConcatNode
|
2352
|
-
fields:
|
2353
|
-
- name: left
|
2354
|
-
type: node
|
2355
|
-
- name: right
|
2356
|
-
type: node
|
2357
|
-
comment: |
|
2358
|
-
Represents the use of compile-time string concatenation.
|
2359
|
-
|
2360
|
-
"foo" "bar"
|
2361
|
-
^^^^^^^^^^^
|
2362
2500
|
- name: StringNode
|
2363
2501
|
fields:
|
2364
2502
|
- name: flags
|
@@ -2407,6 +2545,9 @@ nodes:
|
|
2407
2545
|
^^^^^^^^^^^^^^
|
2408
2546
|
- name: SymbolNode
|
2409
2547
|
fields:
|
2548
|
+
- name: flags
|
2549
|
+
type: flags
|
2550
|
+
kind: SymbolFlags
|
2410
2551
|
- name: opening_loc
|
2411
2552
|
type: location?
|
2412
2553
|
- name: value_loc
|
@@ -2446,6 +2587,8 @@ nodes:
|
|
2446
2587
|
type: location
|
2447
2588
|
- name: predicate
|
2448
2589
|
type: node
|
2590
|
+
- name: then_keyword_loc
|
2591
|
+
type: location?
|
2449
2592
|
- name: statements
|
2450
2593
|
type: node?
|
2451
2594
|
kind: StatementsNode
|
@@ -2465,6 +2608,9 @@ nodes:
|
|
2465
2608
|
^^^^^^^^^^^^^^^^^^^^^^^
|
2466
2609
|
- name: UntilNode
|
2467
2610
|
fields:
|
2611
|
+
- name: flags
|
2612
|
+
type: flags
|
2613
|
+
kind: LoopFlags
|
2468
2614
|
- name: keyword_loc
|
2469
2615
|
type: location
|
2470
2616
|
- name: closing_loc
|
@@ -2474,9 +2620,6 @@ nodes:
|
|
2474
2620
|
- name: statements
|
2475
2621
|
type: node?
|
2476
2622
|
kind: StatementsNode
|
2477
|
-
- name: flags
|
2478
|
-
type: flags
|
2479
|
-
kind: LoopFlags
|
2480
2623
|
newline: predicate
|
2481
2624
|
comment: |
|
2482
2625
|
Represents the use of the `until` keyword, either in the block form or the modifier form.
|
@@ -2504,6 +2647,9 @@ nodes:
|
|
2504
2647
|
end
|
2505
2648
|
- name: WhileNode
|
2506
2649
|
fields:
|
2650
|
+
- name: flags
|
2651
|
+
type: flags
|
2652
|
+
kind: LoopFlags
|
2507
2653
|
- name: keyword_loc
|
2508
2654
|
type: location
|
2509
2655
|
- name: closing_loc
|
@@ -2513,9 +2659,6 @@ nodes:
|
|
2513
2659
|
- name: statements
|
2514
2660
|
type: node?
|
2515
2661
|
kind: StatementsNode
|
2516
|
-
- name: flags
|
2517
|
-
type: flags
|
2518
|
-
kind: LoopFlags
|
2519
2662
|
newline: predicate
|
2520
2663
|
comment: |
|
2521
2664
|
Represents the use of the `while` keyword, either in the block form or the modifier form.
|
@@ -2527,6 +2670,9 @@ nodes:
|
|
2527
2670
|
^^^^^^^^^^^^^^^^^^^^
|
2528
2671
|
- name: XStringNode
|
2529
2672
|
fields:
|
2673
|
+
- name: flags
|
2674
|
+
type: flags
|
2675
|
+
kind: EncodingFlags
|
2530
2676
|
- name: opening_loc
|
2531
2677
|
type: location
|
2532
2678
|
- name: content_loc
|
data/docs/build_system.md
CHANGED
@@ -16,14 +16,14 @@ The main solution for the second point seems a Makefile, otherwise many of the u
|
|
16
16
|
## General Design
|
17
17
|
|
18
18
|
1. Templates are generated by `templates/template.rb`
|
19
|
-
4. The `Makefile` compiles both `
|
19
|
+
4. The `Makefile` compiles both `libprism.a` and `libprism.{so,dylib,dll}` from the `src/**/*.c` and `include/**/*.h` files
|
20
20
|
5. The `Rakefile` `:compile` task ensures the above prerequisites are done, then calls `make`,
|
21
|
-
and uses `Rake::ExtensionTask` to compile the C extension (using its `extconf.rb`), which uses `
|
21
|
+
and uses `Rake::ExtensionTask` to compile the C extension (using its `extconf.rb`), which uses `libprism.a`
|
22
22
|
|
23
23
|
This way there is minimal duplication, and each layer builds on the previous one and has its own responsibilities.
|
24
24
|
|
25
25
|
The static library exports no symbols, to avoid any conflict.
|
26
|
-
The shared library exports some symbols, and this is fine since there should only be one
|
26
|
+
The shared library exports some symbols, and this is fine since there should only be one libprism shared library
|
27
27
|
loaded per process (i.e., at most one version of the prism *gem* loaded in a process, only the gem uses the shared library).
|
28
28
|
|
29
29
|
## The various ways to build prism
|
@@ -36,11 +36,11 @@ loaded per process (i.e., at most one version of the prism *gem* loaded in a pro
|
|
36
36
|
|
37
37
|
The gem contains the pre-generated templates.
|
38
38
|
When installing the gem, `extconf.rb` is used and that:
|
39
|
-
* runs `make build/
|
39
|
+
* runs `make build/libprism.a`
|
40
40
|
* compiles the C extension with mkmf
|
41
41
|
|
42
42
|
When installing the gem on JRuby and TruffleRuby, no C extension is built, so instead of the last step,
|
43
|
-
there is Ruby code using FFI which uses `
|
43
|
+
there is Ruby code using FFI which uses `libprism.{so,dylib,dll}`
|
44
44
|
to implement the same methods as the C extension, but using serialization instead of many native calls/accesses
|
45
45
|
(JRuby does not support C extensions, serialization is faster on TruffleRuby than the C extension).
|
46
46
|
|
@@ -67,7 +67,7 @@ The script generates the templates when importing.
|
|
67
67
|
Then when `mx build` builds TruffleRuby and the `prism` mx project inside, it runs `make`.
|
68
68
|
|
69
69
|
Then the `prism bindings` mx project is built, which contains the [bindings](https://github.com/oracle/truffleruby/blob/master/src/main/c/prism_bindings/src/prism_bindings.c)
|
70
|
-
and links to `
|
70
|
+
and links to `libprism.a` (to avoid exporting symbols, so no conflict when installing the prism gem).
|
71
71
|
|
72
72
|
### Building prism as part of JRuby
|
73
73
|
|
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
|
|
@@ -10,7 +9,7 @@ All of the source files match `src/**/*.c` and all of the headers match `include
|
|
10
9
|
The following flags should be used to compile prism:
|
11
10
|
|
12
11
|
* `-std=c99` - Use the C99 standard
|
13
|
-
* `-Wall -Wconversion -Wextra -Wpedantic -Wundef` - Enable the warnings we care about
|
12
|
+
* `-Wall -Wconversion -Wextra -Wpedantic -Wundef -Wno-missing-braces` - Enable the warnings we care about
|
14
13
|
* `-Werror` - Treat warnings as errors
|
15
14
|
* `-fvisibility=hidden` - Hide all symbols by default
|
16
15
|
|
@@ -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
|
+
```
|