parser 2.2.0.pre.2 → 2.2.0.pre.3
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 +10 -0
- data/lib/parser/ruby19.y +19 -2
- data/lib/parser/ruby20.y +19 -2
- data/lib/parser/ruby21.y +19 -2
- data/lib/parser/source/buffer.rb +5 -0
- data/lib/parser/version.rb +1 -1
- data/test/test_diagnostic.rb +4 -2
- data/test/test_diagnostic_engine.rb +1 -1
- data/test/test_parser.rb +2 -2
- data/test/test_source_buffer.rb +13 -0
- data/test/test_source_rewriter.rb +6 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fdd84e2bf0afe8d344da8823488765821b9587d
|
4
|
+
data.tar.gz: ec152fc432ac23d54613a3a525ecc383b541b937
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 348b7a975ec3011a255009d9d0f02942c2cfaeb5515f39648b16673a8226a60b88bd00ab2b6cc47f67bc9001e6b26ab1c28cf938854c0dcaf910dfa40eb133ab
|
7
|
+
data.tar.gz: a53e9736e8aeaf38714ddd5944d349a36104eb288190dacac123770b2d7f41cc1dc7484d8562ab1a10cc6c01beea9337ddecb591df520da93ec9df5b05db953d
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
v2.2.0.pre.3 (2014-06-30)
|
5
|
+
-------------------------
|
6
|
+
|
7
|
+
Features implemented:
|
8
|
+
* Raise EncodingError when source includes invalid byte sequence (Yuji Nakayama)
|
9
|
+
|
10
|
+
Bugs fixed:
|
11
|
+
* ruby{19,20,21}.y: "x def y; z do end end": save cmdarg stack to isolate command argument state from outer scope. (Peter Zotov)
|
12
|
+
* ruby{19,20,21}.y: "tap (proc do end)": allow parenthesed do-block in cmdarg. (Peter Zotov)
|
13
|
+
|
4
14
|
v2.2.0.pre.2 (2014-06-14)
|
5
15
|
-------------------------
|
6
16
|
|
data/lib/parser/ruby19.y
CHANGED
@@ -931,13 +931,20 @@ rule
|
|
931
931
|
{
|
932
932
|
result = @builder.begin_keyword(val[0], val[1], val[2])
|
933
933
|
}
|
934
|
-
| tLPAREN_ARG
|
934
|
+
| tLPAREN_ARG
|
935
|
+
{
|
936
|
+
result = @lexer.cmdarg.dup
|
937
|
+
@lexer.cmdarg.clear
|
938
|
+
}
|
939
|
+
expr
|
935
940
|
{
|
936
941
|
@lexer.state = :expr_endarg
|
937
942
|
}
|
938
943
|
opt_nl tRPAREN
|
939
944
|
{
|
940
|
-
|
945
|
+
@lexer.cmdarg = val[1]
|
946
|
+
|
947
|
+
result = @builder.begin(val[0], val[2], val[5])
|
941
948
|
}
|
942
949
|
| tLPAREN compstmt tRPAREN
|
943
950
|
{
|
@@ -1084,6 +1091,7 @@ rule
|
|
1084
1091
|
| kCLASS cpath superclass
|
1085
1092
|
{
|
1086
1093
|
@static_env.extend_static
|
1094
|
+
@lexer.push_cmdarg
|
1087
1095
|
}
|
1088
1096
|
bodystmt kEND
|
1089
1097
|
{
|
@@ -1096,6 +1104,7 @@ rule
|
|
1096
1104
|
lt_t, superclass,
|
1097
1105
|
val[4], val[5])
|
1098
1106
|
|
1107
|
+
@lexer.pop_cmdarg
|
1099
1108
|
@static_env.unextend
|
1100
1109
|
}
|
1101
1110
|
| kCLASS tLSHFT expr term
|
@@ -1104,12 +1113,14 @@ rule
|
|
1104
1113
|
@def_level = 0
|
1105
1114
|
|
1106
1115
|
@static_env.extend_static
|
1116
|
+
@lexer.push_cmdarg
|
1107
1117
|
}
|
1108
1118
|
bodystmt kEND
|
1109
1119
|
{
|
1110
1120
|
result = @builder.def_sclass(val[0], val[1], val[2],
|
1111
1121
|
val[5], val[6])
|
1112
1122
|
|
1123
|
+
@lexer.pop_cmdarg
|
1113
1124
|
@static_env.unextend
|
1114
1125
|
|
1115
1126
|
@def_level = val[4]
|
@@ -1117,6 +1128,7 @@ rule
|
|
1117
1128
|
| kMODULE cpath
|
1118
1129
|
{
|
1119
1130
|
@static_env.extend_static
|
1131
|
+
@lexer.push_cmdarg
|
1120
1132
|
}
|
1121
1133
|
bodystmt kEND
|
1122
1134
|
{
|
@@ -1127,18 +1139,21 @@ rule
|
|
1127
1139
|
result = @builder.def_module(val[0], val[1],
|
1128
1140
|
val[3], val[4])
|
1129
1141
|
|
1142
|
+
@lexer.pop_cmdarg
|
1130
1143
|
@static_env.unextend
|
1131
1144
|
}
|
1132
1145
|
| kDEF fname
|
1133
1146
|
{
|
1134
1147
|
@def_level += 1
|
1135
1148
|
@static_env.extend_static
|
1149
|
+
@lexer.push_cmdarg
|
1136
1150
|
}
|
1137
1151
|
f_arglist bodystmt kEND
|
1138
1152
|
{
|
1139
1153
|
result = @builder.def_method(val[0], val[1],
|
1140
1154
|
val[3], val[4], val[5])
|
1141
1155
|
|
1156
|
+
@lexer.pop_cmdarg
|
1142
1157
|
@static_env.unextend
|
1143
1158
|
@def_level -= 1
|
1144
1159
|
}
|
@@ -1150,12 +1165,14 @@ rule
|
|
1150
1165
|
{
|
1151
1166
|
@def_level += 1
|
1152
1167
|
@static_env.extend_static
|
1168
|
+
@lexer.push_cmdarg
|
1153
1169
|
}
|
1154
1170
|
f_arglist bodystmt kEND
|
1155
1171
|
{
|
1156
1172
|
result = @builder.def_singleton(val[0], val[1], val[2],
|
1157
1173
|
val[4], val[6], val[7], val[8])
|
1158
1174
|
|
1175
|
+
@lexer.pop_cmdarg
|
1159
1176
|
@static_env.unextend
|
1160
1177
|
@def_level -= 1
|
1161
1178
|
}
|
data/lib/parser/ruby20.y
CHANGED
@@ -951,13 +951,20 @@ rule
|
|
951
951
|
|
952
952
|
result = @builder.begin_keyword(val[0], val[2], val[3])
|
953
953
|
}
|
954
|
-
| tLPAREN_ARG
|
954
|
+
| tLPAREN_ARG
|
955
|
+
{
|
956
|
+
result = @lexer.cmdarg.dup
|
957
|
+
@lexer.cmdarg.clear
|
958
|
+
}
|
959
|
+
expr
|
955
960
|
{
|
956
961
|
@lexer.state = :expr_endarg
|
957
962
|
}
|
958
963
|
opt_nl tRPAREN
|
959
964
|
{
|
960
|
-
|
965
|
+
@lexer.cmdarg = val[1]
|
966
|
+
|
967
|
+
result = @builder.begin(val[0], val[2], val[5])
|
961
968
|
}
|
962
969
|
| tLPAREN_ARG
|
963
970
|
{
|
@@ -1112,6 +1119,7 @@ rule
|
|
1112
1119
|
| kCLASS cpath superclass
|
1113
1120
|
{
|
1114
1121
|
@static_env.extend_static
|
1122
|
+
@lexer.push_cmdarg
|
1115
1123
|
}
|
1116
1124
|
bodystmt kEND
|
1117
1125
|
{
|
@@ -1124,6 +1132,7 @@ rule
|
|
1124
1132
|
lt_t, superclass,
|
1125
1133
|
val[4], val[5])
|
1126
1134
|
|
1135
|
+
@lexer.pop_cmdarg
|
1127
1136
|
@static_env.unextend
|
1128
1137
|
}
|
1129
1138
|
| kCLASS tLSHFT expr term
|
@@ -1132,12 +1141,14 @@ rule
|
|
1132
1141
|
@def_level = 0
|
1133
1142
|
|
1134
1143
|
@static_env.extend_static
|
1144
|
+
@lexer.push_cmdarg
|
1135
1145
|
}
|
1136
1146
|
bodystmt kEND
|
1137
1147
|
{
|
1138
1148
|
result = @builder.def_sclass(val[0], val[1], val[2],
|
1139
1149
|
val[5], val[6])
|
1140
1150
|
|
1151
|
+
@lexer.pop_cmdarg
|
1141
1152
|
@static_env.unextend
|
1142
1153
|
|
1143
1154
|
@def_level = val[4]
|
@@ -1145,6 +1156,7 @@ rule
|
|
1145
1156
|
| kMODULE cpath
|
1146
1157
|
{
|
1147
1158
|
@static_env.extend_static
|
1159
|
+
@lexer.push_cmdarg
|
1148
1160
|
}
|
1149
1161
|
bodystmt kEND
|
1150
1162
|
{
|
@@ -1155,18 +1167,21 @@ rule
|
|
1155
1167
|
result = @builder.def_module(val[0], val[1],
|
1156
1168
|
val[3], val[4])
|
1157
1169
|
|
1170
|
+
@lexer.pop_cmdarg
|
1158
1171
|
@static_env.unextend
|
1159
1172
|
}
|
1160
1173
|
| kDEF fname
|
1161
1174
|
{
|
1162
1175
|
@def_level += 1
|
1163
1176
|
@static_env.extend_static
|
1177
|
+
@lexer.push_cmdarg
|
1164
1178
|
}
|
1165
1179
|
f_arglist bodystmt kEND
|
1166
1180
|
{
|
1167
1181
|
result = @builder.def_method(val[0], val[1],
|
1168
1182
|
val[3], val[4], val[5])
|
1169
1183
|
|
1184
|
+
@lexer.pop_cmdarg
|
1170
1185
|
@static_env.unextend
|
1171
1186
|
@def_level -= 1
|
1172
1187
|
}
|
@@ -1178,12 +1193,14 @@ rule
|
|
1178
1193
|
{
|
1179
1194
|
@def_level += 1
|
1180
1195
|
@static_env.extend_static
|
1196
|
+
@lexer.push_cmdarg
|
1181
1197
|
}
|
1182
1198
|
f_arglist bodystmt kEND
|
1183
1199
|
{
|
1184
1200
|
result = @builder.def_singleton(val[0], val[1], val[2],
|
1185
1201
|
val[4], val[6], val[7], val[8])
|
1186
1202
|
|
1203
|
+
@lexer.pop_cmdarg
|
1187
1204
|
@static_env.unextend
|
1188
1205
|
@def_level -= 1
|
1189
1206
|
}
|
data/lib/parser/ruby21.y
CHANGED
@@ -941,13 +941,20 @@ rule
|
|
941
941
|
|
942
942
|
result = @builder.begin_keyword(val[0], val[2], val[3])
|
943
943
|
}
|
944
|
-
| tLPAREN_ARG
|
944
|
+
| tLPAREN_ARG
|
945
|
+
{
|
946
|
+
result = @lexer.cmdarg.dup
|
947
|
+
@lexer.cmdarg.clear
|
948
|
+
}
|
949
|
+
expr
|
945
950
|
{
|
946
951
|
@lexer.state = :expr_endarg
|
947
952
|
}
|
948
953
|
opt_nl tRPAREN
|
949
954
|
{
|
950
|
-
|
955
|
+
@lexer.cmdarg = val[1]
|
956
|
+
|
957
|
+
result = @builder.begin(val[0], val[2], val[5])
|
951
958
|
}
|
952
959
|
| tLPAREN_ARG
|
953
960
|
{
|
@@ -1102,6 +1109,7 @@ rule
|
|
1102
1109
|
| kCLASS cpath superclass
|
1103
1110
|
{
|
1104
1111
|
@static_env.extend_static
|
1112
|
+
@lexer.push_cmdarg
|
1105
1113
|
}
|
1106
1114
|
bodystmt kEND
|
1107
1115
|
{
|
@@ -1114,6 +1122,7 @@ rule
|
|
1114
1122
|
lt_t, superclass,
|
1115
1123
|
val[4], val[5])
|
1116
1124
|
|
1125
|
+
@lexer.pop_cmdarg
|
1117
1126
|
@static_env.unextend
|
1118
1127
|
}
|
1119
1128
|
| kCLASS tLSHFT expr term
|
@@ -1122,12 +1131,14 @@ rule
|
|
1122
1131
|
@def_level = 0
|
1123
1132
|
|
1124
1133
|
@static_env.extend_static
|
1134
|
+
@lexer.push_cmdarg
|
1125
1135
|
}
|
1126
1136
|
bodystmt kEND
|
1127
1137
|
{
|
1128
1138
|
result = @builder.def_sclass(val[0], val[1], val[2],
|
1129
1139
|
val[5], val[6])
|
1130
1140
|
|
1141
|
+
@lexer.pop_cmdarg
|
1131
1142
|
@static_env.unextend
|
1132
1143
|
|
1133
1144
|
@def_level = val[4]
|
@@ -1135,6 +1146,7 @@ rule
|
|
1135
1146
|
| kMODULE cpath
|
1136
1147
|
{
|
1137
1148
|
@static_env.extend_static
|
1149
|
+
@lexer.push_cmdarg
|
1138
1150
|
}
|
1139
1151
|
bodystmt kEND
|
1140
1152
|
{
|
@@ -1145,18 +1157,21 @@ rule
|
|
1145
1157
|
result = @builder.def_module(val[0], val[1],
|
1146
1158
|
val[3], val[4])
|
1147
1159
|
|
1160
|
+
@lexer.pop_cmdarg
|
1148
1161
|
@static_env.unextend
|
1149
1162
|
}
|
1150
1163
|
| kDEF fname
|
1151
1164
|
{
|
1152
1165
|
@def_level += 1
|
1153
1166
|
@static_env.extend_static
|
1167
|
+
@lexer.push_cmdarg
|
1154
1168
|
}
|
1155
1169
|
f_arglist bodystmt kEND
|
1156
1170
|
{
|
1157
1171
|
result = @builder.def_method(val[0], val[1],
|
1158
1172
|
val[3], val[4], val[5])
|
1159
1173
|
|
1174
|
+
@lexer.pop_cmdarg
|
1160
1175
|
@static_env.unextend
|
1161
1176
|
@def_level -= 1
|
1162
1177
|
}
|
@@ -1168,12 +1183,14 @@ rule
|
|
1168
1183
|
{
|
1169
1184
|
@def_level += 1
|
1170
1185
|
@static_env.extend_static
|
1186
|
+
@lexer.push_cmdarg
|
1171
1187
|
}
|
1172
1188
|
f_arglist bodystmt kEND
|
1173
1189
|
{
|
1174
1190
|
result = @builder.def_singleton(val[0], val[1], val[2],
|
1175
1191
|
val[4], val[6], val[7], val[8])
|
1176
1192
|
|
1193
|
+
@lexer.pop_cmdarg
|
1177
1194
|
@static_env.unextend
|
1178
1195
|
@def_level -= 1
|
1179
1196
|
}
|
data/lib/parser/source/buffer.rb
CHANGED
@@ -145,12 +145,17 @@ module Parser
|
|
145
145
|
#
|
146
146
|
# @param [String] input
|
147
147
|
# @raise [ArgumentError] if already populated
|
148
|
+
# @raise [EncodingError] if `input` includes invalid byte sequence for the encoding
|
148
149
|
# @return [String]
|
149
150
|
#
|
150
151
|
def source=(input)
|
151
152
|
if defined?(Encoding)
|
152
153
|
input = input.dup if input.frozen?
|
153
154
|
input = self.class.reencode_string(input)
|
155
|
+
|
156
|
+
unless input.valid_encoding?
|
157
|
+
raise EncodingError, "invalid byte sequence in #{input.encoding.name}"
|
158
|
+
end
|
154
159
|
end
|
155
160
|
|
156
161
|
self.raw_source = input
|
data/lib/parser/version.rb
CHANGED
data/test/test_diagnostic.rb
CHANGED
@@ -10,9 +10,11 @@ class TestDiagnostic < Minitest::Test
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_verifies_levels
|
13
|
-
assert_raises ArgumentError
|
14
|
-
Parser::Diagnostic.new(:foobar, :escape_eof, @range1)
|
13
|
+
error = assert_raises ArgumentError do
|
14
|
+
Parser::Diagnostic.new(:foobar, :escape_eof, {}, @range1)
|
15
15
|
end
|
16
|
+
|
17
|
+
assert_match /level/, error.message
|
16
18
|
end
|
17
19
|
|
18
20
|
def test_freezes
|
@@ -32,7 +32,7 @@ class TestDiagnosticEngine < Minitest::Test
|
|
32
32
|
|
33
33
|
error = Parser::Diagnostic.new(:error, :invalid_escape, @buffer, 1..2)
|
34
34
|
|
35
|
-
err = assert_raises Parser::SyntaxError
|
35
|
+
err = assert_raises Parser::SyntaxError do
|
36
36
|
@engine.process(error)
|
37
37
|
end
|
38
38
|
|
data/test/test_parser.rb
CHANGED
@@ -4796,7 +4796,7 @@ class TestParser < Minitest::Test
|
|
4796
4796
|
nil))),
|
4797
4797
|
%q{bar def foo; self.each do end end},
|
4798
4798
|
%q{},
|
4799
|
-
ALL_VERSIONS - %w(1.8
|
4799
|
+
ALL_VERSIONS - %w(1.8))
|
4800
4800
|
end
|
4801
4801
|
|
4802
4802
|
def test_bug_do_block_in_cmdarg
|
@@ -4809,7 +4809,7 @@ class TestParser < Minitest::Test
|
|
4809
4809
|
s(:args), nil))),
|
4810
4810
|
%q{tap (proc do end)},
|
4811
4811
|
%q{},
|
4812
|
-
ALL_VERSIONS - %w(1.8
|
4812
|
+
ALL_VERSIONS - %w(1.8))
|
4813
4813
|
end
|
4814
4814
|
|
4815
4815
|
def test_bug_interp_single
|
data/test/test_source_buffer.rb
CHANGED
@@ -29,6 +29,19 @@ class TestSourceBuffer < Minitest::Test
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
if defined?(Encoding)
|
33
|
+
def test_source_setter_encoding_error
|
34
|
+
error = assert_raises EncodingError do
|
35
|
+
@buffer.source = [
|
36
|
+
'# encoding: utf-8',
|
37
|
+
"# \xf9"
|
38
|
+
].join("\n")
|
39
|
+
end
|
40
|
+
|
41
|
+
assert_match /invalid byte sequence in UTF\-8/, error.message
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
32
45
|
def test_read
|
33
46
|
tempfile = Tempfile.new('parser')
|
34
47
|
tempfile.write('foobar')
|
@@ -157,20 +157,24 @@ class TestSourceRewriter < Minitest::Test
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def test_nested_transaction_raises_error
|
160
|
-
assert_raises RuntimeError
|
160
|
+
error = assert_raises RuntimeError do
|
161
161
|
@rewriter.transaction do
|
162
162
|
@rewriter.transaction do
|
163
163
|
end
|
164
164
|
end
|
165
165
|
end
|
166
|
+
|
167
|
+
assert_match /nested/i, error.message
|
166
168
|
end
|
167
169
|
|
168
170
|
def test_process_in_transaction_raises_error
|
169
|
-
assert_raises RuntimeError
|
171
|
+
error = assert_raises RuntimeError do
|
170
172
|
@rewriter.transaction do
|
171
173
|
@rewriter.process
|
172
174
|
end
|
173
175
|
end
|
176
|
+
|
177
|
+
assert_match /transaction/, error.message
|
174
178
|
end
|
175
179
|
|
176
180
|
def silence_diagnostics
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.0.pre.
|
4
|
+
version: 2.2.0.pre.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Zotov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ast
|