parser 3.0.2.0 → 3.0.3.0
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 +71 -10
- data/lib/parser/current.rb +3 -3
- data/lib/parser/lexer/dedenter.rb +7 -1
- data/lib/parser/lexer.rb +12144 -11275
- data/lib/parser/messages.rb +2 -0
- data/lib/parser/ruby27.rb +45 -41
- data/lib/parser/ruby30.rb +45 -41
- data/lib/parser/ruby31.rb +2758 -2701
- data/lib/parser/version.rb +1 -1
- metadata +6 -6
data/lib/parser/messages.rb
CHANGED
@@ -76,9 +76,11 @@ module Parser
|
|
76
76
|
:duplicate_variable_name => 'duplicate variable name %{name}',
|
77
77
|
:duplicate_pattern_key => 'duplicate hash pattern key %{name}',
|
78
78
|
:endless_setter => 'setter method cannot be defined in an endless method definition',
|
79
|
+
:invalid_id_to_get => 'identifier %{identifier} is not valid to get',
|
79
80
|
|
80
81
|
# Parser warnings
|
81
82
|
:useless_else => 'else without rescue is useless',
|
83
|
+
:duplicate_hash_key => 'key is duplicated and overwritten',
|
82
84
|
|
83
85
|
# Parser errors that are not Ruby errors
|
84
86
|
:invalid_encoding => 'literal contains escape sequences incompatible with UTF-8',
|
data/lib/parser/ruby27.rb
CHANGED
@@ -21,6 +21,50 @@ module Parser
|
|
21
21
|
def default_encoding
|
22
22
|
Encoding::UTF_8
|
23
23
|
end
|
24
|
+
|
25
|
+
def try_declare_numparam(node)
|
26
|
+
name = node.children[0]
|
27
|
+
|
28
|
+
if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block?
|
29
|
+
# definitely an implicit param
|
30
|
+
location = node.loc.expression
|
31
|
+
|
32
|
+
if max_numparam_stack.has_ordinary_params?
|
33
|
+
diagnostic :error, :ordinary_param_defined, nil, [nil, location]
|
34
|
+
end
|
35
|
+
|
36
|
+
raw_context = context.stack.dup
|
37
|
+
raw_max_numparam_stack = max_numparam_stack.stack.dup
|
38
|
+
|
39
|
+
# ignore current block scope
|
40
|
+
raw_context.pop
|
41
|
+
raw_max_numparam_stack.pop
|
42
|
+
|
43
|
+
raw_context.reverse_each do |outer_scope|
|
44
|
+
if outer_scope == :block || outer_scope == :lambda
|
45
|
+
outer_scope_has_numparams = raw_max_numparam_stack.pop > 0
|
46
|
+
|
47
|
+
if outer_scope_has_numparams
|
48
|
+
diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location]
|
49
|
+
else
|
50
|
+
# for now it's ok, but an outer scope can also be a block
|
51
|
+
# with numparams, so we need to continue
|
52
|
+
end
|
53
|
+
else
|
54
|
+
# found an outer scope that can't have numparams
|
55
|
+
# like def/class/etc
|
56
|
+
break
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
static_env.declare(name)
|
61
|
+
max_numparam_stack.register(name[1].to_i)
|
62
|
+
|
63
|
+
true
|
64
|
+
else
|
65
|
+
false
|
66
|
+
end
|
67
|
+
end
|
24
68
|
##### State transition tables begin ###
|
25
69
|
|
26
70
|
clist = [
|
@@ -6739,7 +6783,7 @@ def _reduce_522(val, _values, result)
|
|
6739
6783
|
end
|
6740
6784
|
|
6741
6785
|
def _reduce_523(val, _values, result)
|
6742
|
-
result = @builder.match_var(val[0])
|
6786
|
+
result = @builder.assignable(@builder.match_var(val[0]))
|
6743
6787
|
|
6744
6788
|
result
|
6745
6789
|
end
|
@@ -7181,46 +7225,6 @@ def _reduce_596(val, _values, result)
|
|
7181
7225
|
end
|
7182
7226
|
|
7183
7227
|
def _reduce_597(val, _values, result)
|
7184
|
-
if (node = val[0]) && node.type == :ident
|
7185
|
-
name = node.children[0]
|
7186
|
-
|
7187
|
-
if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block?
|
7188
|
-
# definitely an implicit param
|
7189
|
-
location = node.loc.expression
|
7190
|
-
|
7191
|
-
if max_numparam_stack.has_ordinary_params?
|
7192
|
-
diagnostic :error, :ordinary_param_defined, nil, [nil, location]
|
7193
|
-
end
|
7194
|
-
|
7195
|
-
raw_context = context.stack.dup
|
7196
|
-
raw_max_numparam_stack = max_numparam_stack.stack.dup
|
7197
|
-
|
7198
|
-
# ignore current block scope
|
7199
|
-
raw_context.pop
|
7200
|
-
raw_max_numparam_stack.pop
|
7201
|
-
|
7202
|
-
raw_context.reverse_each do |outer_scope|
|
7203
|
-
if outer_scope == :block || outer_scope == :lambda
|
7204
|
-
outer_scope_has_numparams = raw_max_numparam_stack.pop > 0
|
7205
|
-
|
7206
|
-
if outer_scope_has_numparams
|
7207
|
-
diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location]
|
7208
|
-
else
|
7209
|
-
# for now it's ok, but an outer scope can also be a block
|
7210
|
-
# with numparams, so we need to continue
|
7211
|
-
end
|
7212
|
-
else
|
7213
|
-
# found an outer scope that can't have numparams
|
7214
|
-
# like def/class/etc
|
7215
|
-
break
|
7216
|
-
end
|
7217
|
-
end
|
7218
|
-
|
7219
|
-
static_env.declare(name)
|
7220
|
-
max_numparam_stack.register(name[1].to_i)
|
7221
|
-
end
|
7222
|
-
end
|
7223
|
-
|
7224
7228
|
result = @builder.accessible(val[0])
|
7225
7229
|
|
7226
7230
|
result
|
data/lib/parser/ruby30.rb
CHANGED
@@ -27,6 +27,50 @@ module Parser
|
|
27
27
|
diagnostic :error, :endless_setter, nil, name_t
|
28
28
|
end
|
29
29
|
end
|
30
|
+
|
31
|
+
def try_declare_numparam(node)
|
32
|
+
name = node.children[0]
|
33
|
+
|
34
|
+
if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block?
|
35
|
+
# definitely an implicit param
|
36
|
+
location = node.loc.expression
|
37
|
+
|
38
|
+
if max_numparam_stack.has_ordinary_params?
|
39
|
+
diagnostic :error, :ordinary_param_defined, nil, [nil, location]
|
40
|
+
end
|
41
|
+
|
42
|
+
raw_context = context.stack.dup
|
43
|
+
raw_max_numparam_stack = max_numparam_stack.stack.dup
|
44
|
+
|
45
|
+
# ignore current block scope
|
46
|
+
raw_context.pop
|
47
|
+
raw_max_numparam_stack.pop
|
48
|
+
|
49
|
+
raw_context.reverse_each do |outer_scope|
|
50
|
+
if outer_scope == :block || outer_scope == :lambda
|
51
|
+
outer_scope_has_numparams = raw_max_numparam_stack.pop > 0
|
52
|
+
|
53
|
+
if outer_scope_has_numparams
|
54
|
+
diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location]
|
55
|
+
else
|
56
|
+
# for now it's ok, but an outer scope can also be a block
|
57
|
+
# with numparams, so we need to continue
|
58
|
+
end
|
59
|
+
else
|
60
|
+
# found an outer scope that can't have numparams
|
61
|
+
# like def/class/etc
|
62
|
+
break
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
static_env.declare(name)
|
67
|
+
max_numparam_stack.register(name[1].to_i)
|
68
|
+
|
69
|
+
true
|
70
|
+
else
|
71
|
+
false
|
72
|
+
end
|
73
|
+
end
|
30
74
|
##### State transition tables begin ###
|
31
75
|
|
32
76
|
clist = [
|
@@ -6932,7 +6976,7 @@ end
|
|
6932
6976
|
# reduce 533 omitted
|
6933
6977
|
|
6934
6978
|
def _reduce_534(val, _values, result)
|
6935
|
-
result = @builder.match_var(val[0])
|
6979
|
+
result = @builder.assignable(@builder.match_var(val[0]))
|
6936
6980
|
|
6937
6981
|
result
|
6938
6982
|
end
|
@@ -7374,46 +7418,6 @@ def _reduce_607(val, _values, result)
|
|
7374
7418
|
end
|
7375
7419
|
|
7376
7420
|
def _reduce_608(val, _values, result)
|
7377
|
-
if (node = val[0]) && node.type == :ident
|
7378
|
-
name = node.children[0]
|
7379
|
-
|
7380
|
-
if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block?
|
7381
|
-
# definitely an implicit param
|
7382
|
-
location = node.loc.expression
|
7383
|
-
|
7384
|
-
if max_numparam_stack.has_ordinary_params?
|
7385
|
-
diagnostic :error, :ordinary_param_defined, nil, [nil, location]
|
7386
|
-
end
|
7387
|
-
|
7388
|
-
raw_context = context.stack.dup
|
7389
|
-
raw_max_numparam_stack = max_numparam_stack.stack.dup
|
7390
|
-
|
7391
|
-
# ignore current block scope
|
7392
|
-
raw_context.pop
|
7393
|
-
raw_max_numparam_stack.pop
|
7394
|
-
|
7395
|
-
raw_context.reverse_each do |outer_scope|
|
7396
|
-
if outer_scope == :block || outer_scope == :lambda
|
7397
|
-
outer_scope_has_numparams = raw_max_numparam_stack.pop > 0
|
7398
|
-
|
7399
|
-
if outer_scope_has_numparams
|
7400
|
-
diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location]
|
7401
|
-
else
|
7402
|
-
# for now it's ok, but an outer scope can also be a block
|
7403
|
-
# with numparams, so we need to continue
|
7404
|
-
end
|
7405
|
-
else
|
7406
|
-
# found an outer scope that can't have numparams
|
7407
|
-
# like def/class/etc
|
7408
|
-
break
|
7409
|
-
end
|
7410
|
-
end
|
7411
|
-
|
7412
|
-
static_env.declare(name)
|
7413
|
-
max_numparam_stack.register(name[1].to_i)
|
7414
|
-
end
|
7415
|
-
end
|
7416
|
-
|
7417
7421
|
result = @builder.accessible(val[0])
|
7418
7422
|
|
7419
7423
|
result
|