psych 3.3.2 → 5.2.2
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/CONTRIBUTING.md +24 -0
- data/README.md +6 -5
- data/ext/psych/depend +13 -1
- data/ext/psych/extconf.rb +40 -30
- data/ext/psych/psych.c +1 -1
- data/ext/psych/psych_emitter.c +155 -120
- data/ext/psych/psych_parser.c +267 -281
- data/lib/psych/class_loader.rb +5 -5
- data/lib/psych/core_ext.rb +1 -1
- data/lib/psych/exception.rb +16 -2
- data/lib/psych/handlers/document_stream.rb +1 -1
- data/lib/psych/handlers/recorder.rb +1 -1
- data/lib/psych/json/stream.rb +2 -2
- data/lib/psych/json/tree_builder.rb +1 -1
- data/lib/psych/nodes/node.rb +5 -5
- data/lib/psych/nodes.rb +7 -7
- data/lib/psych/parser.rb +13 -0
- data/lib/psych/scalar_scanner.rb +24 -19
- data/lib/psych/syntax_error.rb +1 -1
- data/lib/psych/tree_builder.rb +3 -3
- data/lib/psych/versions.rb +2 -2
- data/lib/psych/visitors/json_tree.rb +1 -1
- data/lib/psych/visitors/to_ruby.rb +12 -11
- data/lib/psych/visitors/yaml_tree.rb +71 -27
- data/lib/psych/visitors.rb +6 -6
- data/lib/psych.rb +204 -106
- metadata +37 -25
- data/.gitignore +0 -16
- data/Gemfile +0 -9
- data/Mavenfile +0 -7
- data/Rakefile +0 -41
- data/bin/console +0 -7
- data/bin/setup +0 -6
- data/ext/psych/yaml/LICENSE +0 -19
- data/ext/psych/yaml/api.c +0 -1393
- data/ext/psych/yaml/config.h +0 -80
- data/ext/psych/yaml/dumper.c +0 -394
- data/ext/psych/yaml/emitter.c +0 -2358
- data/ext/psych/yaml/loader.c +0 -544
- data/ext/psych/yaml/parser.c +0 -1375
- data/ext/psych/yaml/reader.c +0 -469
- data/ext/psych/yaml/scanner.c +0 -3598
- data/ext/psych/yaml/writer.c +0 -141
- data/ext/psych/yaml/yaml.h +0 -1985
- data/ext/psych/yaml/yaml_private.h +0 -688
- data/psych.gemspec +0 -67
data/ext/psych/psych_parser.c
CHANGED
@@ -32,9 +32,9 @@ static int io_reader(void * data, unsigned char *buf, size_t size, size_t *read)
|
|
32
32
|
*read = 0;
|
33
33
|
|
34
34
|
if(! NIL_P(string)) {
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
void * str = (void *)StringValuePtr(string);
|
36
|
+
*read = (size_t)RSTRING_LEN(string);
|
37
|
+
memcpy(buf, str, *read);
|
38
38
|
}
|
39
39
|
|
40
40
|
return 1;
|
@@ -79,21 +79,25 @@ static VALUE allocate(VALUE klass)
|
|
79
79
|
|
80
80
|
static VALUE make_exception(yaml_parser_t * parser, VALUE path)
|
81
81
|
{
|
82
|
-
|
83
|
-
|
82
|
+
if (parser->error == YAML_MEMORY_ERROR) {
|
83
|
+
return rb_eNoMemError;
|
84
|
+
} else {
|
85
|
+
size_t line, column;
|
86
|
+
VALUE ePsychSyntaxError;
|
84
87
|
|
85
|
-
|
86
|
-
|
88
|
+
line = parser->context_mark.line + 1;
|
89
|
+
column = parser->context_mark.column + 1;
|
87
90
|
|
88
|
-
|
91
|
+
ePsychSyntaxError = rb_const_get(mPsych, rb_intern("SyntaxError"));
|
89
92
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
93
|
+
return rb_funcall(ePsychSyntaxError, rb_intern("new"), 6,
|
94
|
+
path,
|
95
|
+
SIZET2NUM(line),
|
96
|
+
SIZET2NUM(column),
|
97
|
+
SIZET2NUM(parser->problem_offset),
|
98
|
+
parser->problem ? rb_usascii_str_new2(parser->problem) : Qnil,
|
99
|
+
parser->context ? rb_usascii_str_new2(parser->context) : Qnil);
|
100
|
+
}
|
97
101
|
}
|
98
102
|
|
99
103
|
static VALUE transcode_string(VALUE src, int * parser_encoding)
|
@@ -104,18 +108,18 @@ static VALUE transcode_string(VALUE src, int * parser_encoding)
|
|
104
108
|
int source_encoding = rb_enc_get_index(src);
|
105
109
|
|
106
110
|
if (source_encoding == utf8) {
|
107
|
-
|
108
|
-
|
111
|
+
*parser_encoding = YAML_UTF8_ENCODING;
|
112
|
+
return src;
|
109
113
|
}
|
110
114
|
|
111
115
|
if (source_encoding == utf16le) {
|
112
|
-
|
113
|
-
|
116
|
+
*parser_encoding = YAML_UTF16LE_ENCODING;
|
117
|
+
return src;
|
114
118
|
}
|
115
119
|
|
116
120
|
if (source_encoding == utf16be) {
|
117
|
-
|
118
|
-
|
121
|
+
*parser_encoding = YAML_UTF16BE_ENCODING;
|
122
|
+
return src;
|
119
123
|
}
|
120
124
|
|
121
125
|
src = rb_str_export_to_enc(src, rb_utf8_encoding());
|
@@ -134,36 +138,36 @@ static VALUE transcode_io(VALUE src, int * parser_encoding)
|
|
134
138
|
|
135
139
|
/* if no encoding is returned, assume ascii8bit. */
|
136
140
|
if (NIL_P(io_external_encoding)) {
|
137
|
-
|
141
|
+
io_external_enc_index = rb_ascii8bit_encindex();
|
138
142
|
} else {
|
139
|
-
|
143
|
+
io_external_enc_index = rb_to_encoding_index(io_external_encoding);
|
140
144
|
}
|
141
145
|
|
142
146
|
/* Treat US-ASCII as utf_8 */
|
143
147
|
if (io_external_enc_index == rb_usascii_encindex()) {
|
144
|
-
|
145
|
-
|
148
|
+
*parser_encoding = YAML_UTF8_ENCODING;
|
149
|
+
return src;
|
146
150
|
}
|
147
151
|
|
148
152
|
if (io_external_enc_index == rb_utf8_encindex()) {
|
149
|
-
|
150
|
-
|
153
|
+
*parser_encoding = YAML_UTF8_ENCODING;
|
154
|
+
return src;
|
151
155
|
}
|
152
156
|
|
153
157
|
if (io_external_enc_index == rb_enc_find_index("UTF-16LE")) {
|
154
|
-
|
155
|
-
|
158
|
+
*parser_encoding = YAML_UTF16LE_ENCODING;
|
159
|
+
return src;
|
156
160
|
}
|
157
161
|
|
158
162
|
if (io_external_enc_index == rb_enc_find_index("UTF-16BE")) {
|
159
|
-
|
160
|
-
|
163
|
+
*parser_encoding = YAML_UTF16BE_ENCODING;
|
164
|
+
return src;
|
161
165
|
}
|
162
166
|
|
163
167
|
/* Just guess on ASCII-8BIT */
|
164
168
|
if (io_external_enc_index == rb_ascii8bit_encindex()) {
|
165
|
-
|
166
|
-
|
169
|
+
*parser_encoding = YAML_ANY_ENCODING;
|
170
|
+
return src;
|
167
171
|
}
|
168
172
|
|
169
173
|
/* If the external encoding is something we don't know how to handle,
|
@@ -241,18 +245,8 @@ static VALUE protected_event_location(VALUE pointer)
|
|
241
245
|
return rb_funcall3(args[0], id_event_location, 4, args + 1);
|
242
246
|
}
|
243
247
|
|
244
|
-
|
245
|
-
* call-seq:
|
246
|
-
* parser.parse(yaml)
|
247
|
-
*
|
248
|
-
* Parse the YAML document contained in +yaml+. Events will be called on
|
249
|
-
* the handler set on the parser instance.
|
250
|
-
*
|
251
|
-
* See Psych::Parser and Psych::Parser#handler
|
252
|
-
*/
|
253
|
-
static VALUE parse(int argc, VALUE *argv, VALUE self)
|
248
|
+
static VALUE parse(VALUE self, VALUE handler, VALUE yaml, VALUE path)
|
254
249
|
{
|
255
|
-
VALUE yaml, path;
|
256
250
|
yaml_parser_t * parser;
|
257
251
|
yaml_event_t event;
|
258
252
|
int done = 0;
|
@@ -260,14 +254,6 @@ static VALUE parse(int argc, VALUE *argv, VALUE self)
|
|
260
254
|
int parser_encoding = YAML_ANY_ENCODING;
|
261
255
|
int encoding = rb_utf8_encindex();
|
262
256
|
rb_encoding * internal_enc = rb_default_internal_encoding();
|
263
|
-
VALUE handler = rb_iv_get(self, "@handler");
|
264
|
-
|
265
|
-
if (rb_scan_args(argc, argv, "11", &yaml, &path) == 1) {
|
266
|
-
if(rb_respond_to(yaml, id_path))
|
267
|
-
path = rb_funcall(yaml, id_path, 0);
|
268
|
-
else
|
269
|
-
path = rb_str_new2("<unknown>");
|
270
|
-
}
|
271
257
|
|
272
258
|
TypedData_Get_Struct(self, yaml_parser_t, &psych_parser_type, parser);
|
273
259
|
|
@@ -275,238 +261,238 @@ static VALUE parse(int argc, VALUE *argv, VALUE self)
|
|
275
261
|
yaml_parser_initialize(parser);
|
276
262
|
|
277
263
|
if (rb_respond_to(yaml, id_read)) {
|
278
|
-
|
279
|
-
|
280
|
-
|
264
|
+
yaml = transcode_io(yaml, &parser_encoding);
|
265
|
+
yaml_parser_set_encoding(parser, parser_encoding);
|
266
|
+
yaml_parser_set_input(parser, io_reader, (void *)yaml);
|
281
267
|
} else {
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
268
|
+
StringValue(yaml);
|
269
|
+
yaml = transcode_string(yaml, &parser_encoding);
|
270
|
+
yaml_parser_set_encoding(parser, parser_encoding);
|
271
|
+
yaml_parser_set_input_string(
|
272
|
+
parser,
|
273
|
+
(const unsigned char *)RSTRING_PTR(yaml),
|
274
|
+
(size_t)RSTRING_LEN(yaml)
|
275
|
+
);
|
290
276
|
}
|
291
277
|
|
292
278
|
while(!done) {
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
279
|
+
VALUE event_args[5];
|
280
|
+
VALUE start_line, start_column, end_line, end_column;
|
281
|
+
|
282
|
+
if(parser->error || !yaml_parser_parse(parser, &event)) {
|
283
|
+
VALUE exception;
|
284
|
+
|
285
|
+
exception = make_exception(parser, path);
|
286
|
+
yaml_parser_delete(parser);
|
287
|
+
yaml_parser_initialize(parser);
|
288
|
+
|
289
|
+
rb_exc_raise(exception);
|
290
|
+
}
|
291
|
+
|
292
|
+
start_line = SIZET2NUM(event.start_mark.line);
|
293
|
+
start_column = SIZET2NUM(event.start_mark.column);
|
294
|
+
end_line = SIZET2NUM(event.end_mark.line);
|
295
|
+
end_column = SIZET2NUM(event.end_mark.column);
|
296
|
+
|
297
|
+
event_args[0] = handler;
|
298
|
+
event_args[1] = start_line;
|
299
|
+
event_args[2] = start_column;
|
300
|
+
event_args[3] = end_line;
|
301
|
+
event_args[4] = end_column;
|
302
|
+
rb_protect(protected_event_location, (VALUE)event_args, &state);
|
303
|
+
|
304
|
+
switch(event.type) {
|
305
|
+
case YAML_STREAM_START_EVENT:
|
306
|
+
{
|
307
|
+
VALUE args[2];
|
308
|
+
|
309
|
+
args[0] = handler;
|
310
|
+
args[1] = INT2NUM(event.data.stream_start.encoding);
|
311
|
+
rb_protect(protected_start_stream, (VALUE)args, &state);
|
312
|
+
}
|
313
|
+
break;
|
314
|
+
case YAML_DOCUMENT_START_EVENT:
|
315
|
+
{
|
316
|
+
VALUE args[4];
|
317
|
+
/* Get a list of tag directives (if any) */
|
318
|
+
VALUE tag_directives = rb_ary_new();
|
319
|
+
/* Grab the document version */
|
320
|
+
VALUE version = event.data.document_start.version_directive ?
|
321
|
+
rb_ary_new3(
|
322
|
+
(long)2,
|
323
|
+
INT2NUM(event.data.document_start.version_directive->major),
|
324
|
+
INT2NUM(event.data.document_start.version_directive->minor)
|
325
|
+
) : rb_ary_new();
|
326
|
+
|
327
|
+
if(event.data.document_start.tag_directives.start) {
|
328
|
+
yaml_tag_directive_t *start =
|
329
|
+
event.data.document_start.tag_directives.start;
|
330
|
+
yaml_tag_directive_t *end =
|
331
|
+
event.data.document_start.tag_directives.end;
|
332
|
+
for(; start != end; start++) {
|
333
|
+
VALUE handle = Qnil;
|
334
|
+
VALUE prefix = Qnil;
|
335
|
+
if(start->handle) {
|
336
|
+
handle = rb_str_new2((const char *)start->handle);
|
337
|
+
PSYCH_TRANSCODE(handle, encoding, internal_enc);
|
338
|
+
}
|
339
|
+
|
340
|
+
if(start->prefix) {
|
341
|
+
prefix = rb_str_new2((const char *)start->prefix);
|
342
|
+
PSYCH_TRANSCODE(prefix, encoding, internal_enc);
|
343
|
+
}
|
344
|
+
|
345
|
+
rb_ary_push(tag_directives, rb_ary_new3((long)2, handle, prefix));
|
346
|
+
}
|
347
|
+
}
|
348
|
+
args[0] = handler;
|
349
|
+
args[1] = version;
|
350
|
+
args[2] = tag_directives;
|
351
|
+
args[3] = event.data.document_start.implicit == 1 ? Qtrue : Qfalse;
|
352
|
+
rb_protect(protected_start_document, (VALUE)args, &state);
|
353
|
+
}
|
354
|
+
break;
|
355
|
+
case YAML_DOCUMENT_END_EVENT:
|
356
|
+
{
|
357
|
+
VALUE args[2];
|
358
|
+
|
359
|
+
args[0] = handler;
|
360
|
+
args[1] = event.data.document_end.implicit == 1 ? Qtrue : Qfalse;
|
361
|
+
rb_protect(protected_end_document, (VALUE)args, &state);
|
362
|
+
}
|
363
|
+
break;
|
364
|
+
case YAML_ALIAS_EVENT:
|
365
|
+
{
|
366
|
+
VALUE args[2];
|
367
|
+
VALUE alias = Qnil;
|
368
|
+
if(event.data.alias.anchor) {
|
369
|
+
alias = rb_str_new2((const char *)event.data.alias.anchor);
|
370
|
+
PSYCH_TRANSCODE(alias, encoding, internal_enc);
|
371
|
+
}
|
372
|
+
|
373
|
+
args[0] = handler;
|
374
|
+
args[1] = alias;
|
375
|
+
rb_protect(protected_alias, (VALUE)args, &state);
|
376
|
+
}
|
377
|
+
break;
|
378
|
+
case YAML_SCALAR_EVENT:
|
379
|
+
{
|
380
|
+
VALUE args[7];
|
381
|
+
VALUE anchor = Qnil;
|
382
|
+
VALUE tag = Qnil;
|
383
|
+
VALUE plain_implicit, quoted_implicit, style;
|
384
|
+
VALUE val = rb_str_new(
|
385
|
+
(const char *)event.data.scalar.value,
|
386
|
+
(long)event.data.scalar.length
|
387
|
+
);
|
388
|
+
|
389
|
+
PSYCH_TRANSCODE(val, encoding, internal_enc);
|
390
|
+
|
391
|
+
if(event.data.scalar.anchor) {
|
392
|
+
anchor = rb_str_new2((const char *)event.data.scalar.anchor);
|
393
|
+
PSYCH_TRANSCODE(anchor, encoding, internal_enc);
|
394
|
+
}
|
395
|
+
|
396
|
+
if(event.data.scalar.tag) {
|
397
|
+
tag = rb_str_new2((const char *)event.data.scalar.tag);
|
398
|
+
PSYCH_TRANSCODE(tag, encoding, internal_enc);
|
399
|
+
}
|
400
|
+
|
401
|
+
plain_implicit =
|
402
|
+
event.data.scalar.plain_implicit == 0 ? Qfalse : Qtrue;
|
403
|
+
|
404
|
+
quoted_implicit =
|
405
|
+
event.data.scalar.quoted_implicit == 0 ? Qfalse : Qtrue;
|
406
|
+
|
407
|
+
style = INT2NUM(event.data.scalar.style);
|
408
|
+
|
409
|
+
args[0] = handler;
|
410
|
+
args[1] = val;
|
411
|
+
args[2] = anchor;
|
412
|
+
args[3] = tag;
|
413
|
+
args[4] = plain_implicit;
|
414
|
+
args[5] = quoted_implicit;
|
415
|
+
args[6] = style;
|
416
|
+
rb_protect(protected_scalar, (VALUE)args, &state);
|
417
|
+
}
|
418
|
+
break;
|
419
|
+
case YAML_SEQUENCE_START_EVENT:
|
420
|
+
{
|
421
|
+
VALUE args[5];
|
422
|
+
VALUE anchor = Qnil;
|
423
|
+
VALUE tag = Qnil;
|
424
|
+
VALUE implicit, style;
|
425
|
+
if(event.data.sequence_start.anchor) {
|
426
|
+
anchor = rb_str_new2((const char *)event.data.sequence_start.anchor);
|
427
|
+
PSYCH_TRANSCODE(anchor, encoding, internal_enc);
|
428
|
+
}
|
429
|
+
|
430
|
+
tag = Qnil;
|
431
|
+
if(event.data.sequence_start.tag) {
|
432
|
+
tag = rb_str_new2((const char *)event.data.sequence_start.tag);
|
433
|
+
PSYCH_TRANSCODE(tag, encoding, internal_enc);
|
434
|
+
}
|
435
|
+
|
436
|
+
implicit =
|
437
|
+
event.data.sequence_start.implicit == 0 ? Qfalse : Qtrue;
|
438
|
+
|
439
|
+
style = INT2NUM(event.data.sequence_start.style);
|
440
|
+
|
441
|
+
args[0] = handler;
|
442
|
+
args[1] = anchor;
|
443
|
+
args[2] = tag;
|
444
|
+
args[3] = implicit;
|
445
|
+
args[4] = style;
|
446
|
+
|
447
|
+
rb_protect(protected_start_sequence, (VALUE)args, &state);
|
448
|
+
}
|
449
|
+
break;
|
450
|
+
case YAML_SEQUENCE_END_EVENT:
|
451
|
+
rb_protect(protected_end_sequence, handler, &state);
|
452
|
+
break;
|
453
|
+
case YAML_MAPPING_START_EVENT:
|
454
|
+
{
|
455
|
+
VALUE args[5];
|
456
|
+
VALUE anchor = Qnil;
|
457
|
+
VALUE tag = Qnil;
|
458
|
+
VALUE implicit, style;
|
459
|
+
if(event.data.mapping_start.anchor) {
|
460
|
+
anchor = rb_str_new2((const char *)event.data.mapping_start.anchor);
|
461
|
+
PSYCH_TRANSCODE(anchor, encoding, internal_enc);
|
462
|
+
}
|
463
|
+
|
464
|
+
if(event.data.mapping_start.tag) {
|
465
|
+
tag = rb_str_new2((const char *)event.data.mapping_start.tag);
|
466
|
+
PSYCH_TRANSCODE(tag, encoding, internal_enc);
|
467
|
+
}
|
468
|
+
|
469
|
+
implicit =
|
470
|
+
event.data.mapping_start.implicit == 0 ? Qfalse : Qtrue;
|
471
|
+
|
472
|
+
style = INT2NUM(event.data.mapping_start.style);
|
473
|
+
|
474
|
+
args[0] = handler;
|
475
|
+
args[1] = anchor;
|
476
|
+
args[2] = tag;
|
477
|
+
args[3] = implicit;
|
478
|
+
args[4] = style;
|
479
|
+
|
480
|
+
rb_protect(protected_start_mapping, (VALUE)args, &state);
|
481
|
+
}
|
482
|
+
break;
|
483
|
+
case YAML_MAPPING_END_EVENT:
|
484
|
+
rb_protect(protected_end_mapping, handler, &state);
|
485
|
+
break;
|
486
|
+
case YAML_NO_EVENT:
|
487
|
+
rb_protect(protected_empty, handler, &state);
|
488
|
+
break;
|
489
|
+
case YAML_STREAM_END_EVENT:
|
490
|
+
rb_protect(protected_end_stream, handler, &state);
|
491
|
+
done = 1;
|
492
|
+
break;
|
493
|
+
}
|
494
|
+
yaml_event_delete(&event);
|
495
|
+
if (state) rb_jump_tag(state);
|
510
496
|
}
|
511
497
|
|
512
498
|
return self;
|
@@ -558,7 +544,7 @@ void Init_psych_parser(void)
|
|
558
544
|
|
559
545
|
rb_require("psych/syntax_error");
|
560
546
|
|
561
|
-
|
547
|
+
rb_define_private_method(cPsychParser, "_native_parse", parse, 3);
|
562
548
|
rb_define_method(cPsychParser, "mark", mark, 0);
|
563
549
|
|
564
550
|
id_read = rb_intern("read");
|
data/lib/psych/class_loader.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
2
|
+
require_relative 'omap'
|
3
|
+
require_relative 'set'
|
4
4
|
|
5
5
|
module Psych
|
6
6
|
class ClassLoader # :nodoc:
|
@@ -35,7 +35,7 @@ module Psych
|
|
35
35
|
|
36
36
|
constants.each do |const|
|
37
37
|
konst = const_get const
|
38
|
-
class_eval <<~RUBY
|
38
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
39
39
|
def #{const.to_s.downcase}
|
40
40
|
load #{konst.inspect}
|
41
41
|
end
|
@@ -86,7 +86,7 @@ module Psych
|
|
86
86
|
if @symbols.include? sym
|
87
87
|
super
|
88
88
|
else
|
89
|
-
raise DisallowedClass, 'Symbol'
|
89
|
+
raise DisallowedClass.new('load', 'Symbol')
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
@@ -96,7 +96,7 @@ module Psych
|
|
96
96
|
if @classes.include? klassname
|
97
97
|
super
|
98
98
|
else
|
99
|
-
raise DisallowedClass, klassname
|
99
|
+
raise DisallowedClass.new('load', klassname)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|