ruby-next-parser 3.0.1.0 → 3.1.0.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/lib/parser/ruby-next/AST_FORMAT.md +0 -50
- data/lib/parser/ruby-next/ast/processor.rb +0 -4
- data/lib/parser/ruby-next/builder.rb +0 -8
- data/lib/parser/ruby-next/lexer.rb +12253 -11327
- data/lib/parser/ruby-next/lexer.rl +35 -5
- data/lib/parser/ruby-next/meta.rb +1 -1
- data/lib/parser/ruby-next/version.rb +1 -1
- data/lib/parser/rubynext.rb +2692 -2699
- data/lib/parser/rubynext.y +72 -64
- metadata +5 -5
@@ -519,7 +519,8 @@ class Next
|
|
519
519
|
c_nl_zlen = c_nl | zlen;
|
520
520
|
c_line = any - c_nl_zlen;
|
521
521
|
|
522
|
-
|
522
|
+
c_ascii = 0x00..0x7f;
|
523
|
+
c_unicode = c_any - c_ascii;
|
523
524
|
c_upper = [A-Z];
|
524
525
|
c_lower = [a-z_] | c_unicode;
|
525
526
|
c_alpha = c_lower | c_upper;
|
@@ -706,6 +707,11 @@ class Next
|
|
706
707
|
|
707
708
|
action unescape_char {
|
708
709
|
codepoint = @source_pts[p - 1]
|
710
|
+
|
711
|
+
if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
|
712
|
+
diagnostic :fatal, :invalid_escape
|
713
|
+
end
|
714
|
+
|
709
715
|
if (@escape = ESCAPES[codepoint]).nil?
|
710
716
|
@escape = encode_escape(@source_buffer.slice(p - 1))
|
711
717
|
end
|
@@ -733,12 +739,14 @@ class Next
|
|
733
739
|
|
734
740
|
maybe_escaped_char = (
|
735
741
|
'\\' c_any %unescape_char
|
742
|
+
| '\\x' xdigit{1,2} % { @escape = encode_escape(tok(p - 2, p).to_i(16)) } %slash_c_char
|
736
743
|
| ( c_any - [\\] ) %read_post_meta_or_ctrl_char
|
737
744
|
);
|
738
745
|
|
739
746
|
maybe_escaped_ctrl_char = ( # why?!
|
740
747
|
'\\' c_any %unescape_char %slash_c_char
|
741
748
|
| '?' % { @escape = "\x7f" }
|
749
|
+
| '\\x' xdigit{1,2} % { @escape = encode_escape(tok(p - 2, p).to_i(16)) } %slash_c_char
|
742
750
|
| ( c_any - [\\?] ) %read_post_meta_or_ctrl_char %slash_c_char
|
743
751
|
);
|
744
752
|
|
@@ -930,7 +938,7 @@ class Next
|
|
930
938
|
# b"
|
931
939
|
# must be parsed as "ab"
|
932
940
|
current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te)
|
933
|
-
elsif current_literal.regexp?
|
941
|
+
elsif current_literal.regexp? && @version < 31
|
934
942
|
# Regular expressions should include escape sequences in their
|
935
943
|
# escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x")
|
936
944
|
current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te)
|
@@ -1402,7 +1410,7 @@ class Next
|
|
1402
1410
|
':'
|
1403
1411
|
=> { fhold; fgoto expr_beg; };
|
1404
1412
|
|
1405
|
-
'%s'
|
1413
|
+
'%s' (c_ascii - [A-Za-z0-9])
|
1406
1414
|
=> {
|
1407
1415
|
if version?(23)
|
1408
1416
|
type, delimiter = tok[0..-2], tok[-1].chr
|
@@ -1754,14 +1762,14 @@ class Next
|
|
1754
1762
|
};
|
1755
1763
|
|
1756
1764
|
# %<string>
|
1757
|
-
'%' (
|
1765
|
+
'%' ( c_ascii - [A-Za-z0-9] )
|
1758
1766
|
=> {
|
1759
1767
|
type, delimiter = @source_buffer.slice(@ts).chr, tok[-1].chr
|
1760
1768
|
fgoto *push_literal(type, delimiter, @ts);
|
1761
1769
|
};
|
1762
1770
|
|
1763
1771
|
# %w(we are the people)
|
1764
|
-
'%' [A-Za-z]
|
1772
|
+
'%' [A-Za-z] (c_ascii - [A-Za-z0-9])
|
1765
1773
|
=> {
|
1766
1774
|
type, delimiter = tok[0..-2], tok[-1].chr
|
1767
1775
|
fgoto *push_literal(type, delimiter, @ts);
|
@@ -2526,6 +2534,28 @@ class Next
|
|
2526
2534
|
end
|
2527
2535
|
};
|
2528
2536
|
|
2537
|
+
c_space* '..'
|
2538
|
+
=> {
|
2539
|
+
emit(:tNL, nil, @newline_s, @newline_s + 1)
|
2540
|
+
if @version < 27
|
2541
|
+
fhold; fnext line_begin; fbreak;
|
2542
|
+
else
|
2543
|
+
emit(:tBDOT2)
|
2544
|
+
fnext expr_beg; fbreak;
|
2545
|
+
end
|
2546
|
+
};
|
2547
|
+
|
2548
|
+
c_space* '...'
|
2549
|
+
=> {
|
2550
|
+
emit(:tNL, nil, @newline_s, @newline_s + 1)
|
2551
|
+
if @version < 27
|
2552
|
+
fhold; fnext line_begin; fbreak;
|
2553
|
+
else
|
2554
|
+
emit(:tBDOT3)
|
2555
|
+
fnext expr_beg; fbreak;
|
2556
|
+
end
|
2557
|
+
};
|
2558
|
+
|
2529
2559
|
c_space* %{ tm = p } ('.' | '&.')
|
2530
2560
|
=> { p = tm - 1; fgoto expr_end; };
|
2531
2561
|
|
@@ -5,7 +5,7 @@ require "parser/meta"
|
|
5
5
|
module Parser
|
6
6
|
# Parser metadata
|
7
7
|
module Meta
|
8
|
-
NEXT_NODE_TYPES = (NODE_TYPES + %i[meth_ref
|
8
|
+
NEXT_NODE_TYPES = (NODE_TYPES + %i[meth_ref]).to_set.freeze
|
9
9
|
|
10
10
|
remove_const(:NODE_TYPES)
|
11
11
|
const_set(:NODE_TYPES, NEXT_NODE_TYPES)
|