prism 0.17.1 → 0.19.0
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 +60 -1
- data/Makefile +5 -5
- data/README.md +4 -3
- data/config.yml +214 -68
- data/docs/build_system.md +6 -6
- data/docs/building.md +10 -3
- data/docs/configuration.md +11 -9
- data/docs/encoding.md +92 -88
- data/docs/heredocs.md +1 -1
- data/docs/javascript.md +29 -1
- data/docs/local_variable_depth.md +229 -0
- data/docs/ruby_api.md +16 -0
- data/docs/serialization.md +18 -13
- data/ext/prism/api_node.c +411 -240
- data/ext/prism/extconf.rb +97 -127
- data/ext/prism/extension.c +97 -33
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +377 -159
- data/include/prism/defines.h +17 -0
- data/include/prism/diagnostic.h +38 -6
- data/include/prism/{enc/pm_encoding.h → encoding.h} +126 -64
- data/include/prism/options.h +2 -2
- data/include/prism/parser.h +62 -36
- data/include/prism/regexp.h +2 -2
- data/include/prism/util/pm_buffer.h +9 -1
- data/include/prism/util/pm_memchr.h +2 -2
- data/include/prism/util/pm_strpbrk.h +3 -3
- data/include/prism/version.h +3 -3
- data/include/prism.h +13 -15
- data/lib/prism/compiler.rb +15 -3
- data/lib/prism/debug.rb +13 -4
- data/lib/prism/desugar_compiler.rb +4 -3
- data/lib/prism/dispatcher.rb +70 -14
- data/lib/prism/dot_visitor.rb +4612 -0
- data/lib/prism/dsl.rb +77 -57
- data/lib/prism/ffi.rb +19 -6
- data/lib/prism/lex_compat.rb +19 -9
- data/lib/prism/mutation_compiler.rb +26 -6
- data/lib/prism/node.rb +1314 -522
- data/lib/prism/node_ext.rb +102 -19
- data/lib/prism/parse_result.rb +58 -27
- data/lib/prism/ripper_compat.rb +49 -34
- data/lib/prism/serialize.rb +251 -227
- data/lib/prism/visitor.rb +15 -3
- data/lib/prism.rb +21 -4
- data/prism.gemspec +7 -9
- data/rbi/prism.rbi +688 -284
- data/rbi/prism_static.rbi +3 -0
- data/sig/prism.rbs +426 -156
- data/sig/prism_static.rbs +1 -0
- data/src/diagnostic.c +280 -216
- data/src/encoding.c +5137 -0
- data/src/node.c +99 -21
- data/src/options.c +21 -2
- data/src/prettyprint.c +1743 -1241
- data/src/prism.c +1774 -831
- data/src/regexp.c +15 -15
- data/src/serialize.c +261 -164
- data/src/util/pm_buffer.c +10 -1
- data/src/util/pm_memchr.c +1 -1
- data/src/util/pm_strpbrk.c +4 -4
- metadata +8 -10
- data/src/enc/pm_big5.c +0 -53
- data/src/enc/pm_euc_jp.c +0 -59
- data/src/enc/pm_gbk.c +0 -62
- data/src/enc/pm_shift_jis.c +0 -57
- data/src/enc/pm_tables.c +0 -743
- data/src/enc/pm_unicode.c +0 -2369
- data/src/enc/pm_windows_31j.c +0 -57
data/src/serialize.c
CHANGED
@@ -22,13 +22,13 @@ pm_sizet_to_u32(size_t value) {
|
|
22
22
|
}
|
23
23
|
|
24
24
|
static void
|
25
|
-
pm_serialize_location(pm_parser_t *parser, pm_location_t *location, pm_buffer_t *buffer) {
|
25
|
+
pm_serialize_location(const pm_parser_t *parser, const pm_location_t *location, pm_buffer_t *buffer) {
|
26
26
|
assert(location->start);
|
27
27
|
assert(location->end);
|
28
28
|
assert(location->start <= location->end);
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(location->start - parser->start));
|
31
|
+
pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(location->end - location->start));
|
32
32
|
}
|
33
33
|
|
34
34
|
static void
|
@@ -36,15 +36,15 @@ pm_serialize_string(pm_parser_t *parser, pm_string_t *string, pm_buffer_t *buffe
|
|
36
36
|
switch (string->type) {
|
37
37
|
case PM_STRING_SHARED: {
|
38
38
|
pm_buffer_append_byte(buffer, 1);
|
39
|
-
|
40
|
-
|
39
|
+
pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(pm_string_source(string) - parser->start));
|
40
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(pm_string_length(string)));
|
41
41
|
break;
|
42
42
|
}
|
43
43
|
case PM_STRING_OWNED:
|
44
44
|
case PM_STRING_CONSTANT: {
|
45
45
|
uint32_t length = pm_sizet_to_u32(pm_string_length(string));
|
46
46
|
pm_buffer_append_byte(buffer, 2);
|
47
|
-
|
47
|
+
pm_buffer_append_varuint(buffer, length);
|
48
48
|
pm_buffer_append_bytes(buffer, pm_string_source(string), length);
|
49
49
|
break;
|
50
50
|
}
|
@@ -92,17 +92,18 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
92
92
|
break;
|
93
93
|
}
|
94
94
|
case PM_ARGUMENTS_NODE: {
|
95
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
95
96
|
uint32_t arguments_size = pm_sizet_to_u32(((pm_arguments_node_t *)node)->arguments.size);
|
96
|
-
|
97
|
+
pm_buffer_append_varuint(buffer, arguments_size);
|
97
98
|
for (uint32_t index = 0; index < arguments_size; index++) {
|
98
99
|
pm_serialize_node(parser, (pm_node_t *) ((pm_arguments_node_t *)node)->arguments.nodes[index], buffer);
|
99
100
|
}
|
100
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
101
101
|
break;
|
102
102
|
}
|
103
103
|
case PM_ARRAY_NODE: {
|
104
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
104
105
|
uint32_t elements_size = pm_sizet_to_u32(((pm_array_node_t *)node)->elements.size);
|
105
|
-
|
106
|
+
pm_buffer_append_varuint(buffer, elements_size);
|
106
107
|
for (uint32_t index = 0; index < elements_size; index++) {
|
107
108
|
pm_serialize_node(parser, (pm_node_t *) ((pm_array_node_t *)node)->elements.nodes[index], buffer);
|
108
109
|
}
|
@@ -127,7 +128,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
127
128
|
pm_serialize_node(parser, (pm_node_t *)((pm_array_pattern_node_t *)node)->constant, buffer);
|
128
129
|
}
|
129
130
|
uint32_t requireds_size = pm_sizet_to_u32(((pm_array_pattern_node_t *)node)->requireds.size);
|
130
|
-
|
131
|
+
pm_buffer_append_varuint(buffer, requireds_size);
|
131
132
|
for (uint32_t index = 0; index < requireds_size; index++) {
|
132
133
|
pm_serialize_node(parser, (pm_node_t *) ((pm_array_pattern_node_t *)node)->requireds.nodes[index], buffer);
|
133
134
|
}
|
@@ -137,7 +138,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
137
138
|
pm_serialize_node(parser, (pm_node_t *)((pm_array_pattern_node_t *)node)->rest, buffer);
|
138
139
|
}
|
139
140
|
uint32_t posts_size = pm_sizet_to_u32(((pm_array_pattern_node_t *)node)->posts.size);
|
140
|
-
|
141
|
+
pm_buffer_append_varuint(buffer, posts_size);
|
141
142
|
for (uint32_t index = 0; index < posts_size; index++) {
|
142
143
|
pm_serialize_node(parser, (pm_node_t *) ((pm_array_pattern_node_t *)node)->posts.nodes[index], buffer);
|
143
144
|
}
|
@@ -180,7 +181,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
180
181
|
break;
|
181
182
|
}
|
182
183
|
case PM_BACK_REFERENCE_READ_NODE: {
|
183
|
-
|
184
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_back_reference_read_node_t *)node)->name));
|
184
185
|
break;
|
185
186
|
}
|
186
187
|
case PM_BEGIN_NODE: {
|
@@ -228,15 +229,16 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
228
229
|
break;
|
229
230
|
}
|
230
231
|
case PM_BLOCK_LOCAL_VARIABLE_NODE: {
|
231
|
-
|
232
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_block_local_variable_node_t *)node)->name));
|
232
233
|
break;
|
233
234
|
}
|
234
235
|
case PM_BLOCK_NODE: {
|
235
236
|
uint32_t locals_size = pm_sizet_to_u32(((pm_block_node_t *)node)->locals.size);
|
236
|
-
|
237
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
237
238
|
for (uint32_t index = 0; index < locals_size; index++) {
|
238
|
-
|
239
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_block_node_t *)node)->locals.ids[index]));
|
239
240
|
}
|
241
|
+
pm_buffer_append_varuint(buffer, ((pm_block_node_t *)node)->locals_body_index);
|
240
242
|
if (((pm_block_node_t *)node)->parameters == NULL) {
|
241
243
|
pm_buffer_append_byte(buffer, 0);
|
242
244
|
} else {
|
@@ -252,7 +254,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
252
254
|
break;
|
253
255
|
}
|
254
256
|
case PM_BLOCK_PARAMETER_NODE: {
|
255
|
-
|
257
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_block_parameter_node_t *)node)->name));
|
256
258
|
if (((pm_block_parameter_node_t *)node)->name_loc.start == NULL) {
|
257
259
|
pm_buffer_append_byte(buffer, 0);
|
258
260
|
} else {
|
@@ -269,7 +271,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
269
271
|
pm_serialize_node(parser, (pm_node_t *)((pm_block_parameters_node_t *)node)->parameters, buffer);
|
270
272
|
}
|
271
273
|
uint32_t locals_size = pm_sizet_to_u32(((pm_block_parameters_node_t *)node)->locals.size);
|
272
|
-
|
274
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
273
275
|
for (uint32_t index = 0; index < locals_size; index++) {
|
274
276
|
pm_serialize_node(parser, (pm_node_t *) ((pm_block_parameters_node_t *)node)->locals.nodes[index], buffer);
|
275
277
|
}
|
@@ -297,6 +299,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
297
299
|
break;
|
298
300
|
}
|
299
301
|
case PM_CALL_AND_WRITE_NODE: {
|
302
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
300
303
|
if (((pm_call_and_write_node_t *)node)->receiver == NULL) {
|
301
304
|
pm_buffer_append_byte(buffer, 0);
|
302
305
|
} else {
|
@@ -314,14 +317,14 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
314
317
|
pm_buffer_append_byte(buffer, 1);
|
315
318
|
pm_serialize_location(parser, &((pm_call_and_write_node_t *)node)->message_loc, buffer);
|
316
319
|
}
|
317
|
-
|
318
|
-
|
319
|
-
pm_buffer_append_varint(buffer, pm_sizet_to_u32(((pm_call_and_write_node_t *)node)->write_name));
|
320
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_and_write_node_t *)node)->read_name));
|
321
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_and_write_node_t *)node)->write_name));
|
320
322
|
pm_serialize_location(parser, &((pm_call_and_write_node_t *)node)->operator_loc, buffer);
|
321
323
|
pm_serialize_node(parser, (pm_node_t *)((pm_call_and_write_node_t *)node)->value, buffer);
|
322
324
|
break;
|
323
325
|
}
|
324
326
|
case PM_CALL_NODE: {
|
327
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
325
328
|
if (((pm_call_node_t *)node)->receiver == NULL) {
|
326
329
|
pm_buffer_append_byte(buffer, 0);
|
327
330
|
} else {
|
@@ -333,6 +336,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
333
336
|
pm_buffer_append_byte(buffer, 1);
|
334
337
|
pm_serialize_location(parser, &((pm_call_node_t *)node)->call_operator_loc, buffer);
|
335
338
|
}
|
339
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_node_t *)node)->name));
|
336
340
|
if (((pm_call_node_t *)node)->message_loc.start == NULL) {
|
337
341
|
pm_buffer_append_byte(buffer, 0);
|
338
342
|
} else {
|
@@ -361,11 +365,10 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
361
365
|
} else {
|
362
366
|
pm_serialize_node(parser, (pm_node_t *)((pm_call_node_t *)node)->block, buffer);
|
363
367
|
}
|
364
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
365
|
-
pm_buffer_append_varint(buffer, pm_sizet_to_u32(((pm_call_node_t *)node)->name));
|
366
368
|
break;
|
367
369
|
}
|
368
370
|
case PM_CALL_OPERATOR_WRITE_NODE: {
|
371
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
369
372
|
if (((pm_call_operator_write_node_t *)node)->receiver == NULL) {
|
370
373
|
pm_buffer_append_byte(buffer, 0);
|
371
374
|
} else {
|
@@ -383,15 +386,15 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
383
386
|
pm_buffer_append_byte(buffer, 1);
|
384
387
|
pm_serialize_location(parser, &((pm_call_operator_write_node_t *)node)->message_loc, buffer);
|
385
388
|
}
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
pm_buffer_append_varint(buffer, pm_sizet_to_u32(((pm_call_operator_write_node_t *)node)->operator));
|
389
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_operator_write_node_t *)node)->read_name));
|
390
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_operator_write_node_t *)node)->write_name));
|
391
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_operator_write_node_t *)node)->operator));
|
390
392
|
pm_serialize_location(parser, &((pm_call_operator_write_node_t *)node)->operator_loc, buffer);
|
391
393
|
pm_serialize_node(parser, (pm_node_t *)((pm_call_operator_write_node_t *)node)->value, buffer);
|
392
394
|
break;
|
393
395
|
}
|
394
396
|
case PM_CALL_OR_WRITE_NODE: {
|
397
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
395
398
|
if (((pm_call_or_write_node_t *)node)->receiver == NULL) {
|
396
399
|
pm_buffer_append_byte(buffer, 0);
|
397
400
|
} else {
|
@@ -409,19 +412,46 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
409
412
|
pm_buffer_append_byte(buffer, 1);
|
410
413
|
pm_serialize_location(parser, &((pm_call_or_write_node_t *)node)->message_loc, buffer);
|
411
414
|
}
|
412
|
-
|
413
|
-
|
414
|
-
pm_buffer_append_varint(buffer, pm_sizet_to_u32(((pm_call_or_write_node_t *)node)->write_name));
|
415
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_or_write_node_t *)node)->read_name));
|
416
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_or_write_node_t *)node)->write_name));
|
415
417
|
pm_serialize_location(parser, &((pm_call_or_write_node_t *)node)->operator_loc, buffer);
|
416
418
|
pm_serialize_node(parser, (pm_node_t *)((pm_call_or_write_node_t *)node)->value, buffer);
|
417
419
|
break;
|
418
420
|
}
|
421
|
+
case PM_CALL_TARGET_NODE: {
|
422
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
423
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_target_node_t *)node)->receiver, buffer);
|
424
|
+
pm_serialize_location(parser, &((pm_call_target_node_t *)node)->call_operator_loc, buffer);
|
425
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_call_target_node_t *)node)->name));
|
426
|
+
pm_serialize_location(parser, &((pm_call_target_node_t *)node)->message_loc, buffer);
|
427
|
+
break;
|
428
|
+
}
|
419
429
|
case PM_CAPTURE_PATTERN_NODE: {
|
420
430
|
pm_serialize_node(parser, (pm_node_t *)((pm_capture_pattern_node_t *)node)->value, buffer);
|
421
431
|
pm_serialize_node(parser, (pm_node_t *)((pm_capture_pattern_node_t *)node)->target, buffer);
|
422
432
|
pm_serialize_location(parser, &((pm_capture_pattern_node_t *)node)->operator_loc, buffer);
|
423
433
|
break;
|
424
434
|
}
|
435
|
+
case PM_CASE_MATCH_NODE: {
|
436
|
+
if (((pm_case_match_node_t *)node)->predicate == NULL) {
|
437
|
+
pm_buffer_append_byte(buffer, 0);
|
438
|
+
} else {
|
439
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_case_match_node_t *)node)->predicate, buffer);
|
440
|
+
}
|
441
|
+
uint32_t conditions_size = pm_sizet_to_u32(((pm_case_match_node_t *)node)->conditions.size);
|
442
|
+
pm_buffer_append_varuint(buffer, conditions_size);
|
443
|
+
for (uint32_t index = 0; index < conditions_size; index++) {
|
444
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_case_match_node_t *)node)->conditions.nodes[index], buffer);
|
445
|
+
}
|
446
|
+
if (((pm_case_match_node_t *)node)->consequent == NULL) {
|
447
|
+
pm_buffer_append_byte(buffer, 0);
|
448
|
+
} else {
|
449
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_case_match_node_t *)node)->consequent, buffer);
|
450
|
+
}
|
451
|
+
pm_serialize_location(parser, &((pm_case_match_node_t *)node)->case_keyword_loc, buffer);
|
452
|
+
pm_serialize_location(parser, &((pm_case_match_node_t *)node)->end_keyword_loc, buffer);
|
453
|
+
break;
|
454
|
+
}
|
425
455
|
case PM_CASE_NODE: {
|
426
456
|
if (((pm_case_node_t *)node)->predicate == NULL) {
|
427
457
|
pm_buffer_append_byte(buffer, 0);
|
@@ -429,7 +459,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
429
459
|
pm_serialize_node(parser, (pm_node_t *)((pm_case_node_t *)node)->predicate, buffer);
|
430
460
|
}
|
431
461
|
uint32_t conditions_size = pm_sizet_to_u32(((pm_case_node_t *)node)->conditions.size);
|
432
|
-
|
462
|
+
pm_buffer_append_varuint(buffer, conditions_size);
|
433
463
|
for (uint32_t index = 0; index < conditions_size; index++) {
|
434
464
|
pm_serialize_node(parser, (pm_node_t *) ((pm_case_node_t *)node)->conditions.nodes[index], buffer);
|
435
465
|
}
|
@@ -444,9 +474,9 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
444
474
|
}
|
445
475
|
case PM_CLASS_NODE: {
|
446
476
|
uint32_t locals_size = pm_sizet_to_u32(((pm_class_node_t *)node)->locals.size);
|
447
|
-
|
477
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
448
478
|
for (uint32_t index = 0; index < locals_size; index++) {
|
449
|
-
|
479
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_node_t *)node)->locals.ids[index]));
|
450
480
|
}
|
451
481
|
pm_serialize_location(parser, &((pm_class_node_t *)node)->class_keyword_loc, buffer);
|
452
482
|
pm_serialize_node(parser, (pm_node_t *)((pm_class_node_t *)node)->constant_path, buffer);
|
@@ -467,41 +497,41 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
467
497
|
pm_serialize_node(parser, (pm_node_t *)((pm_class_node_t *)node)->body, buffer);
|
468
498
|
}
|
469
499
|
pm_serialize_location(parser, &((pm_class_node_t *)node)->end_keyword_loc, buffer);
|
470
|
-
|
500
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_node_t *)node)->name));
|
471
501
|
break;
|
472
502
|
}
|
473
503
|
case PM_CLASS_VARIABLE_AND_WRITE_NODE: {
|
474
|
-
|
504
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_variable_and_write_node_t *)node)->name));
|
475
505
|
pm_serialize_location(parser, &((pm_class_variable_and_write_node_t *)node)->name_loc, buffer);
|
476
506
|
pm_serialize_location(parser, &((pm_class_variable_and_write_node_t *)node)->operator_loc, buffer);
|
477
507
|
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_and_write_node_t *)node)->value, buffer);
|
478
508
|
break;
|
479
509
|
}
|
480
510
|
case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
|
481
|
-
|
511
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_variable_operator_write_node_t *)node)->name));
|
482
512
|
pm_serialize_location(parser, &((pm_class_variable_operator_write_node_t *)node)->name_loc, buffer);
|
483
513
|
pm_serialize_location(parser, &((pm_class_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
484
514
|
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_operator_write_node_t *)node)->value, buffer);
|
485
|
-
|
515
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_variable_operator_write_node_t *)node)->operator));
|
486
516
|
break;
|
487
517
|
}
|
488
518
|
case PM_CLASS_VARIABLE_OR_WRITE_NODE: {
|
489
|
-
|
519
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_variable_or_write_node_t *)node)->name));
|
490
520
|
pm_serialize_location(parser, &((pm_class_variable_or_write_node_t *)node)->name_loc, buffer);
|
491
521
|
pm_serialize_location(parser, &((pm_class_variable_or_write_node_t *)node)->operator_loc, buffer);
|
492
522
|
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_or_write_node_t *)node)->value, buffer);
|
493
523
|
break;
|
494
524
|
}
|
495
525
|
case PM_CLASS_VARIABLE_READ_NODE: {
|
496
|
-
|
526
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_variable_read_node_t *)node)->name));
|
497
527
|
break;
|
498
528
|
}
|
499
529
|
case PM_CLASS_VARIABLE_TARGET_NODE: {
|
500
|
-
|
530
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_variable_target_node_t *)node)->name));
|
501
531
|
break;
|
502
532
|
}
|
503
533
|
case PM_CLASS_VARIABLE_WRITE_NODE: {
|
504
|
-
|
534
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_class_variable_write_node_t *)node)->name));
|
505
535
|
pm_serialize_location(parser, &((pm_class_variable_write_node_t *)node)->name_loc, buffer);
|
506
536
|
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_write_node_t *)node)->value, buffer);
|
507
537
|
if (((pm_class_variable_write_node_t *)node)->operator_loc.start == NULL) {
|
@@ -513,22 +543,22 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
513
543
|
break;
|
514
544
|
}
|
515
545
|
case PM_CONSTANT_AND_WRITE_NODE: {
|
516
|
-
|
546
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_and_write_node_t *)node)->name));
|
517
547
|
pm_serialize_location(parser, &((pm_constant_and_write_node_t *)node)->name_loc, buffer);
|
518
548
|
pm_serialize_location(parser, &((pm_constant_and_write_node_t *)node)->operator_loc, buffer);
|
519
549
|
pm_serialize_node(parser, (pm_node_t *)((pm_constant_and_write_node_t *)node)->value, buffer);
|
520
550
|
break;
|
521
551
|
}
|
522
552
|
case PM_CONSTANT_OPERATOR_WRITE_NODE: {
|
523
|
-
|
553
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_operator_write_node_t *)node)->name));
|
524
554
|
pm_serialize_location(parser, &((pm_constant_operator_write_node_t *)node)->name_loc, buffer);
|
525
555
|
pm_serialize_location(parser, &((pm_constant_operator_write_node_t *)node)->operator_loc, buffer);
|
526
556
|
pm_serialize_node(parser, (pm_node_t *)((pm_constant_operator_write_node_t *)node)->value, buffer);
|
527
|
-
|
557
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_operator_write_node_t *)node)->operator));
|
528
558
|
break;
|
529
559
|
}
|
530
560
|
case PM_CONSTANT_OR_WRITE_NODE: {
|
531
|
-
|
561
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_or_write_node_t *)node)->name));
|
532
562
|
pm_serialize_location(parser, &((pm_constant_or_write_node_t *)node)->name_loc, buffer);
|
533
563
|
pm_serialize_location(parser, &((pm_constant_or_write_node_t *)node)->operator_loc, buffer);
|
534
564
|
pm_serialize_node(parser, (pm_node_t *)((pm_constant_or_write_node_t *)node)->value, buffer);
|
@@ -554,7 +584,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
554
584
|
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_operator_write_node_t *)node)->target, buffer);
|
555
585
|
pm_serialize_location(parser, &((pm_constant_path_operator_write_node_t *)node)->operator_loc, buffer);
|
556
586
|
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_operator_write_node_t *)node)->value, buffer);
|
557
|
-
|
587
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_path_operator_write_node_t *)node)->operator));
|
558
588
|
break;
|
559
589
|
}
|
560
590
|
case PM_CONSTANT_PATH_OR_WRITE_NODE: {
|
@@ -580,15 +610,15 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
580
610
|
break;
|
581
611
|
}
|
582
612
|
case PM_CONSTANT_READ_NODE: {
|
583
|
-
|
613
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_read_node_t *)node)->name));
|
584
614
|
break;
|
585
615
|
}
|
586
616
|
case PM_CONSTANT_TARGET_NODE: {
|
587
|
-
|
617
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_target_node_t *)node)->name));
|
588
618
|
break;
|
589
619
|
}
|
590
620
|
case PM_CONSTANT_WRITE_NODE: {
|
591
|
-
|
621
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_constant_write_node_t *)node)->name));
|
592
622
|
pm_serialize_location(parser, &((pm_constant_write_node_t *)node)->name_loc, buffer);
|
593
623
|
pm_serialize_node(parser, (pm_node_t *)((pm_constant_write_node_t *)node)->value, buffer);
|
594
624
|
pm_serialize_location(parser, &((pm_constant_write_node_t *)node)->operator_loc, buffer);
|
@@ -599,7 +629,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
599
629
|
// encoding of location u32s make us need to save this offset.
|
600
630
|
size_t length_offset = buffer->length;
|
601
631
|
pm_buffer_append_string(buffer, "\0\0\0\0", 4); /* consume 4 bytes, updated below */
|
602
|
-
|
632
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_def_node_t *)node)->name));
|
603
633
|
pm_serialize_location(parser, &((pm_def_node_t *)node)->name_loc, buffer);
|
604
634
|
if (((pm_def_node_t *)node)->receiver == NULL) {
|
605
635
|
pm_buffer_append_byte(buffer, 0);
|
@@ -617,10 +647,11 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
617
647
|
pm_serialize_node(parser, (pm_node_t *)((pm_def_node_t *)node)->body, buffer);
|
618
648
|
}
|
619
649
|
uint32_t locals_size = pm_sizet_to_u32(((pm_def_node_t *)node)->locals.size);
|
620
|
-
|
650
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
621
651
|
for (uint32_t index = 0; index < locals_size; index++) {
|
622
|
-
|
652
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_def_node_t *)node)->locals.ids[index]));
|
623
653
|
}
|
654
|
+
pm_buffer_append_varuint(buffer, ((pm_def_node_t *)node)->locals_body_index);
|
624
655
|
pm_serialize_location(parser, &((pm_def_node_t *)node)->def_keyword_loc, buffer);
|
625
656
|
if (((pm_def_node_t *)node)->operator_loc.start == NULL) {
|
626
657
|
pm_buffer_append_byte(buffer, 0);
|
@@ -725,7 +756,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
725
756
|
}
|
726
757
|
pm_serialize_node(parser, (pm_node_t *)((pm_find_pattern_node_t *)node)->left, buffer);
|
727
758
|
uint32_t requireds_size = pm_sizet_to_u32(((pm_find_pattern_node_t *)node)->requireds.size);
|
728
|
-
|
759
|
+
pm_buffer_append_varuint(buffer, requireds_size);
|
729
760
|
for (uint32_t index = 0; index < requireds_size; index++) {
|
730
761
|
pm_serialize_node(parser, (pm_node_t *) ((pm_find_pattern_node_t *)node)->requireds.nodes[index], buffer);
|
731
762
|
}
|
@@ -745,6 +776,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
745
776
|
break;
|
746
777
|
}
|
747
778
|
case PM_FLIP_FLOP_NODE: {
|
779
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
748
780
|
if (((pm_flip_flop_node_t *)node)->left == NULL) {
|
749
781
|
pm_buffer_append_byte(buffer, 0);
|
750
782
|
} else {
|
@@ -756,7 +788,6 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
756
788
|
pm_serialize_node(parser, (pm_node_t *)((pm_flip_flop_node_t *)node)->right, buffer);
|
757
789
|
}
|
758
790
|
pm_serialize_location(parser, &((pm_flip_flop_node_t *)node)->operator_loc, buffer);
|
759
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
760
791
|
break;
|
761
792
|
}
|
762
793
|
case PM_FLOAT_NODE: {
|
@@ -796,37 +827,37 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
796
827
|
break;
|
797
828
|
}
|
798
829
|
case PM_GLOBAL_VARIABLE_AND_WRITE_NODE: {
|
799
|
-
|
830
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_global_variable_and_write_node_t *)node)->name));
|
800
831
|
pm_serialize_location(parser, &((pm_global_variable_and_write_node_t *)node)->name_loc, buffer);
|
801
832
|
pm_serialize_location(parser, &((pm_global_variable_and_write_node_t *)node)->operator_loc, buffer);
|
802
833
|
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_and_write_node_t *)node)->value, buffer);
|
803
834
|
break;
|
804
835
|
}
|
805
836
|
case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
|
806
|
-
|
837
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_global_variable_operator_write_node_t *)node)->name));
|
807
838
|
pm_serialize_location(parser, &((pm_global_variable_operator_write_node_t *)node)->name_loc, buffer);
|
808
839
|
pm_serialize_location(parser, &((pm_global_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
809
840
|
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_operator_write_node_t *)node)->value, buffer);
|
810
|
-
|
841
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_global_variable_operator_write_node_t *)node)->operator));
|
811
842
|
break;
|
812
843
|
}
|
813
844
|
case PM_GLOBAL_VARIABLE_OR_WRITE_NODE: {
|
814
|
-
|
845
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_global_variable_or_write_node_t *)node)->name));
|
815
846
|
pm_serialize_location(parser, &((pm_global_variable_or_write_node_t *)node)->name_loc, buffer);
|
816
847
|
pm_serialize_location(parser, &((pm_global_variable_or_write_node_t *)node)->operator_loc, buffer);
|
817
848
|
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_or_write_node_t *)node)->value, buffer);
|
818
849
|
break;
|
819
850
|
}
|
820
851
|
case PM_GLOBAL_VARIABLE_READ_NODE: {
|
821
|
-
|
852
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_global_variable_read_node_t *)node)->name));
|
822
853
|
break;
|
823
854
|
}
|
824
855
|
case PM_GLOBAL_VARIABLE_TARGET_NODE: {
|
825
|
-
|
856
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_global_variable_target_node_t *)node)->name));
|
826
857
|
break;
|
827
858
|
}
|
828
859
|
case PM_GLOBAL_VARIABLE_WRITE_NODE: {
|
829
|
-
|
860
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_global_variable_write_node_t *)node)->name));
|
830
861
|
pm_serialize_location(parser, &((pm_global_variable_write_node_t *)node)->name_loc, buffer);
|
831
862
|
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_write_node_t *)node)->value, buffer);
|
832
863
|
pm_serialize_location(parser, &((pm_global_variable_write_node_t *)node)->operator_loc, buffer);
|
@@ -835,7 +866,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
835
866
|
case PM_HASH_NODE: {
|
836
867
|
pm_serialize_location(parser, &((pm_hash_node_t *)node)->opening_loc, buffer);
|
837
868
|
uint32_t elements_size = pm_sizet_to_u32(((pm_hash_node_t *)node)->elements.size);
|
838
|
-
|
869
|
+
pm_buffer_append_varuint(buffer, elements_size);
|
839
870
|
for (uint32_t index = 0; index < elements_size; index++) {
|
840
871
|
pm_serialize_node(parser, (pm_node_t *) ((pm_hash_node_t *)node)->elements.nodes[index], buffer);
|
841
872
|
}
|
@@ -849,7 +880,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
849
880
|
pm_serialize_node(parser, (pm_node_t *)((pm_hash_pattern_node_t *)node)->constant, buffer);
|
850
881
|
}
|
851
882
|
uint32_t elements_size = pm_sizet_to_u32(((pm_hash_pattern_node_t *)node)->elements.size);
|
852
|
-
|
883
|
+
pm_buffer_append_varuint(buffer, elements_size);
|
853
884
|
for (uint32_t index = 0; index < elements_size; index++) {
|
854
885
|
pm_serialize_node(parser, (pm_node_t *) ((pm_hash_pattern_node_t *)node)->elements.nodes[index], buffer);
|
855
886
|
}
|
@@ -880,6 +911,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
880
911
|
pm_serialize_location(parser, &((pm_if_node_t *)node)->if_keyword_loc, buffer);
|
881
912
|
}
|
882
913
|
pm_serialize_node(parser, (pm_node_t *)((pm_if_node_t *)node)->predicate, buffer);
|
914
|
+
if (((pm_if_node_t *)node)->then_keyword_loc.start == NULL) {
|
915
|
+
pm_buffer_append_byte(buffer, 0);
|
916
|
+
} else {
|
917
|
+
pm_buffer_append_byte(buffer, 1);
|
918
|
+
pm_serialize_location(parser, &((pm_if_node_t *)node)->then_keyword_loc, buffer);
|
919
|
+
}
|
883
920
|
if (((pm_if_node_t *)node)->statements == NULL) {
|
884
921
|
pm_buffer_append_byte(buffer, 0);
|
885
922
|
} else {
|
@@ -906,6 +943,9 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
906
943
|
pm_serialize_node(parser, (pm_node_t *)((pm_implicit_node_t *)node)->value, buffer);
|
907
944
|
break;
|
908
945
|
}
|
946
|
+
case PM_IMPLICIT_REST_NODE: {
|
947
|
+
break;
|
948
|
+
}
|
909
949
|
case PM_IN_NODE: {
|
910
950
|
pm_serialize_node(parser, (pm_node_t *)((pm_in_node_t *)node)->pattern, buffer);
|
911
951
|
if (((pm_in_node_t *)node)->statements == NULL) {
|
@@ -923,6 +963,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
923
963
|
break;
|
924
964
|
}
|
925
965
|
case PM_INDEX_AND_WRITE_NODE: {
|
966
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
926
967
|
if (((pm_index_and_write_node_t *)node)->receiver == NULL) {
|
927
968
|
pm_buffer_append_byte(buffer, 0);
|
928
969
|
} else {
|
@@ -946,12 +987,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
946
987
|
} else {
|
947
988
|
pm_serialize_node(parser, (pm_node_t *)((pm_index_and_write_node_t *)node)->block, buffer);
|
948
989
|
}
|
949
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
950
990
|
pm_serialize_location(parser, &((pm_index_and_write_node_t *)node)->operator_loc, buffer);
|
951
991
|
pm_serialize_node(parser, (pm_node_t *)((pm_index_and_write_node_t *)node)->value, buffer);
|
952
992
|
break;
|
953
993
|
}
|
954
994
|
case PM_INDEX_OPERATOR_WRITE_NODE: {
|
995
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
955
996
|
if (((pm_index_operator_write_node_t *)node)->receiver == NULL) {
|
956
997
|
pm_buffer_append_byte(buffer, 0);
|
957
998
|
} else {
|
@@ -975,13 +1016,13 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
975
1016
|
} else {
|
976
1017
|
pm_serialize_node(parser, (pm_node_t *)((pm_index_operator_write_node_t *)node)->block, buffer);
|
977
1018
|
}
|
978
|
-
|
979
|
-
pm_buffer_append_varint(buffer, pm_sizet_to_u32(((pm_index_operator_write_node_t *)node)->operator));
|
1019
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_index_operator_write_node_t *)node)->operator));
|
980
1020
|
pm_serialize_location(parser, &((pm_index_operator_write_node_t *)node)->operator_loc, buffer);
|
981
1021
|
pm_serialize_node(parser, (pm_node_t *)((pm_index_operator_write_node_t *)node)->value, buffer);
|
982
1022
|
break;
|
983
1023
|
}
|
984
1024
|
case PM_INDEX_OR_WRITE_NODE: {
|
1025
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
985
1026
|
if (((pm_index_or_write_node_t *)node)->receiver == NULL) {
|
986
1027
|
pm_buffer_append_byte(buffer, 0);
|
987
1028
|
} else {
|
@@ -1005,72 +1046,88 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1005
1046
|
} else {
|
1006
1047
|
pm_serialize_node(parser, (pm_node_t *)((pm_index_or_write_node_t *)node)->block, buffer);
|
1007
1048
|
}
|
1008
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1009
1049
|
pm_serialize_location(parser, &((pm_index_or_write_node_t *)node)->operator_loc, buffer);
|
1010
1050
|
pm_serialize_node(parser, (pm_node_t *)((pm_index_or_write_node_t *)node)->value, buffer);
|
1011
1051
|
break;
|
1012
1052
|
}
|
1053
|
+
case PM_INDEX_TARGET_NODE: {
|
1054
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1055
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_index_target_node_t *)node)->receiver, buffer);
|
1056
|
+
pm_serialize_location(parser, &((pm_index_target_node_t *)node)->opening_loc, buffer);
|
1057
|
+
if (((pm_index_target_node_t *)node)->arguments == NULL) {
|
1058
|
+
pm_buffer_append_byte(buffer, 0);
|
1059
|
+
} else {
|
1060
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_index_target_node_t *)node)->arguments, buffer);
|
1061
|
+
}
|
1062
|
+
pm_serialize_location(parser, &((pm_index_target_node_t *)node)->closing_loc, buffer);
|
1063
|
+
if (((pm_index_target_node_t *)node)->block == NULL) {
|
1064
|
+
pm_buffer_append_byte(buffer, 0);
|
1065
|
+
} else {
|
1066
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_index_target_node_t *)node)->block, buffer);
|
1067
|
+
}
|
1068
|
+
break;
|
1069
|
+
}
|
1013
1070
|
case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
|
1014
|
-
|
1071
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_instance_variable_and_write_node_t *)node)->name));
|
1015
1072
|
pm_serialize_location(parser, &((pm_instance_variable_and_write_node_t *)node)->name_loc, buffer);
|
1016
1073
|
pm_serialize_location(parser, &((pm_instance_variable_and_write_node_t *)node)->operator_loc, buffer);
|
1017
1074
|
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_and_write_node_t *)node)->value, buffer);
|
1018
1075
|
break;
|
1019
1076
|
}
|
1020
1077
|
case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
|
1021
|
-
|
1078
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_instance_variable_operator_write_node_t *)node)->name));
|
1022
1079
|
pm_serialize_location(parser, &((pm_instance_variable_operator_write_node_t *)node)->name_loc, buffer);
|
1023
1080
|
pm_serialize_location(parser, &((pm_instance_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
1024
1081
|
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_operator_write_node_t *)node)->value, buffer);
|
1025
|
-
|
1082
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_instance_variable_operator_write_node_t *)node)->operator));
|
1026
1083
|
break;
|
1027
1084
|
}
|
1028
1085
|
case PM_INSTANCE_VARIABLE_OR_WRITE_NODE: {
|
1029
|
-
|
1086
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_instance_variable_or_write_node_t *)node)->name));
|
1030
1087
|
pm_serialize_location(parser, &((pm_instance_variable_or_write_node_t *)node)->name_loc, buffer);
|
1031
1088
|
pm_serialize_location(parser, &((pm_instance_variable_or_write_node_t *)node)->operator_loc, buffer);
|
1032
1089
|
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_or_write_node_t *)node)->value, buffer);
|
1033
1090
|
break;
|
1034
1091
|
}
|
1035
1092
|
case PM_INSTANCE_VARIABLE_READ_NODE: {
|
1036
|
-
|
1093
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_instance_variable_read_node_t *)node)->name));
|
1037
1094
|
break;
|
1038
1095
|
}
|
1039
1096
|
case PM_INSTANCE_VARIABLE_TARGET_NODE: {
|
1040
|
-
|
1097
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_instance_variable_target_node_t *)node)->name));
|
1041
1098
|
break;
|
1042
1099
|
}
|
1043
1100
|
case PM_INSTANCE_VARIABLE_WRITE_NODE: {
|
1044
|
-
|
1101
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_instance_variable_write_node_t *)node)->name));
|
1045
1102
|
pm_serialize_location(parser, &((pm_instance_variable_write_node_t *)node)->name_loc, buffer);
|
1046
1103
|
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_write_node_t *)node)->value, buffer);
|
1047
1104
|
pm_serialize_location(parser, &((pm_instance_variable_write_node_t *)node)->operator_loc, buffer);
|
1048
1105
|
break;
|
1049
1106
|
}
|
1050
1107
|
case PM_INTEGER_NODE: {
|
1051
|
-
|
1108
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1052
1109
|
break;
|
1053
1110
|
}
|
1054
1111
|
case PM_INTERPOLATED_MATCH_LAST_LINE_NODE: {
|
1112
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1055
1113
|
pm_serialize_location(parser, &((pm_interpolated_match_last_line_node_t *)node)->opening_loc, buffer);
|
1056
1114
|
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_match_last_line_node_t *)node)->parts.size);
|
1057
|
-
|
1115
|
+
pm_buffer_append_varuint(buffer, parts_size);
|
1058
1116
|
for (uint32_t index = 0; index < parts_size; index++) {
|
1059
1117
|
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_match_last_line_node_t *)node)->parts.nodes[index], buffer);
|
1060
1118
|
}
|
1061
1119
|
pm_serialize_location(parser, &((pm_interpolated_match_last_line_node_t *)node)->closing_loc, buffer);
|
1062
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1063
1120
|
break;
|
1064
1121
|
}
|
1065
1122
|
case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
|
1123
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1066
1124
|
pm_serialize_location(parser, &((pm_interpolated_regular_expression_node_t *)node)->opening_loc, buffer);
|
1067
1125
|
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_regular_expression_node_t *)node)->parts.size);
|
1068
|
-
|
1126
|
+
pm_buffer_append_varuint(buffer, parts_size);
|
1069
1127
|
for (uint32_t index = 0; index < parts_size; index++) {
|
1070
1128
|
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_regular_expression_node_t *)node)->parts.nodes[index], buffer);
|
1071
1129
|
}
|
1072
1130
|
pm_serialize_location(parser, &((pm_interpolated_regular_expression_node_t *)node)->closing_loc, buffer);
|
1073
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1074
1131
|
break;
|
1075
1132
|
}
|
1076
1133
|
case PM_INTERPOLATED_STRING_NODE: {
|
@@ -1081,7 +1138,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1081
1138
|
pm_serialize_location(parser, &((pm_interpolated_string_node_t *)node)->opening_loc, buffer);
|
1082
1139
|
}
|
1083
1140
|
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_string_node_t *)node)->parts.size);
|
1084
|
-
|
1141
|
+
pm_buffer_append_varuint(buffer, parts_size);
|
1085
1142
|
for (uint32_t index = 0; index < parts_size; index++) {
|
1086
1143
|
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_string_node_t *)node)->parts.nodes[index], buffer);
|
1087
1144
|
}
|
@@ -1101,7 +1158,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1101
1158
|
pm_serialize_location(parser, &((pm_interpolated_symbol_node_t *)node)->opening_loc, buffer);
|
1102
1159
|
}
|
1103
1160
|
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_symbol_node_t *)node)->parts.size);
|
1104
|
-
|
1161
|
+
pm_buffer_append_varuint(buffer, parts_size);
|
1105
1162
|
for (uint32_t index = 0; index < parts_size; index++) {
|
1106
1163
|
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_symbol_node_t *)node)->parts.nodes[index], buffer);
|
1107
1164
|
}
|
@@ -1116,7 +1173,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1116
1173
|
case PM_INTERPOLATED_X_STRING_NODE: {
|
1117
1174
|
pm_serialize_location(parser, &((pm_interpolated_x_string_node_t *)node)->opening_loc, buffer);
|
1118
1175
|
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_x_string_node_t *)node)->parts.size);
|
1119
|
-
|
1176
|
+
pm_buffer_append_varuint(buffer, parts_size);
|
1120
1177
|
for (uint32_t index = 0; index < parts_size; index++) {
|
1121
1178
|
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_x_string_node_t *)node)->parts.nodes[index], buffer);
|
1122
1179
|
}
|
@@ -1124,15 +1181,16 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1124
1181
|
break;
|
1125
1182
|
}
|
1126
1183
|
case PM_KEYWORD_HASH_NODE: {
|
1184
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1127
1185
|
uint32_t elements_size = pm_sizet_to_u32(((pm_keyword_hash_node_t *)node)->elements.size);
|
1128
|
-
|
1186
|
+
pm_buffer_append_varuint(buffer, elements_size);
|
1129
1187
|
for (uint32_t index = 0; index < elements_size; index++) {
|
1130
1188
|
pm_serialize_node(parser, (pm_node_t *) ((pm_keyword_hash_node_t *)node)->elements.nodes[index], buffer);
|
1131
1189
|
}
|
1132
1190
|
break;
|
1133
1191
|
}
|
1134
1192
|
case PM_KEYWORD_REST_PARAMETER_NODE: {
|
1135
|
-
|
1193
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_keyword_rest_parameter_node_t *)node)->name));
|
1136
1194
|
if (((pm_keyword_rest_parameter_node_t *)node)->name_loc.start == NULL) {
|
1137
1195
|
pm_buffer_append_byte(buffer, 0);
|
1138
1196
|
} else {
|
@@ -1144,10 +1202,11 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1144
1202
|
}
|
1145
1203
|
case PM_LAMBDA_NODE: {
|
1146
1204
|
uint32_t locals_size = pm_sizet_to_u32(((pm_lambda_node_t *)node)->locals.size);
|
1147
|
-
|
1205
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
1148
1206
|
for (uint32_t index = 0; index < locals_size; index++) {
|
1149
|
-
|
1207
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_lambda_node_t *)node)->locals.ids[index]));
|
1150
1208
|
}
|
1209
|
+
pm_buffer_append_varuint(buffer, ((pm_lambda_node_t *)node)->locals_body_index);
|
1151
1210
|
pm_serialize_location(parser, &((pm_lambda_node_t *)node)->operator_loc, buffer);
|
1152
1211
|
pm_serialize_location(parser, &((pm_lambda_node_t *)node)->opening_loc, buffer);
|
1153
1212
|
pm_serialize_location(parser, &((pm_lambda_node_t *)node)->closing_loc, buffer);
|
@@ -1167,51 +1226,51 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1167
1226
|
pm_serialize_location(parser, &((pm_local_variable_and_write_node_t *)node)->name_loc, buffer);
|
1168
1227
|
pm_serialize_location(parser, &((pm_local_variable_and_write_node_t *)node)->operator_loc, buffer);
|
1169
1228
|
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_and_write_node_t *)node)->value, buffer);
|
1170
|
-
|
1171
|
-
|
1229
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_local_variable_and_write_node_t *)node)->name));
|
1230
|
+
pm_buffer_append_varuint(buffer, ((pm_local_variable_and_write_node_t *)node)->depth);
|
1172
1231
|
break;
|
1173
1232
|
}
|
1174
1233
|
case PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
|
1175
1234
|
pm_serialize_location(parser, &((pm_local_variable_operator_write_node_t *)node)->name_loc, buffer);
|
1176
1235
|
pm_serialize_location(parser, &((pm_local_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
1177
1236
|
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_operator_write_node_t *)node)->value, buffer);
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1237
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_local_variable_operator_write_node_t *)node)->name));
|
1238
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_local_variable_operator_write_node_t *)node)->operator));
|
1239
|
+
pm_buffer_append_varuint(buffer, ((pm_local_variable_operator_write_node_t *)node)->depth);
|
1181
1240
|
break;
|
1182
1241
|
}
|
1183
1242
|
case PM_LOCAL_VARIABLE_OR_WRITE_NODE: {
|
1184
1243
|
pm_serialize_location(parser, &((pm_local_variable_or_write_node_t *)node)->name_loc, buffer);
|
1185
1244
|
pm_serialize_location(parser, &((pm_local_variable_or_write_node_t *)node)->operator_loc, buffer);
|
1186
1245
|
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_or_write_node_t *)node)->value, buffer);
|
1187
|
-
|
1188
|
-
|
1246
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_local_variable_or_write_node_t *)node)->name));
|
1247
|
+
pm_buffer_append_varuint(buffer, ((pm_local_variable_or_write_node_t *)node)->depth);
|
1189
1248
|
break;
|
1190
1249
|
}
|
1191
1250
|
case PM_LOCAL_VARIABLE_READ_NODE: {
|
1192
|
-
|
1193
|
-
|
1251
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_local_variable_read_node_t *)node)->name));
|
1252
|
+
pm_buffer_append_varuint(buffer, ((pm_local_variable_read_node_t *)node)->depth);
|
1194
1253
|
break;
|
1195
1254
|
}
|
1196
1255
|
case PM_LOCAL_VARIABLE_TARGET_NODE: {
|
1197
|
-
|
1198
|
-
|
1256
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_local_variable_target_node_t *)node)->name));
|
1257
|
+
pm_buffer_append_varuint(buffer, ((pm_local_variable_target_node_t *)node)->depth);
|
1199
1258
|
break;
|
1200
1259
|
}
|
1201
1260
|
case PM_LOCAL_VARIABLE_WRITE_NODE: {
|
1202
|
-
|
1203
|
-
|
1261
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_local_variable_write_node_t *)node)->name));
|
1262
|
+
pm_buffer_append_varuint(buffer, ((pm_local_variable_write_node_t *)node)->depth);
|
1204
1263
|
pm_serialize_location(parser, &((pm_local_variable_write_node_t *)node)->name_loc, buffer);
|
1205
1264
|
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_write_node_t *)node)->value, buffer);
|
1206
1265
|
pm_serialize_location(parser, &((pm_local_variable_write_node_t *)node)->operator_loc, buffer);
|
1207
1266
|
break;
|
1208
1267
|
}
|
1209
1268
|
case PM_MATCH_LAST_LINE_NODE: {
|
1269
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1210
1270
|
pm_serialize_location(parser, &((pm_match_last_line_node_t *)node)->opening_loc, buffer);
|
1211
1271
|
pm_serialize_location(parser, &((pm_match_last_line_node_t *)node)->content_loc, buffer);
|
1212
1272
|
pm_serialize_location(parser, &((pm_match_last_line_node_t *)node)->closing_loc, buffer);
|
1213
1273
|
pm_serialize_string(parser, &((pm_match_last_line_node_t *)node)->unescaped, buffer);
|
1214
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1215
1274
|
break;
|
1216
1275
|
}
|
1217
1276
|
case PM_MATCH_PREDICATE_NODE: {
|
@@ -1228,10 +1287,10 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1228
1287
|
}
|
1229
1288
|
case PM_MATCH_WRITE_NODE: {
|
1230
1289
|
pm_serialize_node(parser, (pm_node_t *)((pm_match_write_node_t *)node)->call, buffer);
|
1231
|
-
uint32_t
|
1232
|
-
|
1233
|
-
for (uint32_t index = 0; index <
|
1234
|
-
|
1290
|
+
uint32_t targets_size = pm_sizet_to_u32(((pm_match_write_node_t *)node)->targets.size);
|
1291
|
+
pm_buffer_append_varuint(buffer, targets_size);
|
1292
|
+
for (uint32_t index = 0; index < targets_size; index++) {
|
1293
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_match_write_node_t *)node)->targets.nodes[index], buffer);
|
1235
1294
|
}
|
1236
1295
|
break;
|
1237
1296
|
}
|
@@ -1240,9 +1299,9 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1240
1299
|
}
|
1241
1300
|
case PM_MODULE_NODE: {
|
1242
1301
|
uint32_t locals_size = pm_sizet_to_u32(((pm_module_node_t *)node)->locals.size);
|
1243
|
-
|
1302
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
1244
1303
|
for (uint32_t index = 0; index < locals_size; index++) {
|
1245
|
-
|
1304
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_module_node_t *)node)->locals.ids[index]));
|
1246
1305
|
}
|
1247
1306
|
pm_serialize_location(parser, &((pm_module_node_t *)node)->module_keyword_loc, buffer);
|
1248
1307
|
pm_serialize_node(parser, (pm_node_t *)((pm_module_node_t *)node)->constant_path, buffer);
|
@@ -1252,12 +1311,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1252
1311
|
pm_serialize_node(parser, (pm_node_t *)((pm_module_node_t *)node)->body, buffer);
|
1253
1312
|
}
|
1254
1313
|
pm_serialize_location(parser, &((pm_module_node_t *)node)->end_keyword_loc, buffer);
|
1255
|
-
|
1314
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_module_node_t *)node)->name));
|
1256
1315
|
break;
|
1257
1316
|
}
|
1258
1317
|
case PM_MULTI_TARGET_NODE: {
|
1259
1318
|
uint32_t lefts_size = pm_sizet_to_u32(((pm_multi_target_node_t *)node)->lefts.size);
|
1260
|
-
|
1319
|
+
pm_buffer_append_varuint(buffer, lefts_size);
|
1261
1320
|
for (uint32_t index = 0; index < lefts_size; index++) {
|
1262
1321
|
pm_serialize_node(parser, (pm_node_t *) ((pm_multi_target_node_t *)node)->lefts.nodes[index], buffer);
|
1263
1322
|
}
|
@@ -1267,7 +1326,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1267
1326
|
pm_serialize_node(parser, (pm_node_t *)((pm_multi_target_node_t *)node)->rest, buffer);
|
1268
1327
|
}
|
1269
1328
|
uint32_t rights_size = pm_sizet_to_u32(((pm_multi_target_node_t *)node)->rights.size);
|
1270
|
-
|
1329
|
+
pm_buffer_append_varuint(buffer, rights_size);
|
1271
1330
|
for (uint32_t index = 0; index < rights_size; index++) {
|
1272
1331
|
pm_serialize_node(parser, (pm_node_t *) ((pm_multi_target_node_t *)node)->rights.nodes[index], buffer);
|
1273
1332
|
}
|
@@ -1287,7 +1346,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1287
1346
|
}
|
1288
1347
|
case PM_MULTI_WRITE_NODE: {
|
1289
1348
|
uint32_t lefts_size = pm_sizet_to_u32(((pm_multi_write_node_t *)node)->lefts.size);
|
1290
|
-
|
1349
|
+
pm_buffer_append_varuint(buffer, lefts_size);
|
1291
1350
|
for (uint32_t index = 0; index < lefts_size; index++) {
|
1292
1351
|
pm_serialize_node(parser, (pm_node_t *) ((pm_multi_write_node_t *)node)->lefts.nodes[index], buffer);
|
1293
1352
|
}
|
@@ -1297,7 +1356,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1297
1356
|
pm_serialize_node(parser, (pm_node_t *)((pm_multi_write_node_t *)node)->rest, buffer);
|
1298
1357
|
}
|
1299
1358
|
uint32_t rights_size = pm_sizet_to_u32(((pm_multi_write_node_t *)node)->rights.size);
|
1300
|
-
|
1359
|
+
pm_buffer_append_varuint(buffer, rights_size);
|
1301
1360
|
for (uint32_t index = 0; index < rights_size; index++) {
|
1302
1361
|
pm_serialize_node(parser, (pm_node_t *) ((pm_multi_write_node_t *)node)->rights.nodes[index], buffer);
|
1303
1362
|
}
|
@@ -1334,18 +1393,22 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1334
1393
|
pm_serialize_location(parser, &((pm_no_keywords_parameter_node_t *)node)->keyword_loc, buffer);
|
1335
1394
|
break;
|
1336
1395
|
}
|
1396
|
+
case PM_NUMBERED_PARAMETERS_NODE: {
|
1397
|
+
pm_buffer_append_byte(buffer, ((pm_numbered_parameters_node_t *)node)->maximum);
|
1398
|
+
break;
|
1399
|
+
}
|
1337
1400
|
case PM_NUMBERED_REFERENCE_READ_NODE: {
|
1338
|
-
|
1401
|
+
pm_buffer_append_varuint(buffer, ((pm_numbered_reference_read_node_t *)node)->number);
|
1339
1402
|
break;
|
1340
1403
|
}
|
1341
1404
|
case PM_OPTIONAL_KEYWORD_PARAMETER_NODE: {
|
1342
|
-
|
1405
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_optional_keyword_parameter_node_t *)node)->name));
|
1343
1406
|
pm_serialize_location(parser, &((pm_optional_keyword_parameter_node_t *)node)->name_loc, buffer);
|
1344
1407
|
pm_serialize_node(parser, (pm_node_t *)((pm_optional_keyword_parameter_node_t *)node)->value, buffer);
|
1345
1408
|
break;
|
1346
1409
|
}
|
1347
1410
|
case PM_OPTIONAL_PARAMETER_NODE: {
|
1348
|
-
|
1411
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_optional_parameter_node_t *)node)->name));
|
1349
1412
|
pm_serialize_location(parser, &((pm_optional_parameter_node_t *)node)->name_loc, buffer);
|
1350
1413
|
pm_serialize_location(parser, &((pm_optional_parameter_node_t *)node)->operator_loc, buffer);
|
1351
1414
|
pm_serialize_node(parser, (pm_node_t *)((pm_optional_parameter_node_t *)node)->value, buffer);
|
@@ -1359,12 +1422,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1359
1422
|
}
|
1360
1423
|
case PM_PARAMETERS_NODE: {
|
1361
1424
|
uint32_t requireds_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->requireds.size);
|
1362
|
-
|
1425
|
+
pm_buffer_append_varuint(buffer, requireds_size);
|
1363
1426
|
for (uint32_t index = 0; index < requireds_size; index++) {
|
1364
1427
|
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->requireds.nodes[index], buffer);
|
1365
1428
|
}
|
1366
1429
|
uint32_t optionals_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->optionals.size);
|
1367
|
-
|
1430
|
+
pm_buffer_append_varuint(buffer, optionals_size);
|
1368
1431
|
for (uint32_t index = 0; index < optionals_size; index++) {
|
1369
1432
|
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->optionals.nodes[index], buffer);
|
1370
1433
|
}
|
@@ -1374,12 +1437,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1374
1437
|
pm_serialize_node(parser, (pm_node_t *)((pm_parameters_node_t *)node)->rest, buffer);
|
1375
1438
|
}
|
1376
1439
|
uint32_t posts_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->posts.size);
|
1377
|
-
|
1440
|
+
pm_buffer_append_varuint(buffer, posts_size);
|
1378
1441
|
for (uint32_t index = 0; index < posts_size; index++) {
|
1379
1442
|
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->posts.nodes[index], buffer);
|
1380
1443
|
}
|
1381
1444
|
uint32_t keywords_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->keywords.size);
|
1382
|
-
|
1445
|
+
pm_buffer_append_varuint(buffer, keywords_size);
|
1383
1446
|
for (uint32_t index = 0; index < keywords_size; index++) {
|
1384
1447
|
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->keywords.nodes[index], buffer);
|
1385
1448
|
}
|
@@ -1441,14 +1504,15 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1441
1504
|
}
|
1442
1505
|
case PM_PROGRAM_NODE: {
|
1443
1506
|
uint32_t locals_size = pm_sizet_to_u32(((pm_program_node_t *)node)->locals.size);
|
1444
|
-
|
1507
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
1445
1508
|
for (uint32_t index = 0; index < locals_size; index++) {
|
1446
|
-
|
1509
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_program_node_t *)node)->locals.ids[index]));
|
1447
1510
|
}
|
1448
1511
|
pm_serialize_node(parser, (pm_node_t *)((pm_program_node_t *)node)->statements, buffer);
|
1449
1512
|
break;
|
1450
1513
|
}
|
1451
1514
|
case PM_RANGE_NODE: {
|
1515
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1452
1516
|
if (((pm_range_node_t *)node)->left == NULL) {
|
1453
1517
|
pm_buffer_append_byte(buffer, 0);
|
1454
1518
|
} else {
|
@@ -1460,7 +1524,6 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1460
1524
|
pm_serialize_node(parser, (pm_node_t *)((pm_range_node_t *)node)->right, buffer);
|
1461
1525
|
}
|
1462
1526
|
pm_serialize_location(parser, &((pm_range_node_t *)node)->operator_loc, buffer);
|
1463
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1464
1527
|
break;
|
1465
1528
|
}
|
1466
1529
|
case PM_RATIONAL_NODE: {
|
@@ -1471,20 +1534,20 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1471
1534
|
break;
|
1472
1535
|
}
|
1473
1536
|
case PM_REGULAR_EXPRESSION_NODE: {
|
1537
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1474
1538
|
pm_serialize_location(parser, &((pm_regular_expression_node_t *)node)->opening_loc, buffer);
|
1475
1539
|
pm_serialize_location(parser, &((pm_regular_expression_node_t *)node)->content_loc, buffer);
|
1476
1540
|
pm_serialize_location(parser, &((pm_regular_expression_node_t *)node)->closing_loc, buffer);
|
1477
1541
|
pm_serialize_string(parser, &((pm_regular_expression_node_t *)node)->unescaped, buffer);
|
1478
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1479
1542
|
break;
|
1480
1543
|
}
|
1481
1544
|
case PM_REQUIRED_KEYWORD_PARAMETER_NODE: {
|
1482
|
-
|
1545
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_required_keyword_parameter_node_t *)node)->name));
|
1483
1546
|
pm_serialize_location(parser, &((pm_required_keyword_parameter_node_t *)node)->name_loc, buffer);
|
1484
1547
|
break;
|
1485
1548
|
}
|
1486
1549
|
case PM_REQUIRED_PARAMETER_NODE: {
|
1487
|
-
|
1550
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_required_parameter_node_t *)node)->name));
|
1488
1551
|
break;
|
1489
1552
|
}
|
1490
1553
|
case PM_RESCUE_MODIFIER_NODE: {
|
@@ -1496,7 +1559,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1496
1559
|
case PM_RESCUE_NODE: {
|
1497
1560
|
pm_serialize_location(parser, &((pm_rescue_node_t *)node)->keyword_loc, buffer);
|
1498
1561
|
uint32_t exceptions_size = pm_sizet_to_u32(((pm_rescue_node_t *)node)->exceptions.size);
|
1499
|
-
|
1562
|
+
pm_buffer_append_varuint(buffer, exceptions_size);
|
1500
1563
|
for (uint32_t index = 0; index < exceptions_size; index++) {
|
1501
1564
|
pm_serialize_node(parser, (pm_node_t *) ((pm_rescue_node_t *)node)->exceptions.nodes[index], buffer);
|
1502
1565
|
}
|
@@ -1524,7 +1587,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1524
1587
|
break;
|
1525
1588
|
}
|
1526
1589
|
case PM_REST_PARAMETER_NODE: {
|
1527
|
-
|
1590
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_rest_parameter_node_t *)node)->name));
|
1528
1591
|
if (((pm_rest_parameter_node_t *)node)->name_loc.start == NULL) {
|
1529
1592
|
pm_buffer_append_byte(buffer, 0);
|
1530
1593
|
} else {
|
@@ -1551,9 +1614,9 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1551
1614
|
}
|
1552
1615
|
case PM_SINGLETON_CLASS_NODE: {
|
1553
1616
|
uint32_t locals_size = pm_sizet_to_u32(((pm_singleton_class_node_t *)node)->locals.size);
|
1554
|
-
|
1617
|
+
pm_buffer_append_varuint(buffer, locals_size);
|
1555
1618
|
for (uint32_t index = 0; index < locals_size; index++) {
|
1556
|
-
|
1619
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((pm_singleton_class_node_t *)node)->locals.ids[index]));
|
1557
1620
|
}
|
1558
1621
|
pm_serialize_location(parser, &((pm_singleton_class_node_t *)node)->class_keyword_loc, buffer);
|
1559
1622
|
pm_serialize_location(parser, &((pm_singleton_class_node_t *)node)->operator_loc, buffer);
|
@@ -1587,19 +1650,14 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1587
1650
|
}
|
1588
1651
|
case PM_STATEMENTS_NODE: {
|
1589
1652
|
uint32_t body_size = pm_sizet_to_u32(((pm_statements_node_t *)node)->body.size);
|
1590
|
-
|
1653
|
+
pm_buffer_append_varuint(buffer, body_size);
|
1591
1654
|
for (uint32_t index = 0; index < body_size; index++) {
|
1592
1655
|
pm_serialize_node(parser, (pm_node_t *) ((pm_statements_node_t *)node)->body.nodes[index], buffer);
|
1593
1656
|
}
|
1594
1657
|
break;
|
1595
1658
|
}
|
1596
|
-
case PM_STRING_CONCAT_NODE: {
|
1597
|
-
pm_serialize_node(parser, (pm_node_t *)((pm_string_concat_node_t *)node)->left, buffer);
|
1598
|
-
pm_serialize_node(parser, (pm_node_t *)((pm_string_concat_node_t *)node)->right, buffer);
|
1599
|
-
break;
|
1600
|
-
}
|
1601
1659
|
case PM_STRING_NODE: {
|
1602
|
-
|
1660
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1603
1661
|
if (((pm_string_node_t *)node)->opening_loc.start == NULL) {
|
1604
1662
|
pm_buffer_append_byte(buffer, 0);
|
1605
1663
|
} else {
|
@@ -1643,6 +1701,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1643
1701
|
break;
|
1644
1702
|
}
|
1645
1703
|
case PM_SYMBOL_NODE: {
|
1704
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1646
1705
|
if (((pm_symbol_node_t *)node)->opening_loc.start == NULL) {
|
1647
1706
|
pm_buffer_append_byte(buffer, 0);
|
1648
1707
|
} else {
|
@@ -1669,7 +1728,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1669
1728
|
}
|
1670
1729
|
case PM_UNDEF_NODE: {
|
1671
1730
|
uint32_t names_size = pm_sizet_to_u32(((pm_undef_node_t *)node)->names.size);
|
1672
|
-
|
1731
|
+
pm_buffer_append_varuint(buffer, names_size);
|
1673
1732
|
for (uint32_t index = 0; index < names_size; index++) {
|
1674
1733
|
pm_serialize_node(parser, (pm_node_t *) ((pm_undef_node_t *)node)->names.nodes[index], buffer);
|
1675
1734
|
}
|
@@ -1679,6 +1738,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1679
1738
|
case PM_UNLESS_NODE: {
|
1680
1739
|
pm_serialize_location(parser, &((pm_unless_node_t *)node)->keyword_loc, buffer);
|
1681
1740
|
pm_serialize_node(parser, (pm_node_t *)((pm_unless_node_t *)node)->predicate, buffer);
|
1741
|
+
if (((pm_unless_node_t *)node)->then_keyword_loc.start == NULL) {
|
1742
|
+
pm_buffer_append_byte(buffer, 0);
|
1743
|
+
} else {
|
1744
|
+
pm_buffer_append_byte(buffer, 1);
|
1745
|
+
pm_serialize_location(parser, &((pm_unless_node_t *)node)->then_keyword_loc, buffer);
|
1746
|
+
}
|
1682
1747
|
if (((pm_unless_node_t *)node)->statements == NULL) {
|
1683
1748
|
pm_buffer_append_byte(buffer, 0);
|
1684
1749
|
} else {
|
@@ -1698,6 +1763,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1698
1763
|
break;
|
1699
1764
|
}
|
1700
1765
|
case PM_UNTIL_NODE: {
|
1766
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1701
1767
|
pm_serialize_location(parser, &((pm_until_node_t *)node)->keyword_loc, buffer);
|
1702
1768
|
if (((pm_until_node_t *)node)->closing_loc.start == NULL) {
|
1703
1769
|
pm_buffer_append_byte(buffer, 0);
|
@@ -1711,13 +1777,12 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1711
1777
|
} else {
|
1712
1778
|
pm_serialize_node(parser, (pm_node_t *)((pm_until_node_t *)node)->statements, buffer);
|
1713
1779
|
}
|
1714
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1715
1780
|
break;
|
1716
1781
|
}
|
1717
1782
|
case PM_WHEN_NODE: {
|
1718
1783
|
pm_serialize_location(parser, &((pm_when_node_t *)node)->keyword_loc, buffer);
|
1719
1784
|
uint32_t conditions_size = pm_sizet_to_u32(((pm_when_node_t *)node)->conditions.size);
|
1720
|
-
|
1785
|
+
pm_buffer_append_varuint(buffer, conditions_size);
|
1721
1786
|
for (uint32_t index = 0; index < conditions_size; index++) {
|
1722
1787
|
pm_serialize_node(parser, (pm_node_t *) ((pm_when_node_t *)node)->conditions.nodes[index], buffer);
|
1723
1788
|
}
|
@@ -1729,6 +1794,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1729
1794
|
break;
|
1730
1795
|
}
|
1731
1796
|
case PM_WHILE_NODE: {
|
1797
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1732
1798
|
pm_serialize_location(parser, &((pm_while_node_t *)node)->keyword_loc, buffer);
|
1733
1799
|
if (((pm_while_node_t *)node)->closing_loc.start == NULL) {
|
1734
1800
|
pm_buffer_append_byte(buffer, 0);
|
@@ -1742,10 +1808,10 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1742
1808
|
} else {
|
1743
1809
|
pm_serialize_node(parser, (pm_node_t *)((pm_while_node_t *)node)->statements, buffer);
|
1744
1810
|
}
|
1745
|
-
pm_buffer_append_varint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1746
1811
|
break;
|
1747
1812
|
}
|
1748
1813
|
case PM_X_STRING_NODE: {
|
1814
|
+
pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK));
|
1749
1815
|
pm_serialize_location(parser, &((pm_x_string_node_t *)node)->opening_loc, buffer);
|
1750
1816
|
pm_serialize_location(parser, &((pm_x_string_node_t *)node)->content_loc, buffer);
|
1751
1817
|
pm_serialize_location(parser, &((pm_x_string_node_t *)node)->closing_loc, buffer);
|
@@ -1782,8 +1848,7 @@ pm_serialize_comment(pm_parser_t *parser, pm_comment_t *comment, pm_buffer_t *bu
|
|
1782
1848
|
pm_buffer_append_byte(buffer, (uint8_t) comment->type);
|
1783
1849
|
|
1784
1850
|
// serialize location
|
1785
|
-
|
1786
|
-
pm_buffer_append_varint(buffer, pm_ptrdifft_to_u32(comment->end - comment->start));
|
1851
|
+
pm_serialize_location(parser, &comment->location, buffer);
|
1787
1852
|
}
|
1788
1853
|
|
1789
1854
|
/**
|
@@ -1791,7 +1856,7 @@ pm_serialize_comment(pm_parser_t *parser, pm_comment_t *comment, pm_buffer_t *bu
|
|
1791
1856
|
*/
|
1792
1857
|
void
|
1793
1858
|
pm_serialize_comment_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_t *buffer) {
|
1794
|
-
|
1859
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(pm_list_size(list)));
|
1795
1860
|
|
1796
1861
|
pm_comment_t *comment;
|
1797
1862
|
for (comment = (pm_comment_t *) list->head; comment != NULL; comment = (pm_comment_t *) comment->node.next) {
|
@@ -1802,17 +1867,17 @@ pm_serialize_comment_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_t *buf
|
|
1802
1867
|
static void
|
1803
1868
|
pm_serialize_magic_comment(pm_parser_t *parser, pm_magic_comment_t *magic_comment, pm_buffer_t *buffer) {
|
1804
1869
|
// serialize key location
|
1805
|
-
|
1806
|
-
|
1870
|
+
pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(magic_comment->key_start - parser->start));
|
1871
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(magic_comment->key_length));
|
1807
1872
|
|
1808
1873
|
// serialize value location
|
1809
|
-
|
1810
|
-
|
1874
|
+
pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(magic_comment->value_start - parser->start));
|
1875
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(magic_comment->value_length));
|
1811
1876
|
}
|
1812
1877
|
|
1813
1878
|
static void
|
1814
1879
|
pm_serialize_magic_comment_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_t *buffer) {
|
1815
|
-
|
1880
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(pm_list_size(list)));
|
1816
1881
|
|
1817
1882
|
pm_magic_comment_t *magic_comment;
|
1818
1883
|
for (magic_comment = (pm_magic_comment_t *) list->head; magic_comment != NULL; magic_comment = (pm_magic_comment_t *) magic_comment->node.next) {
|
@@ -1820,21 +1885,30 @@ pm_serialize_magic_comment_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_
|
|
1820
1885
|
}
|
1821
1886
|
}
|
1822
1887
|
|
1888
|
+
static void
|
1889
|
+
pm_serialize_data_loc(const pm_parser_t *parser, pm_buffer_t *buffer) {
|
1890
|
+
if (parser->data_loc.end == NULL) {
|
1891
|
+
pm_buffer_append_byte(buffer, 0);
|
1892
|
+
} else {
|
1893
|
+
pm_buffer_append_byte(buffer, 1);
|
1894
|
+
pm_serialize_location(parser, &parser->data_loc, buffer);
|
1895
|
+
}
|
1896
|
+
}
|
1897
|
+
|
1823
1898
|
static void
|
1824
1899
|
pm_serialize_diagnostic(pm_parser_t *parser, pm_diagnostic_t *diagnostic, pm_buffer_t *buffer) {
|
1825
1900
|
// serialize message
|
1826
1901
|
size_t message_length = strlen(diagnostic->message);
|
1827
|
-
|
1902
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(message_length));
|
1828
1903
|
pm_buffer_append_string(buffer, diagnostic->message, message_length);
|
1829
1904
|
|
1830
1905
|
// serialize location
|
1831
|
-
|
1832
|
-
pm_buffer_append_varint(buffer, pm_ptrdifft_to_u32(diagnostic->end - diagnostic->start));
|
1906
|
+
pm_serialize_location(parser, &diagnostic->location, buffer);
|
1833
1907
|
}
|
1834
1908
|
|
1835
1909
|
static void
|
1836
1910
|
pm_serialize_diagnostic_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_t *buffer) {
|
1837
|
-
|
1911
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(pm_list_size(list)));
|
1838
1912
|
|
1839
1913
|
pm_diagnostic_t *diagnostic;
|
1840
1914
|
for (diagnostic = (pm_diagnostic_t *) list->head; diagnostic != NULL; diagnostic = (pm_diagnostic_t *) diagnostic->node.next) {
|
@@ -1846,22 +1920,23 @@ pm_serialize_diagnostic_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_t *
|
|
1846
1920
|
* Serialize the name of the encoding to the buffer.
|
1847
1921
|
*/
|
1848
1922
|
void
|
1849
|
-
pm_serialize_encoding(pm_encoding_t *encoding, pm_buffer_t *buffer) {
|
1923
|
+
pm_serialize_encoding(const pm_encoding_t *encoding, pm_buffer_t *buffer) {
|
1850
1924
|
size_t encoding_length = strlen(encoding->name);
|
1851
|
-
|
1925
|
+
pm_buffer_append_varuint(buffer, pm_sizet_to_u32(encoding_length));
|
1852
1926
|
pm_buffer_append_string(buffer, encoding->name, encoding_length);
|
1853
1927
|
}
|
1854
1928
|
|
1855
|
-
#line
|
1929
|
+
#line 216 "serialize.c.erb"
|
1856
1930
|
/**
|
1857
1931
|
* Serialize the encoding, metadata, nodes, and constant pool.
|
1858
1932
|
*/
|
1859
1933
|
void
|
1860
1934
|
pm_serialize_content(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
1861
|
-
pm_serialize_encoding(
|
1862
|
-
|
1935
|
+
pm_serialize_encoding(parser->encoding, buffer);
|
1936
|
+
pm_buffer_append_varsint(buffer, parser->start_line);
|
1863
1937
|
pm_serialize_comment_list(parser, &parser->comment_list, buffer);
|
1864
1938
|
pm_serialize_magic_comment_list(parser, &parser->magic_comment_list, buffer);
|
1939
|
+
pm_serialize_data_loc(parser, buffer);
|
1865
1940
|
pm_serialize_diagnostic_list(parser, &parser->error_list, buffer);
|
1866
1941
|
pm_serialize_diagnostic_list(parser, &parser->warning_list, buffer);
|
1867
1942
|
|
@@ -1871,7 +1946,7 @@ pm_serialize_content(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer)
|
|
1871
1946
|
pm_buffer_append_zeroes(buffer, 4);
|
1872
1947
|
|
1873
1948
|
// Next, encode the length of the constant pool.
|
1874
|
-
|
1949
|
+
pm_buffer_append_varuint(buffer, parser->constant_pool.size);
|
1875
1950
|
|
1876
1951
|
// Now we're going to serialize the content of the node.
|
1877
1952
|
pm_serialize_node(parser, node, buffer);
|
@@ -1926,10 +2001,10 @@ static void
|
|
1926
2001
|
serialize_token(void *data, pm_parser_t *parser, pm_token_t *token) {
|
1927
2002
|
pm_buffer_t *buffer = (pm_buffer_t *) data;
|
1928
2003
|
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1932
|
-
|
2004
|
+
pm_buffer_append_varuint(buffer, token->type);
|
2005
|
+
pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(token->start - parser->start));
|
2006
|
+
pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(token->end - token->start));
|
2007
|
+
pm_buffer_append_varuint(buffer, parser->lex_state);
|
1933
2008
|
}
|
1934
2009
|
|
1935
2010
|
/**
|
@@ -1938,7 +2013,7 @@ serialize_token(void *data, pm_parser_t *parser, pm_token_t *token) {
|
|
1938
2013
|
PRISM_EXPORTED_FUNCTION void
|
1939
2014
|
pm_serialize_lex(pm_buffer_t *buffer, const uint8_t *source, size_t size, const char *data) {
|
1940
2015
|
pm_options_t options = { 0 };
|
1941
|
-
|
2016
|
+
pm_options_read(&options, data);
|
1942
2017
|
|
1943
2018
|
pm_parser_t parser;
|
1944
2019
|
pm_parser_init(&parser, source, size, &options);
|
@@ -1954,10 +2029,11 @@ pm_serialize_lex(pm_buffer_t *buffer, const uint8_t *source, size_t size, const
|
|
1954
2029
|
// Append 0 to mark end of tokens.
|
1955
2030
|
pm_buffer_append_byte(buffer, 0);
|
1956
2031
|
|
1957
|
-
pm_serialize_encoding(
|
1958
|
-
|
2032
|
+
pm_serialize_encoding(parser.encoding, buffer);
|
2033
|
+
pm_buffer_append_varsint(buffer, parser.start_line);
|
1959
2034
|
pm_serialize_comment_list(&parser, &parser.comment_list, buffer);
|
1960
2035
|
pm_serialize_magic_comment_list(&parser, &parser.magic_comment_list, buffer);
|
2036
|
+
pm_serialize_data_loc(&parser, buffer);
|
1961
2037
|
pm_serialize_diagnostic_list(&parser, &parser.error_list, buffer);
|
1962
2038
|
pm_serialize_diagnostic_list(&parser, &parser.warning_list, buffer);
|
1963
2039
|
|
@@ -1973,7 +2049,7 @@ pm_serialize_lex(pm_buffer_t *buffer, const uint8_t *source, size_t size, const
|
|
1973
2049
|
PRISM_EXPORTED_FUNCTION void
|
1974
2050
|
pm_serialize_parse_lex(pm_buffer_t *buffer, const uint8_t *source, size_t size, const char *data) {
|
1975
2051
|
pm_options_t options = { 0 };
|
1976
|
-
|
2052
|
+
pm_options_read(&options, data);
|
1977
2053
|
|
1978
2054
|
pm_parser_t parser;
|
1979
2055
|
pm_parser_init(&parser, source, size, &options);
|
@@ -1993,3 +2069,24 @@ pm_serialize_parse_lex(pm_buffer_t *buffer, const uint8_t *source, size_t size,
|
|
1993
2069
|
pm_parser_free(&parser);
|
1994
2070
|
pm_options_free(&options);
|
1995
2071
|
}
|
2072
|
+
|
2073
|
+
/**
|
2074
|
+
* Parse the source and return true if it parses without errors or warnings.
|
2075
|
+
*/
|
2076
|
+
PRISM_EXPORTED_FUNCTION bool
|
2077
|
+
pm_parse_success_p(const uint8_t *source, size_t size, const char *data) {
|
2078
|
+
pm_options_t options = { 0 };
|
2079
|
+
pm_options_read(&options, data);
|
2080
|
+
|
2081
|
+
pm_parser_t parser;
|
2082
|
+
pm_parser_init(&parser, source, size, &options);
|
2083
|
+
|
2084
|
+
pm_node_t *node = pm_parse(&parser);
|
2085
|
+
pm_node_destroy(&parser, node);
|
2086
|
+
|
2087
|
+
bool result = parser.error_list.size == 0 && parser.warning_list.size == 0;
|
2088
|
+
pm_parser_free(&parser);
|
2089
|
+
pm_options_free(&options);
|
2090
|
+
|
2091
|
+
return result;
|
2092
|
+
}
|