parser 3.0.3.0 → 3.0.3.1
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/builders/default.rb +28 -4
- data/lib/parser/context.rb +7 -0
- data/lib/parser/lexer.rb +11294 -10975
- data/lib/parser/messages.rb +2 -0
- data/lib/parser/ruby31.rb +3015 -3006
- data/lib/parser/static_environment.rb +9 -0
- data/lib/parser/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77c9eebb09451e4a14705adad346538d2abe88fee102045ea98d041cf39f07d8
|
4
|
+
data.tar.gz: 67e81c519a542b6f8927a3e076280cf1c6fb35c0c5c738fa9f44efefb8a436b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad73beaf5b3110282c673bbbb2566fad13ddbbe92ffa24f52eca02efc8a83f56c504d84dbc4e571ff42a3af6f7762a517c19654c6942775b26330a25ff67fc9b
|
7
|
+
data.tar.gz: d17eaef98d39bfe83f09ed5a7fbcd6bf94eff3d9b85b23f1fd12732f40c965796910184eca6fe9686a62a6f152566c2a72d473a338a7f9903794676d56ca831b
|
@@ -879,8 +879,14 @@ module Parser
|
|
879
879
|
|
880
880
|
def args(begin_t, args, end_t, check_args=true)
|
881
881
|
args = check_duplicate_args(args) if check_args
|
882
|
-
|
883
|
-
|
882
|
+
validate_no_forward_arg_after_restarg(args)
|
883
|
+
|
884
|
+
map = collection_map(begin_t, args, end_t)
|
885
|
+
if !self.class.emit_forward_arg && args.length == 1 && args[0].type == :forward_arg
|
886
|
+
n(:forward_args, [], map)
|
887
|
+
else
|
888
|
+
n(:args, args, map)
|
889
|
+
end
|
884
890
|
end
|
885
891
|
|
886
892
|
def numargs(max_numparam)
|
@@ -967,9 +973,12 @@ module Parser
|
|
967
973
|
end
|
968
974
|
|
969
975
|
def blockarg(amper_t, name_t)
|
970
|
-
|
976
|
+
if !name_t.nil?
|
977
|
+
check_reserved_for_numparam(value(name_t), loc(name_t))
|
978
|
+
end
|
971
979
|
|
972
|
-
|
980
|
+
arg_name = name_t ? value(name_t).to_sym : nil
|
981
|
+
n(:blockarg, [ arg_name ],
|
973
982
|
arg_prefix_map(amper_t, name_t))
|
974
983
|
end
|
975
984
|
|
@@ -1744,6 +1753,21 @@ module Parser
|
|
1744
1753
|
end
|
1745
1754
|
end
|
1746
1755
|
|
1756
|
+
def validate_no_forward_arg_after_restarg(args)
|
1757
|
+
restarg = nil
|
1758
|
+
forward_arg = nil
|
1759
|
+
args.each do |arg|
|
1760
|
+
case arg.type
|
1761
|
+
when :restarg then restarg = arg
|
1762
|
+
when :forward_arg then forward_arg = arg
|
1763
|
+
end
|
1764
|
+
end
|
1765
|
+
|
1766
|
+
if !forward_arg.nil? && !restarg.nil?
|
1767
|
+
diagnostic :error, :forward_arg_after_restarg, nil, forward_arg.loc.expression, [restarg.loc.expression]
|
1768
|
+
end
|
1769
|
+
end
|
1770
|
+
|
1747
1771
|
def check_assignment_to_numparam(name, loc)
|
1748
1772
|
# MRI < 2.7 treats numbered parameters as regular variables
|
1749
1773
|
# and so it's allowed to perform assignments like `_1 = 42`.
|
data/lib/parser/context.rb
CHANGED
@@ -9,6 +9,9 @@ module Parser
|
|
9
9
|
# + :sclass - in the singleton class body (class << obj; end)
|
10
10
|
# + :def - in the method body (def m; end)
|
11
11
|
# + :defs - in the singleton method body (def self.m; end)
|
12
|
+
# + :def_open_args - in the arglist of the method definition
|
13
|
+
# keep in mind that it's set **only** after reducing the first argument,
|
14
|
+
# if you need to handle the first argument check `lex_state == expr_fname`
|
12
15
|
# + :block - in the block body (tap {})
|
13
16
|
# + :lambda - in the lambda body (-> {})
|
14
17
|
#
|
@@ -64,5 +67,9 @@ module Parser
|
|
64
67
|
def in_dynamic_block?
|
65
68
|
in_block? || in_lambda?
|
66
69
|
end
|
70
|
+
|
71
|
+
def in_def_open_args?
|
72
|
+
@stack.last == :def_open_args
|
73
|
+
end
|
67
74
|
end
|
68
75
|
end
|