ruby_parser 3.20.2 → 3.20.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +12 -0
- data/lib/ruby30_parser.rb +27 -4
- data/lib/ruby30_parser.y +24 -2
- data/lib/ruby31_parser.rb +2777 -2669
- data/lib/ruby31_parser.y +25 -3
- data/lib/ruby32_parser.rb +2724 -2706
- data/lib/ruby32_parser.y +25 -3
- data/lib/ruby3_parser.yy +25 -3
- data/lib/ruby_lexer.rb +13 -7
- data/lib/ruby_parser_extras.rb +3 -2
- data/test/test_ruby_parser.rb +8 -0
- data/tools/munge.rb +8 -2
- data/tools/ripper.rb +14 -12
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
data/lib/ruby32_parser.y
CHANGED
@@ -408,6 +408,7 @@ rule
|
|
408
408
|
defs_head: k_def singleton dot_or_colon
|
409
409
|
{
|
410
410
|
lexer.lex_state = EXPR_FNAME
|
411
|
+
self.in_argdef = true
|
411
412
|
}
|
412
413
|
def_name
|
413
414
|
{
|
@@ -1619,6 +1620,7 @@ rule
|
|
1619
1620
|
k_def: kDEF
|
1620
1621
|
{
|
1621
1622
|
self.comments.push self.lexer.comments
|
1623
|
+
self.in_argdef = true
|
1622
1624
|
}
|
1623
1625
|
k_do: kDO
|
1624
1626
|
k_do_block: kDO_BLOCK
|
@@ -1734,7 +1736,7 @@ rule
|
|
1734
1736
|
f_any_kwrest: f_kwrest
|
1735
1737
|
| f_no_kwarg
|
1736
1738
|
|
1737
|
-
f_eq:
|
1739
|
+
f_eq: { self.in_argdef = false } tEQL
|
1738
1740
|
|
1739
1741
|
block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
|
1740
1742
|
{
|
@@ -1838,6 +1840,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1838
1840
|
{
|
1839
1841
|
# TODO: current_arg = 0
|
1840
1842
|
result = args val
|
1843
|
+
self.in_argdef = false
|
1841
1844
|
}
|
1842
1845
|
| tOROP
|
1843
1846
|
{
|
@@ -1849,6 +1852,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1849
1852
|
{
|
1850
1853
|
# TODO: current_arg = 0
|
1851
1854
|
result = args val
|
1855
|
+
self.in_argdef = false
|
1852
1856
|
}
|
1853
1857
|
|
1854
1858
|
opt_bv_decl: opt_nl
|
@@ -1898,10 +1902,12 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1898
1902
|
|
1899
1903
|
f_larglist: tLPAREN2 f_args opt_bv_decl rparen
|
1900
1904
|
{
|
1905
|
+
self.in_argdef = false
|
1901
1906
|
result = args val
|
1902
1907
|
}
|
1903
1908
|
| f_args
|
1904
1909
|
{
|
1910
|
+
self.in_argdef = false
|
1905
1911
|
result = val[0]
|
1906
1912
|
result = 0 if result == s(:args)
|
1907
1913
|
}
|
@@ -3064,11 +3070,13 @@ keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
|
|
3064
3070
|
f_opt_paren_args: f_paren_args
|
3065
3071
|
| none
|
3066
3072
|
{
|
3073
|
+
self.in_argdef = false
|
3067
3074
|
result = end_args val
|
3068
3075
|
}
|
3069
3076
|
|
3070
3077
|
f_paren_args: tLPAREN2 f_args rparen
|
3071
3078
|
{
|
3079
|
+
self.in_argdef = false
|
3072
3080
|
result = end_args val
|
3073
3081
|
}
|
3074
3082
|
|
@@ -3076,10 +3084,12 @@ f_opt_paren_args: f_paren_args
|
|
3076
3084
|
| {
|
3077
3085
|
result = self.in_kwarg
|
3078
3086
|
self.in_kwarg = true
|
3087
|
+
self.in_argdef = true
|
3079
3088
|
self.lexer.lex_state |= EXPR_LABEL
|
3080
3089
|
}
|
3081
3090
|
f_args term
|
3082
3091
|
{
|
3092
|
+
self.in_argdef = false
|
3083
3093
|
result = end_args val
|
3084
3094
|
}
|
3085
3095
|
|
@@ -3236,6 +3246,14 @@ f_opt_paren_args: f_paren_args
|
|
3236
3246
|
}
|
3237
3247
|
|
3238
3248
|
f_label: tLABEL
|
3249
|
+
{
|
3250
|
+
label, = val
|
3251
|
+
# arg_var(p, formal_argument(p, $1));
|
3252
|
+
# p->cur_arg = get_id($1);
|
3253
|
+
# p->max_numparam = ORDINAL_PARAM;
|
3254
|
+
self.in_argdef = false
|
3255
|
+
result = label
|
3256
|
+
}
|
3239
3257
|
|
3240
3258
|
f_kw: f_label arg_value
|
3241
3259
|
{
|
@@ -3244,6 +3262,7 @@ f_opt_paren_args: f_paren_args
|
|
3244
3262
|
|
3245
3263
|
identifier = label.to_sym
|
3246
3264
|
self.env[identifier] = :lvar
|
3265
|
+
self.in_argdef = true
|
3247
3266
|
|
3248
3267
|
kwarg = s(:kwarg, identifier, arg).line line
|
3249
3268
|
result = s(:array, kwarg).line line
|
@@ -3254,6 +3273,7 @@ f_opt_paren_args: f_paren_args
|
|
3254
3273
|
|
3255
3274
|
id = label.to_sym
|
3256
3275
|
self.env[id] = :lvar
|
3276
|
+
self.in_argdef = true
|
3257
3277
|
|
3258
3278
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3259
3279
|
}
|
@@ -3264,6 +3284,7 @@ f_opt_paren_args: f_paren_args
|
|
3264
3284
|
(label, line), expr = val
|
3265
3285
|
id = label.to_sym
|
3266
3286
|
self.env[id] = :lvar
|
3287
|
+
self.in_argdef = true
|
3267
3288
|
|
3268
3289
|
result = s(:array, s(:kwarg, id, expr).line(line)).line line
|
3269
3290
|
}
|
@@ -3273,6 +3294,7 @@ f_opt_paren_args: f_paren_args
|
|
3273
3294
|
(label, line), = val
|
3274
3295
|
id = label.to_sym
|
3275
3296
|
self.env[id] = :lvar
|
3297
|
+
self.in_argdef = true
|
3276
3298
|
|
3277
3299
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3278
3300
|
}
|
@@ -3320,10 +3342,10 @@ f_opt_paren_args: f_paren_args
|
|
3320
3342
|
arg_value
|
3321
3343
|
{
|
3322
3344
|
lhs, _, rhs = val
|
3345
|
+
self.in_argdef = true
|
3323
3346
|
result = self.assignable lhs, rhs
|
3324
3347
|
# TODO: detect duplicate names
|
3325
3348
|
# TODO? p->cur_arg = 0;
|
3326
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3327
3349
|
}
|
3328
3350
|
|
3329
3351
|
f_block_opt: f_arg_asgn
|
@@ -3331,9 +3353,9 @@ f_opt_paren_args: f_paren_args
|
|
3331
3353
|
primary_value
|
3332
3354
|
{
|
3333
3355
|
lhs, _, rhs = val
|
3356
|
+
self.in_argdef = true
|
3334
3357
|
result = self.assignable lhs, rhs
|
3335
3358
|
# TODO? p->cur_arg = 0;
|
3336
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3337
3359
|
}
|
3338
3360
|
|
3339
3361
|
f_block_optarg: f_block_opt
|
data/lib/ruby3_parser.yy
CHANGED
@@ -426,6 +426,7 @@ rule
|
|
426
426
|
defs_head: k_def singleton dot_or_colon
|
427
427
|
{
|
428
428
|
lexer.lex_state = EXPR_FNAME
|
429
|
+
self.in_argdef = true
|
429
430
|
}
|
430
431
|
def_name
|
431
432
|
{
|
@@ -1643,6 +1644,7 @@ rule
|
|
1643
1644
|
k_def: kDEF
|
1644
1645
|
{
|
1645
1646
|
self.comments.push self.lexer.comments
|
1647
|
+
self.in_argdef = true
|
1646
1648
|
}
|
1647
1649
|
k_do: kDO
|
1648
1650
|
k_do_block: kDO_BLOCK
|
@@ -1759,7 +1761,7 @@ rule
|
|
1759
1761
|
| f_no_kwarg
|
1760
1762
|
|
1761
1763
|
#if V > 30
|
1762
|
-
f_eq:
|
1764
|
+
f_eq: { self.in_argdef = false } tEQL
|
1763
1765
|
#endif
|
1764
1766
|
|
1765
1767
|
block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
|
@@ -1864,6 +1866,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1864
1866
|
{
|
1865
1867
|
# TODO: current_arg = 0
|
1866
1868
|
result = args val
|
1869
|
+
self.in_argdef = false
|
1867
1870
|
}
|
1868
1871
|
| tOROP
|
1869
1872
|
{
|
@@ -1875,6 +1878,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1875
1878
|
{
|
1876
1879
|
# TODO: current_arg = 0
|
1877
1880
|
result = args val
|
1881
|
+
self.in_argdef = false
|
1878
1882
|
}
|
1879
1883
|
|
1880
1884
|
opt_bv_decl: opt_nl
|
@@ -1924,10 +1928,12 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1924
1928
|
|
1925
1929
|
f_larglist: tLPAREN2 f_args opt_bv_decl rparen
|
1926
1930
|
{
|
1931
|
+
self.in_argdef = false
|
1927
1932
|
result = args val
|
1928
1933
|
}
|
1929
1934
|
| f_args
|
1930
1935
|
{
|
1936
|
+
self.in_argdef = false
|
1931
1937
|
result = val[0]
|
1932
1938
|
result = 0 if result == s(:args)
|
1933
1939
|
}
|
@@ -3134,11 +3140,13 @@ keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
|
|
3134
3140
|
f_opt_paren_args: f_paren_args
|
3135
3141
|
| none
|
3136
3142
|
{
|
3143
|
+
self.in_argdef = false
|
3137
3144
|
result = end_args val
|
3138
3145
|
}
|
3139
3146
|
|
3140
3147
|
f_paren_args: tLPAREN2 f_args rparen
|
3141
3148
|
{
|
3149
|
+
self.in_argdef = false
|
3142
3150
|
result = end_args val
|
3143
3151
|
}
|
3144
3152
|
#if V == 30
|
@@ -3156,10 +3164,12 @@ f_opt_paren_args: f_paren_args
|
|
3156
3164
|
| {
|
3157
3165
|
result = self.in_kwarg
|
3158
3166
|
self.in_kwarg = true
|
3167
|
+
self.in_argdef = true
|
3159
3168
|
self.lexer.lex_state |= EXPR_LABEL
|
3160
3169
|
}
|
3161
3170
|
f_args term
|
3162
3171
|
{
|
3172
|
+
self.in_argdef = false
|
3163
3173
|
result = end_args val
|
3164
3174
|
}
|
3165
3175
|
|
@@ -3318,6 +3328,14 @@ f_opt_paren_args: f_paren_args
|
|
3318
3328
|
}
|
3319
3329
|
|
3320
3330
|
f_label: tLABEL
|
3331
|
+
{
|
3332
|
+
label, = val
|
3333
|
+
# arg_var(p, formal_argument(p, $1));
|
3334
|
+
# p->cur_arg = get_id($1);
|
3335
|
+
# p->max_numparam = ORDINAL_PARAM;
|
3336
|
+
self.in_argdef = false
|
3337
|
+
result = label
|
3338
|
+
}
|
3321
3339
|
|
3322
3340
|
f_kw: f_label arg_value
|
3323
3341
|
{
|
@@ -3326,6 +3344,7 @@ f_opt_paren_args: f_paren_args
|
|
3326
3344
|
|
3327
3345
|
identifier = label.to_sym
|
3328
3346
|
self.env[identifier] = :lvar
|
3347
|
+
self.in_argdef = true
|
3329
3348
|
|
3330
3349
|
kwarg = s(:kwarg, identifier, arg).line line
|
3331
3350
|
result = s(:array, kwarg).line line
|
@@ -3336,6 +3355,7 @@ f_opt_paren_args: f_paren_args
|
|
3336
3355
|
|
3337
3356
|
id = label.to_sym
|
3338
3357
|
self.env[id] = :lvar
|
3358
|
+
self.in_argdef = true
|
3339
3359
|
|
3340
3360
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3341
3361
|
}
|
@@ -3346,6 +3366,7 @@ f_opt_paren_args: f_paren_args
|
|
3346
3366
|
(label, line), expr = val
|
3347
3367
|
id = label.to_sym
|
3348
3368
|
self.env[id] = :lvar
|
3369
|
+
self.in_argdef = true
|
3349
3370
|
|
3350
3371
|
result = s(:array, s(:kwarg, id, expr).line(line)).line line
|
3351
3372
|
}
|
@@ -3355,6 +3376,7 @@ f_opt_paren_args: f_paren_args
|
|
3355
3376
|
(label, line), = val
|
3356
3377
|
id = label.to_sym
|
3357
3378
|
self.env[id] = :lvar
|
3379
|
+
self.in_argdef = true
|
3358
3380
|
|
3359
3381
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3360
3382
|
}
|
@@ -3406,10 +3428,10 @@ f_opt_paren_args: f_paren_args
|
|
3406
3428
|
arg_value
|
3407
3429
|
{
|
3408
3430
|
lhs, _, rhs = val
|
3431
|
+
self.in_argdef = true
|
3409
3432
|
result = self.assignable lhs, rhs
|
3410
3433
|
# TODO: detect duplicate names
|
3411
3434
|
# TODO? p->cur_arg = 0;
|
3412
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3413
3435
|
}
|
3414
3436
|
|
3415
3437
|
f_block_opt: f_arg_asgn
|
@@ -3421,9 +3443,9 @@ f_opt_paren_args: f_paren_args
|
|
3421
3443
|
primary_value
|
3422
3444
|
{
|
3423
3445
|
lhs, _, rhs = val
|
3446
|
+
self.in_argdef = true
|
3424
3447
|
result = self.assignable lhs, rhs
|
3425
3448
|
# TODO? p->cur_arg = 0;
|
3426
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3427
3449
|
}
|
3428
3450
|
|
3429
3451
|
f_block_optarg: f_block_opt
|
data/lib/ruby_lexer.rb
CHANGED
@@ -117,7 +117,7 @@ class RubyLexer
|
|
117
117
|
|
118
118
|
def initialize _ = nil
|
119
119
|
@lex_state = nil # remove one warning under $DEBUG
|
120
|
-
|
120
|
+
@lex_state = EXPR_NONE
|
121
121
|
|
122
122
|
self.cond = RubyParserStuff::StackState.new(:cond, $DEBUG)
|
123
123
|
self.cmdarg = RubyParserStuff::StackState.new(:cmdarg, $DEBUG)
|
@@ -355,8 +355,14 @@ class RubyLexer
|
|
355
355
|
end
|
356
356
|
end
|
357
357
|
|
358
|
-
def process_dots text
|
359
|
-
|
358
|
+
def process_dots text # parse32.y:10216
|
359
|
+
is_beg = self.is_beg?
|
360
|
+
self.lex_state = EXPR_BEG
|
361
|
+
|
362
|
+
return result EXPR_ENDARG, :tBDOT3, text if
|
363
|
+
parser.in_argdef && text == "..." # TODO: version check?
|
364
|
+
|
365
|
+
tokens = ruby27plus? && is_beg ? BTOKENS : TOKENS
|
360
366
|
|
361
367
|
result EXPR_BEG, tokens[text], text
|
362
368
|
end
|
@@ -689,7 +695,7 @@ class RubyLexer
|
|
689
695
|
return process_token_keyword keyword if keyword
|
690
696
|
end
|
691
697
|
|
692
|
-
# matching: compare/
|
698
|
+
# matching: compare/parse32.y:9031
|
693
699
|
state = if lex_state =~ EXPR_BEG_ANY|EXPR_ARG_ANY|EXPR_DOT then
|
694
700
|
cmd_state ? EXPR_CMDARG : EXPR_ARG
|
695
701
|
elsif lex_state =~ EXPR_FNAME then
|
@@ -711,7 +717,7 @@ class RubyLexer
|
|
711
717
|
end
|
712
718
|
|
713
719
|
def process_token_keyword keyword
|
714
|
-
# matching MIDDLE of parse_ident in compare/
|
720
|
+
# matching MIDDLE of parse_ident in compare/parse32.y:9695
|
715
721
|
state = lex_state
|
716
722
|
|
717
723
|
return result(EXPR_ENDFN, keyword.id0, token) if lex_state =~ EXPR_FNAME
|
@@ -720,7 +726,7 @@ class RubyLexer
|
|
720
726
|
self.command_start = true if lex_state =~ EXPR_BEG
|
721
727
|
|
722
728
|
case
|
723
|
-
when keyword.id0 == :kDO then #
|
729
|
+
when keyword.id0 == :kDO then # parse32.y line 9712
|
724
730
|
case
|
725
731
|
when lambda_beginning? then
|
726
732
|
self.lpar_beg = nil # lambda_beginning? == FALSE in the body of "-> do ... end"
|
@@ -892,7 +898,7 @@ class RubyLexer
|
|
892
898
|
end
|
893
899
|
|
894
900
|
def inspect
|
895
|
-
return "
|
901
|
+
return "EXPR_NONE" if n.zero? # HACK?
|
896
902
|
|
897
903
|
names.map { |v, k| k if self =~ v }.
|
898
904
|
compact.
|
data/lib/ruby_parser_extras.rb
CHANGED
@@ -30,9 +30,9 @@ class Sexp
|
|
30
30
|
end
|
31
31
|
|
32
32
|
module RubyParserStuff
|
33
|
-
VERSION = "3.20.
|
33
|
+
VERSION = "3.20.3"
|
34
34
|
|
35
|
-
attr_accessor :lexer, :in_def, :in_single, :file
|
35
|
+
attr_accessor :lexer, :in_def, :in_single, :file, :in_argdef
|
36
36
|
attr_accessor :in_kwarg
|
37
37
|
attr_reader :env, :comments
|
38
38
|
|
@@ -122,6 +122,7 @@ module RubyParserStuff
|
|
122
122
|
self.lexer = RubyLexer.new v && v.to_i
|
123
123
|
self.lexer.parser = self
|
124
124
|
self.in_kwarg = false
|
125
|
+
self.in_argdef = false
|
125
126
|
|
126
127
|
@env = RubyParserStuff::Environment.new
|
127
128
|
@comments = []
|
data/test/test_ruby_parser.rb
CHANGED
@@ -5556,6 +5556,14 @@ module TestRubyParserShared31Plus
|
|
5556
5556
|
assert_case_in rb, pt
|
5557
5557
|
end
|
5558
5558
|
|
5559
|
+
def test_defn_forward_args__no_parens
|
5560
|
+
rb = "def f ...\n m(...)\nend"
|
5561
|
+
pt = s(:defn, :f, s(:args, s(:forward_args)),
|
5562
|
+
s(:call, nil, :m, s(:forward_args).line(2)).line(2))
|
5563
|
+
|
5564
|
+
assert_parse rb, pt
|
5565
|
+
end
|
5566
|
+
|
5559
5567
|
def test_case_in_carat_nonlocal_vars
|
5560
5568
|
processor.env[:a] = :lvar
|
5561
5569
|
|
data/tools/munge.rb
CHANGED
@@ -174,6 +174,10 @@ ARGF.each_line do |line|
|
|
174
174
|
last_token = token
|
175
175
|
when /^Reading a token: / then
|
176
176
|
next # skip
|
177
|
+
when /^Reading a token$/ then # wtf?
|
178
|
+
next # skip
|
179
|
+
when /^(?:add_delayed_token|parser_dispatch)/ then # dunno what this is yet
|
180
|
+
next # skip
|
177
181
|
when /^read\s+:(\w+)/ then # read :tNL(tNL) nil
|
178
182
|
token = munge $1
|
179
183
|
next if last_token == token
|
@@ -212,7 +216,9 @@ ARGF.each_line do |line|
|
|
212
216
|
reduce_line = nil
|
213
217
|
stack.clear
|
214
218
|
when /^reduce/ then # ruby_parser side
|
215
|
-
|
219
|
+
s = munge line.chomp
|
220
|
+
next if s =~ /reduce\s+(\w+) --> \1/
|
221
|
+
puts s
|
216
222
|
puts
|
217
223
|
when /^(\w+_stack)\.(\w+)/ then
|
218
224
|
# TODO: make pretty, but still informative w/ line numbers etc
|
@@ -223,7 +229,7 @@ ARGF.each_line do |line|
|
|
223
229
|
# puts line
|
224
230
|
# TODO: make pretty, but still informative w/ line numbers etc
|
225
231
|
puts line.gsub("true", "1").gsub("false", "0")
|
226
|
-
when /^lex_state: :?([\w|]+) -> :?([\w|]+)(?: (?:at|from) (.*))?/ then
|
232
|
+
when /^lex_state: :?([\w|()]+) -> :?([\w|]+)(?: (?:at|from) (.*))?/ then
|
227
233
|
a, b, c = $1.upcase, $2.upcase, $3
|
228
234
|
a.gsub!(/EXPR_/, "")
|
229
235
|
b.gsub!(/EXPR_/, "")
|
data/tools/ripper.rb
CHANGED
@@ -21,18 +21,20 @@ end
|
|
21
21
|
ARGV.each do |path|
|
22
22
|
src = path == "-" ? $stdin.read : File.read(path)
|
23
23
|
|
24
|
-
sexp =
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
24
|
+
sexp = nil
|
25
|
+
|
26
|
+
if $b then
|
27
|
+
sexp = Ripper.sexp src
|
28
|
+
else
|
29
|
+
rip = MySexpBuilder.new src
|
30
|
+
rip.yydebug = $d
|
31
|
+
sexp = rip.parse
|
32
|
+
|
33
|
+
if rip.error? then
|
34
|
+
warn "skipping"
|
35
|
+
next
|
36
|
+
end
|
37
|
+
end
|
36
38
|
|
37
39
|
puts "accept"
|
38
40
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.20.
|
4
|
+
version: 3.20.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
ROfWo9Uyp8ba/j9eVG14KkYRaLydAY1MNQk2yd3R5CGfeOpD1kttxjoypoUJ2dOG
|
30
30
|
nsNBRuQJ1UfiCG97a6DNm+Fr
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2023-
|
32
|
+
date: 2023-07-12 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: sexp_processor
|
metadata.gz.sig
CHANGED
Binary file
|