parser 3.0.3.0 → 3.0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|