ruby_parser 3.20.2 → 3.20.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
- 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
|