14#ifdef PRISM_EXCLUDE_SERIALIZATION
18typedef int pm_serialize_unused_t;
24#include "prism/internal/buffer.h"
25#include "prism/internal/comments.h"
26#include "prism/internal/diagnostic.h"
27#include "prism/internal/encoding.h"
28#include "prism/internal/list.h"
29#include "prism/internal/magic_comments.h"
30#include "prism/internal/options.h"
31#include "prism/internal/parser.h"
42pm_ptrdifft_to_u32(ptrdiff_t value) {
43 assert(value >= 0 && ((
unsigned long) value) < UINT32_MAX);
44 return (uint32_t) value;
48pm_sizet_to_u32(
size_t value) {
49 assert(value < UINT32_MAX);
50 return (uint32_t) value;
55 pm_buffer_append_varuint(buffer, location->
start);
56 pm_buffer_append_varuint(buffer, location->
length);
61 uint32_t length = pm_sizet_to_u32(pm_string_length(
string));
62 pm_buffer_append_varuint(buffer, length);
63 pm_buffer_append_bytes(buffer, pm_string_source(
string), length);
68 pm_buffer_append_byte(buffer, integer->
negative ? 1 : 0);
69 if (integer->
values == NULL) {
70 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(1));
71 pm_buffer_append_varuint(buffer, integer->
value);
73 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(integer->
length));
74 for (
size_t i = 0; i < integer->
length; i++) {
75 pm_buffer_append_varuint(buffer, integer->
values[i]);
82 pm_buffer_append_byte(buffer, (uint8_t) PM_NODE_TYPE(node));
84 pm_buffer_append_varuint(buffer, node->
node_id);
85 pm_serialize_location(&node->
location, buffer);
87 switch (PM_NODE_TYPE(node)) {
92 case PM_ALIAS_GLOBAL_VARIABLE_NODE: {
93 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
99 case PM_ALIAS_METHOD_NODE: {
100 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
106 case PM_ALTERNATION_PATTERN_NODE: {
107 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
114 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
117 pm_serialize_location(&((
pm_and_node_t *)node)->operator_loc, buffer);
120 case PM_ARGUMENTS_NODE: {
121 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
123 pm_buffer_append_varuint(buffer, arguments_size);
124 for (uint32_t index = 0; index < arguments_size; index++) {
129 case PM_ARRAY_NODE: {
130 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
131 uint32_t elements_size = pm_sizet_to_u32(((
pm_array_node_t *)node)->elements.size);
132 pm_buffer_append_varuint(buffer, elements_size);
133 for (uint32_t index = 0; index < elements_size; index++) {
137 pm_buffer_append_byte(buffer, 0);
139 pm_buffer_append_byte(buffer, 1);
140 pm_serialize_location(&((
pm_array_node_t *)node)->opening_loc, buffer);
143 pm_buffer_append_byte(buffer, 0);
145 pm_buffer_append_byte(buffer, 1);
146 pm_serialize_location(&((
pm_array_node_t *)node)->closing_loc, buffer);
150 case PM_ARRAY_PATTERN_NODE: {
151 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
153 pm_buffer_append_byte(buffer, 0);
158 pm_buffer_append_varuint(buffer, requireds_size);
159 for (uint32_t index = 0; index < requireds_size; index++) {
163 pm_buffer_append_byte(buffer, 0);
168 pm_buffer_append_varuint(buffer, posts_size);
169 for (uint32_t index = 0; index < posts_size; index++) {
173 pm_buffer_append_byte(buffer, 0);
175 pm_buffer_append_byte(buffer, 1);
179 pm_buffer_append_byte(buffer, 0);
181 pm_buffer_append_byte(buffer, 1);
186 case PM_ASSOC_NODE: {
187 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
191 pm_buffer_append_byte(buffer, 0);
193 pm_buffer_append_byte(buffer, 1);
194 pm_serialize_location(&((
pm_assoc_node_t *)node)->operator_loc, buffer);
198 case PM_ASSOC_SPLAT_NODE: {
199 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
201 pm_buffer_append_byte(buffer, 0);
208 case PM_BACK_REFERENCE_READ_NODE: {
209 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
213 case PM_BEGIN_NODE: {
214 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
216 pm_buffer_append_byte(buffer, 0);
218 pm_buffer_append_byte(buffer, 1);
219 pm_serialize_location(&((
pm_begin_node_t *)node)->begin_keyword_loc, buffer);
222 pm_buffer_append_byte(buffer, 0);
227 pm_buffer_append_byte(buffer, 0);
232 pm_buffer_append_byte(buffer, 0);
237 pm_buffer_append_byte(buffer, 0);
242 pm_buffer_append_byte(buffer, 0);
244 pm_buffer_append_byte(buffer, 1);
245 pm_serialize_location(&((
pm_begin_node_t *)node)->end_keyword_loc, buffer);
249 case PM_BLOCK_ARGUMENT_NODE: {
250 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
252 pm_buffer_append_byte(buffer, 0);
259 case PM_BLOCK_LOCAL_VARIABLE_NODE: {
260 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
264 case PM_BLOCK_NODE: {
265 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
266 uint32_t locals_size = pm_sizet_to_u32(((
pm_block_node_t *)node)->locals.size);
267 pm_buffer_append_varuint(buffer, locals_size);
268 for (uint32_t index = 0; index < locals_size; index++) {
269 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_block_node_t *)node)->locals.ids[index]));
272 pm_buffer_append_byte(buffer, 0);
277 pm_buffer_append_byte(buffer, 0);
281 pm_serialize_location(&((
pm_block_node_t *)node)->opening_loc, buffer);
282 pm_serialize_location(&((
pm_block_node_t *)node)->closing_loc, buffer);
285 case PM_BLOCK_PARAMETER_NODE: {
286 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
289 pm_buffer_append_byte(buffer, 0);
291 pm_buffer_append_byte(buffer, 1);
297 case PM_BLOCK_PARAMETERS_NODE: {
298 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
300 pm_buffer_append_byte(buffer, 0);
305 pm_buffer_append_varuint(buffer, locals_size);
306 for (uint32_t index = 0; index < locals_size; index++) {
310 pm_buffer_append_byte(buffer, 0);
312 pm_buffer_append_byte(buffer, 1);
316 pm_buffer_append_byte(buffer, 0);
318 pm_buffer_append_byte(buffer, 1);
323 case PM_BREAK_NODE: {
324 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
326 pm_buffer_append_byte(buffer, 0);
330 pm_serialize_location(&((
pm_break_node_t *)node)->keyword_loc, buffer);
333 case PM_CALL_AND_WRITE_NODE: {
334 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
336 pm_buffer_append_byte(buffer, 0);
341 pm_buffer_append_byte(buffer, 0);
343 pm_buffer_append_byte(buffer, 1);
347 pm_buffer_append_byte(buffer, 0);
349 pm_buffer_append_byte(buffer, 1);
359 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
361 pm_buffer_append_byte(buffer, 0);
366 pm_buffer_append_byte(buffer, 0);
368 pm_buffer_append_byte(buffer, 1);
369 pm_serialize_location(&((
pm_call_node_t *)node)->call_operator_loc, buffer);
371 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_call_node_t *)node)->name));
373 pm_buffer_append_byte(buffer, 0);
375 pm_buffer_append_byte(buffer, 1);
376 pm_serialize_location(&((
pm_call_node_t *)node)->message_loc, buffer);
379 pm_buffer_append_byte(buffer, 0);
381 pm_buffer_append_byte(buffer, 1);
382 pm_serialize_location(&((
pm_call_node_t *)node)->opening_loc, buffer);
385 pm_buffer_append_byte(buffer, 0);
390 pm_buffer_append_byte(buffer, 0);
392 pm_buffer_append_byte(buffer, 1);
393 pm_serialize_location(&((
pm_call_node_t *)node)->closing_loc, buffer);
396 pm_buffer_append_byte(buffer, 0);
398 pm_buffer_append_byte(buffer, 1);
399 pm_serialize_location(&((
pm_call_node_t *)node)->equal_loc, buffer);
402 pm_buffer_append_byte(buffer, 0);
408 case PM_CALL_OPERATOR_WRITE_NODE: {
409 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
411 pm_buffer_append_byte(buffer, 0);
416 pm_buffer_append_byte(buffer, 0);
418 pm_buffer_append_byte(buffer, 1);
422 pm_buffer_append_byte(buffer, 0);
424 pm_buffer_append_byte(buffer, 1);
434 case PM_CALL_OR_WRITE_NODE: {
435 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
437 pm_buffer_append_byte(buffer, 0);
442 pm_buffer_append_byte(buffer, 0);
444 pm_buffer_append_byte(buffer, 1);
448 pm_buffer_append_byte(buffer, 0);
450 pm_buffer_append_byte(buffer, 1);
459 case PM_CALL_TARGET_NODE: {
460 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
467 case PM_CAPTURE_PATTERN_NODE: {
468 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
474 case PM_CASE_MATCH_NODE: {
475 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
477 pm_buffer_append_byte(buffer, 0);
482 pm_buffer_append_varuint(buffer, conditions_size);
483 for (uint32_t index = 0; index < conditions_size; index++) {
487 pm_buffer_append_byte(buffer, 0);
496 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
498 pm_buffer_append_byte(buffer, 0);
502 uint32_t conditions_size = pm_sizet_to_u32(((
pm_case_node_t *)node)->conditions.size);
503 pm_buffer_append_varuint(buffer, conditions_size);
504 for (uint32_t index = 0; index < conditions_size; index++) {
508 pm_buffer_append_byte(buffer, 0);
512 pm_serialize_location(&((
pm_case_node_t *)node)->case_keyword_loc, buffer);
513 pm_serialize_location(&((
pm_case_node_t *)node)->end_keyword_loc, buffer);
516 case PM_CLASS_NODE: {
517 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
518 uint32_t locals_size = pm_sizet_to_u32(((
pm_class_node_t *)node)->locals.size);
519 pm_buffer_append_varuint(buffer, locals_size);
520 for (uint32_t index = 0; index < locals_size; index++) {
521 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_class_node_t *)node)->locals.ids[index]));
523 pm_serialize_location(&((
pm_class_node_t *)node)->class_keyword_loc, buffer);
526 pm_buffer_append_byte(buffer, 0);
528 pm_buffer_append_byte(buffer, 1);
529 pm_serialize_location(&((
pm_class_node_t *)node)->inheritance_operator_loc, buffer);
532 pm_buffer_append_byte(buffer, 0);
537 pm_buffer_append_byte(buffer, 0);
541 pm_serialize_location(&((
pm_class_node_t *)node)->end_keyword_loc, buffer);
542 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_class_node_t *)node)->name));
545 case PM_CLASS_VARIABLE_AND_WRITE_NODE: {
546 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
553 case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
554 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
562 case PM_CLASS_VARIABLE_OR_WRITE_NODE: {
563 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
570 case PM_CLASS_VARIABLE_READ_NODE: {
571 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
575 case PM_CLASS_VARIABLE_TARGET_NODE: {
576 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
580 case PM_CLASS_VARIABLE_WRITE_NODE: {
581 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
588 case PM_CONSTANT_AND_WRITE_NODE: {
589 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
596 case PM_CONSTANT_OPERATOR_WRITE_NODE: {
597 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
605 case PM_CONSTANT_OR_WRITE_NODE: {
606 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
613 case PM_CONSTANT_PATH_AND_WRITE_NODE: {
614 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
620 case PM_CONSTANT_PATH_NODE: {
621 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
623 pm_buffer_append_byte(buffer, 0);
632 case PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
633 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
640 case PM_CONSTANT_PATH_OR_WRITE_NODE: {
641 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
647 case PM_CONSTANT_PATH_TARGET_NODE: {
648 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
650 pm_buffer_append_byte(buffer, 0);
659 case PM_CONSTANT_PATH_WRITE_NODE: {
660 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
666 case PM_CONSTANT_READ_NODE: {
667 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
671 case PM_CONSTANT_TARGET_NODE: {
672 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
676 case PM_CONSTANT_WRITE_NODE: {
677 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
687 size_t length_offset = buffer->length;
688 pm_buffer_append_string(buffer,
"\0\0\0\0", 4);
689 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
690 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_def_node_t *)node)->name));
691 pm_serialize_location(&((
pm_def_node_t *)node)->name_loc, buffer);
693 pm_buffer_append_byte(buffer, 0);
698 pm_buffer_append_byte(buffer, 0);
703 pm_buffer_append_byte(buffer, 0);
707 uint32_t locals_size = pm_sizet_to_u32(((
pm_def_node_t *)node)->locals.size);
708 pm_buffer_append_varuint(buffer, locals_size);
709 for (uint32_t index = 0; index < locals_size; index++) {
710 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_def_node_t *)node)->locals.ids[index]));
712 pm_serialize_location(&((
pm_def_node_t *)node)->def_keyword_loc, buffer);
714 pm_buffer_append_byte(buffer, 0);
716 pm_buffer_append_byte(buffer, 1);
717 pm_serialize_location(&((
pm_def_node_t *)node)->operator_loc, buffer);
720 pm_buffer_append_byte(buffer, 0);
722 pm_buffer_append_byte(buffer, 1);
723 pm_serialize_location(&((
pm_def_node_t *)node)->lparen_loc, buffer);
726 pm_buffer_append_byte(buffer, 0);
728 pm_buffer_append_byte(buffer, 1);
729 pm_serialize_location(&((
pm_def_node_t *)node)->rparen_loc, buffer);
732 pm_buffer_append_byte(buffer, 0);
734 pm_buffer_append_byte(buffer, 1);
735 pm_serialize_location(&((
pm_def_node_t *)node)->equal_loc, buffer);
738 pm_buffer_append_byte(buffer, 0);
740 pm_buffer_append_byte(buffer, 1);
741 pm_serialize_location(&((
pm_def_node_t *)node)->end_keyword_loc, buffer);
744 uint32_t length = pm_sizet_to_u32(buffer->length - length_offset);
745 memcpy(buffer->value + length_offset, &length,
sizeof(uint32_t));
748 case PM_DEFINED_NODE: {
749 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
751 pm_buffer_append_byte(buffer, 0);
753 pm_buffer_append_byte(buffer, 1);
758 pm_buffer_append_byte(buffer, 0);
760 pm_buffer_append_byte(buffer, 1);
767 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
768 pm_serialize_location(&((
pm_else_node_t *)node)->else_keyword_loc, buffer);
770 pm_buffer_append_byte(buffer, 0);
775 pm_buffer_append_byte(buffer, 0);
777 pm_buffer_append_byte(buffer, 1);
778 pm_serialize_location(&((
pm_else_node_t *)node)->end_keyword_loc, buffer);
782 case PM_EMBEDDED_STATEMENTS_NODE: {
783 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
786 pm_buffer_append_byte(buffer, 0);
793 case PM_EMBEDDED_VARIABLE_NODE: {
794 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
799 case PM_ENSURE_NODE: {
800 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
801 pm_serialize_location(&((
pm_ensure_node_t *)node)->ensure_keyword_loc, buffer);
803 pm_buffer_append_byte(buffer, 0);
807 pm_serialize_location(&((
pm_ensure_node_t *)node)->end_keyword_loc, buffer);
810 case PM_ERROR_RECOVERY_NODE: {
811 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
813 pm_buffer_append_byte(buffer, 0);
819 case PM_FALSE_NODE: {
820 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
823 case PM_FIND_PATTERN_NODE: {
824 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
826 pm_buffer_append_byte(buffer, 0);
832 pm_buffer_append_varuint(buffer, requireds_size);
833 for (uint32_t index = 0; index < requireds_size; index++) {
838 pm_buffer_append_byte(buffer, 0);
840 pm_buffer_append_byte(buffer, 1);
844 pm_buffer_append_byte(buffer, 0);
846 pm_buffer_append_byte(buffer, 1);
851 case PM_FLIP_FLOP_NODE: {
852 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
854 pm_buffer_append_byte(buffer, 0);
859 pm_buffer_append_byte(buffer, 0);
866 case PM_FLOAT_NODE: {
867 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
872 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
876 pm_buffer_append_byte(buffer, 0);
880 pm_serialize_location(&((
pm_for_node_t *)node)->for_keyword_loc, buffer);
881 pm_serialize_location(&((
pm_for_node_t *)node)->in_keyword_loc, buffer);
883 pm_buffer_append_byte(buffer, 0);
885 pm_buffer_append_byte(buffer, 1);
886 pm_serialize_location(&((
pm_for_node_t *)node)->do_keyword_loc, buffer);
888 pm_serialize_location(&((
pm_for_node_t *)node)->end_keyword_loc, buffer);
891 case PM_FORWARDING_ARGUMENTS_NODE: {
892 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
895 case PM_FORWARDING_PARAMETER_NODE: {
896 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
899 case PM_FORWARDING_SUPER_NODE: {
900 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
903 pm_buffer_append_byte(buffer, 0);
909 case PM_GLOBAL_VARIABLE_AND_WRITE_NODE: {
910 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
917 case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
918 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
926 case PM_GLOBAL_VARIABLE_OR_WRITE_NODE: {
927 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
934 case PM_GLOBAL_VARIABLE_READ_NODE: {
935 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
939 case PM_GLOBAL_VARIABLE_TARGET_NODE: {
940 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
944 case PM_GLOBAL_VARIABLE_WRITE_NODE: {
945 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
953 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
954 pm_serialize_location(&((
pm_hash_node_t *)node)->opening_loc, buffer);
955 uint32_t elements_size = pm_sizet_to_u32(((
pm_hash_node_t *)node)->elements.size);
956 pm_buffer_append_varuint(buffer, elements_size);
957 for (uint32_t index = 0; index < elements_size; index++) {
960 pm_serialize_location(&((
pm_hash_node_t *)node)->closing_loc, buffer);
963 case PM_HASH_PATTERN_NODE: {
964 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
966 pm_buffer_append_byte(buffer, 0);
971 pm_buffer_append_varuint(buffer, elements_size);
972 for (uint32_t index = 0; index < elements_size; index++) {
976 pm_buffer_append_byte(buffer, 0);
981 pm_buffer_append_byte(buffer, 0);
983 pm_buffer_append_byte(buffer, 1);
987 pm_buffer_append_byte(buffer, 0);
989 pm_buffer_append_byte(buffer, 1);
995 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
996 if (((
pm_if_node_t *)node)->if_keyword_loc.length == 0) {
997 pm_buffer_append_byte(buffer, 0);
999 pm_buffer_append_byte(buffer, 1);
1000 pm_serialize_location(&((
pm_if_node_t *)node)->if_keyword_loc, buffer);
1003 if (((
pm_if_node_t *)node)->then_keyword_loc.length == 0) {
1004 pm_buffer_append_byte(buffer, 0);
1006 pm_buffer_append_byte(buffer, 1);
1007 pm_serialize_location(&((
pm_if_node_t *)node)->then_keyword_loc, buffer);
1010 pm_buffer_append_byte(buffer, 0);
1015 pm_buffer_append_byte(buffer, 0);
1019 if (((
pm_if_node_t *)node)->end_keyword_loc.length == 0) {
1020 pm_buffer_append_byte(buffer, 0);
1022 pm_buffer_append_byte(buffer, 1);
1023 pm_serialize_location(&((
pm_if_node_t *)node)->end_keyword_loc, buffer);
1027 case PM_IMAGINARY_NODE: {
1028 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1032 case PM_IMPLICIT_NODE: {
1033 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1037 case PM_IMPLICIT_REST_NODE: {
1038 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1042 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1045 pm_buffer_append_byte(buffer, 0);
1049 pm_serialize_location(&((
pm_in_node_t *)node)->in_loc, buffer);
1051 pm_buffer_append_byte(buffer, 0);
1053 pm_buffer_append_byte(buffer, 1);
1054 pm_serialize_location(&((
pm_in_node_t *)node)->then_loc, buffer);
1058 case PM_INDEX_AND_WRITE_NODE: {
1059 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1061 pm_buffer_append_byte(buffer, 0);
1066 pm_buffer_append_byte(buffer, 0);
1068 pm_buffer_append_byte(buffer, 1);
1073 pm_buffer_append_byte(buffer, 0);
1079 pm_buffer_append_byte(buffer, 0);
1087 case PM_INDEX_OPERATOR_WRITE_NODE: {
1088 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1090 pm_buffer_append_byte(buffer, 0);
1095 pm_buffer_append_byte(buffer, 0);
1097 pm_buffer_append_byte(buffer, 1);
1102 pm_buffer_append_byte(buffer, 0);
1108 pm_buffer_append_byte(buffer, 0);
1117 case PM_INDEX_OR_WRITE_NODE: {
1118 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1120 pm_buffer_append_byte(buffer, 0);
1125 pm_buffer_append_byte(buffer, 0);
1127 pm_buffer_append_byte(buffer, 1);
1132 pm_buffer_append_byte(buffer, 0);
1138 pm_buffer_append_byte(buffer, 0);
1146 case PM_INDEX_TARGET_NODE: {
1147 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1151 pm_buffer_append_byte(buffer, 0);
1157 pm_buffer_append_byte(buffer, 0);
1163 case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
1164 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1171 case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
1172 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1180 case PM_INSTANCE_VARIABLE_OR_WRITE_NODE: {
1181 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1188 case PM_INSTANCE_VARIABLE_READ_NODE: {
1189 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1193 case PM_INSTANCE_VARIABLE_TARGET_NODE: {
1194 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1198 case PM_INSTANCE_VARIABLE_WRITE_NODE: {
1199 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1206 case PM_INTEGER_NODE: {
1207 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1211 case PM_INTERPOLATED_MATCH_LAST_LINE_NODE: {
1212 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1215 pm_buffer_append_varuint(buffer, parts_size);
1216 for (uint32_t index = 0; index < parts_size; index++) {
1222 case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
1223 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1226 pm_buffer_append_varuint(buffer, parts_size);
1227 for (uint32_t index = 0; index < parts_size; index++) {
1233 case PM_INTERPOLATED_STRING_NODE: {
1234 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1236 pm_buffer_append_byte(buffer, 0);
1238 pm_buffer_append_byte(buffer, 1);
1242 pm_buffer_append_varuint(buffer, parts_size);
1243 for (uint32_t index = 0; index < parts_size; index++) {
1247 pm_buffer_append_byte(buffer, 0);
1249 pm_buffer_append_byte(buffer, 1);
1254 case PM_INTERPOLATED_SYMBOL_NODE: {
1255 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1257 pm_buffer_append_byte(buffer, 0);
1259 pm_buffer_append_byte(buffer, 1);
1263 pm_buffer_append_varuint(buffer, parts_size);
1264 for (uint32_t index = 0; index < parts_size; index++) {
1268 pm_buffer_append_byte(buffer, 0);
1270 pm_buffer_append_byte(buffer, 1);
1275 case PM_INTERPOLATED_X_STRING_NODE: {
1276 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1279 pm_buffer_append_varuint(buffer, parts_size);
1280 for (uint32_t index = 0; index < parts_size; index++) {
1286 case PM_IT_LOCAL_VARIABLE_READ_NODE: {
1287 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1290 case PM_IT_PARAMETERS_NODE: {
1291 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1294 case PM_KEYWORD_HASH_NODE: {
1295 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1297 pm_buffer_append_varuint(buffer, elements_size);
1298 for (uint32_t index = 0; index < elements_size; index++) {
1303 case PM_KEYWORD_REST_PARAMETER_NODE: {
1304 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1307 pm_buffer_append_byte(buffer, 0);
1309 pm_buffer_append_byte(buffer, 1);
1315 case PM_LAMBDA_NODE: {
1316 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1317 uint32_t locals_size = pm_sizet_to_u32(((
pm_lambda_node_t *)node)->locals.size);
1318 pm_buffer_append_varuint(buffer, locals_size);
1319 for (uint32_t index = 0; index < locals_size; index++) {
1320 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_lambda_node_t *)node)->locals.ids[index]));
1326 pm_buffer_append_byte(buffer, 0);
1331 pm_buffer_append_byte(buffer, 0);
1337 case PM_LOCAL_VARIABLE_AND_WRITE_NODE: {
1338 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1346 case PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
1347 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1356 case PM_LOCAL_VARIABLE_OR_WRITE_NODE: {
1357 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1365 case PM_LOCAL_VARIABLE_READ_NODE: {
1366 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1371 case PM_LOCAL_VARIABLE_TARGET_NODE: {
1372 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1377 case PM_LOCAL_VARIABLE_WRITE_NODE: {
1378 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1386 case PM_MATCH_LAST_LINE_NODE: {
1387 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1394 case PM_MATCH_PREDICATE_NODE: {
1395 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1401 case PM_MATCH_REQUIRED_NODE: {
1402 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1408 case PM_MATCH_WRITE_NODE: {
1409 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1412 pm_buffer_append_varuint(buffer, targets_size);
1413 for (uint32_t index = 0; index < targets_size; index++) {
1418 case PM_MODULE_NODE: {
1419 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1420 uint32_t locals_size = pm_sizet_to_u32(((
pm_module_node_t *)node)->locals.size);
1421 pm_buffer_append_varuint(buffer, locals_size);
1422 for (uint32_t index = 0; index < locals_size; index++) {
1423 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_module_node_t *)node)->locals.ids[index]));
1425 pm_serialize_location(&((
pm_module_node_t *)node)->module_keyword_loc, buffer);
1428 pm_buffer_append_byte(buffer, 0);
1432 pm_serialize_location(&((
pm_module_node_t *)node)->end_keyword_loc, buffer);
1433 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_module_node_t *)node)->name));
1436 case PM_MULTI_TARGET_NODE: {
1437 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1439 pm_buffer_append_varuint(buffer, lefts_size);
1440 for (uint32_t index = 0; index < lefts_size; index++) {
1444 pm_buffer_append_byte(buffer, 0);
1449 pm_buffer_append_varuint(buffer, rights_size);
1450 for (uint32_t index = 0; index < rights_size; index++) {
1454 pm_buffer_append_byte(buffer, 0);
1456 pm_buffer_append_byte(buffer, 1);
1460 pm_buffer_append_byte(buffer, 0);
1462 pm_buffer_append_byte(buffer, 1);
1467 case PM_MULTI_WRITE_NODE: {
1468 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1470 pm_buffer_append_varuint(buffer, lefts_size);
1471 for (uint32_t index = 0; index < lefts_size; index++) {
1475 pm_buffer_append_byte(buffer, 0);
1480 pm_buffer_append_varuint(buffer, rights_size);
1481 for (uint32_t index = 0; index < rights_size; index++) {
1485 pm_buffer_append_byte(buffer, 0);
1487 pm_buffer_append_byte(buffer, 1);
1491 pm_buffer_append_byte(buffer, 0);
1493 pm_buffer_append_byte(buffer, 1);
1500 case PM_NEXT_NODE: {
1501 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1503 pm_buffer_append_byte(buffer, 0);
1507 pm_serialize_location(&((
pm_next_node_t *)node)->keyword_loc, buffer);
1511 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1514 case PM_NO_BLOCK_PARAMETER_NODE: {
1515 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1520 case PM_NO_KEYWORDS_PARAMETER_NODE: {
1521 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1526 case PM_NUMBERED_PARAMETERS_NODE: {
1527 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1531 case PM_NUMBERED_REFERENCE_READ_NODE: {
1532 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1536 case PM_OPTIONAL_KEYWORD_PARAMETER_NODE: {
1537 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1543 case PM_OPTIONAL_PARAMETER_NODE: {
1544 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1552 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1555 pm_serialize_location(&((
pm_or_node_t *)node)->operator_loc, buffer);
1558 case PM_PARAMETERS_NODE: {
1559 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1561 pm_buffer_append_varuint(buffer, requireds_size);
1562 for (uint32_t index = 0; index < requireds_size; index++) {
1566 pm_buffer_append_varuint(buffer, optionals_size);
1567 for (uint32_t index = 0; index < optionals_size; index++) {
1571 pm_buffer_append_byte(buffer, 0);
1576 pm_buffer_append_varuint(buffer, posts_size);
1577 for (uint32_t index = 0; index < posts_size; index++) {
1581 pm_buffer_append_varuint(buffer, keywords_size);
1582 for (uint32_t index = 0; index < keywords_size; index++) {
1586 pm_buffer_append_byte(buffer, 0);
1591 pm_buffer_append_byte(buffer, 0);
1597 case PM_PARENTHESES_NODE: {
1598 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1600 pm_buffer_append_byte(buffer, 0);
1608 case PM_PINNED_EXPRESSION_NODE: {
1609 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1616 case PM_PINNED_VARIABLE_NODE: {
1617 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1622 case PM_POST_EXECUTION_NODE: {
1623 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1625 pm_buffer_append_byte(buffer, 0);
1634 case PM_PRE_EXECUTION_NODE: {
1635 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1637 pm_buffer_append_byte(buffer, 0);
1646 case PM_PROGRAM_NODE: {
1647 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1648 uint32_t locals_size = pm_sizet_to_u32(((
pm_program_node_t *)node)->locals.size);
1649 pm_buffer_append_varuint(buffer, locals_size);
1650 for (uint32_t index = 0; index < locals_size; index++) {
1651 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(((
pm_program_node_t *)node)->locals.ids[index]));
1656 case PM_RANGE_NODE: {
1657 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1659 pm_buffer_append_byte(buffer, 0);
1664 pm_buffer_append_byte(buffer, 0);
1668 pm_serialize_location(&((
pm_range_node_t *)node)->operator_loc, buffer);
1671 case PM_RATIONAL_NODE: {
1672 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1677 case PM_REDO_NODE: {
1678 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1681 case PM_REGULAR_EXPRESSION_NODE: {
1682 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1689 case PM_REQUIRED_KEYWORD_PARAMETER_NODE: {
1690 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1695 case PM_REQUIRED_PARAMETER_NODE: {
1696 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1700 case PM_RESCUE_MODIFIER_NODE: {
1701 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1707 case PM_RESCUE_NODE: {
1708 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1710 uint32_t exceptions_size = pm_sizet_to_u32(((
pm_rescue_node_t *)node)->exceptions.size);
1711 pm_buffer_append_varuint(buffer, exceptions_size);
1712 for (uint32_t index = 0; index < exceptions_size; index++) {
1716 pm_buffer_append_byte(buffer, 0);
1718 pm_buffer_append_byte(buffer, 1);
1722 pm_buffer_append_byte(buffer, 0);
1727 pm_buffer_append_byte(buffer, 0);
1729 pm_buffer_append_byte(buffer, 1);
1730 pm_serialize_location(&((
pm_rescue_node_t *)node)->then_keyword_loc, buffer);
1733 pm_buffer_append_byte(buffer, 0);
1738 pm_buffer_append_byte(buffer, 0);
1744 case PM_REST_PARAMETER_NODE: {
1745 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1748 pm_buffer_append_byte(buffer, 0);
1750 pm_buffer_append_byte(buffer, 1);
1756 case PM_RETRY_NODE: {
1757 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1760 case PM_RETURN_NODE: {
1761 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1764 pm_buffer_append_byte(buffer, 0);
1770 case PM_SELF_NODE: {
1771 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1774 case PM_SHAREABLE_CONSTANT_NODE: {
1775 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1779 case PM_SINGLETON_CLASS_NODE: {
1780 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1782 pm_buffer_append_varuint(buffer, locals_size);
1783 for (uint32_t index = 0; index < locals_size; index++) {
1790 pm_buffer_append_byte(buffer, 0);
1797 case PM_SOURCE_ENCODING_NODE: {
1798 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1801 case PM_SOURCE_FILE_NODE: {
1802 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1806 case PM_SOURCE_LINE_NODE: {
1807 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1810 case PM_SPLAT_NODE: {
1811 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1812 pm_serialize_location(&((
pm_splat_node_t *)node)->operator_loc, buffer);
1814 pm_buffer_append_byte(buffer, 0);
1820 case PM_STATEMENTS_NODE: {
1821 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1823 pm_buffer_append_varuint(buffer, body_size);
1824 for (uint32_t index = 0; index < body_size; index++) {
1829 case PM_STRING_NODE: {
1830 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1832 pm_buffer_append_byte(buffer, 0);
1834 pm_buffer_append_byte(buffer, 1);
1839 pm_buffer_append_byte(buffer, 0);
1841 pm_buffer_append_byte(buffer, 1);
1847 case PM_SUPER_NODE: {
1848 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1849 pm_serialize_location(&((
pm_super_node_t *)node)->keyword_loc, buffer);
1851 pm_buffer_append_byte(buffer, 0);
1853 pm_buffer_append_byte(buffer, 1);
1854 pm_serialize_location(&((
pm_super_node_t *)node)->lparen_loc, buffer);
1857 pm_buffer_append_byte(buffer, 0);
1862 pm_buffer_append_byte(buffer, 0);
1864 pm_buffer_append_byte(buffer, 1);
1865 pm_serialize_location(&((
pm_super_node_t *)node)->rparen_loc, buffer);
1868 pm_buffer_append_byte(buffer, 0);
1874 case PM_SYMBOL_NODE: {
1875 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1877 pm_buffer_append_byte(buffer, 0);
1879 pm_buffer_append_byte(buffer, 1);
1883 pm_buffer_append_byte(buffer, 0);
1885 pm_buffer_append_byte(buffer, 1);
1889 pm_buffer_append_byte(buffer, 0);
1891 pm_buffer_append_byte(buffer, 1);
1897 case PM_TRUE_NODE: {
1898 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1901 case PM_UNDEF_NODE: {
1902 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1903 uint32_t names_size = pm_sizet_to_u32(((
pm_undef_node_t *)node)->names.size);
1904 pm_buffer_append_varuint(buffer, names_size);
1905 for (uint32_t index = 0; index < names_size; index++) {
1908 pm_serialize_location(&((
pm_undef_node_t *)node)->keyword_loc, buffer);
1911 case PM_UNLESS_NODE: {
1912 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1916 pm_buffer_append_byte(buffer, 0);
1918 pm_buffer_append_byte(buffer, 1);
1919 pm_serialize_location(&((
pm_unless_node_t *)node)->then_keyword_loc, buffer);
1922 pm_buffer_append_byte(buffer, 0);
1927 pm_buffer_append_byte(buffer, 0);
1932 pm_buffer_append_byte(buffer, 0);
1934 pm_buffer_append_byte(buffer, 1);
1935 pm_serialize_location(&((
pm_unless_node_t *)node)->end_keyword_loc, buffer);
1939 case PM_UNTIL_NODE: {
1940 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1941 pm_serialize_location(&((
pm_until_node_t *)node)->keyword_loc, buffer);
1943 pm_buffer_append_byte(buffer, 0);
1945 pm_buffer_append_byte(buffer, 1);
1946 pm_serialize_location(&((
pm_until_node_t *)node)->do_keyword_loc, buffer);
1949 pm_buffer_append_byte(buffer, 0);
1951 pm_buffer_append_byte(buffer, 1);
1952 pm_serialize_location(&((
pm_until_node_t *)node)->closing_loc, buffer);
1956 pm_buffer_append_byte(buffer, 0);
1962 case PM_WHEN_NODE: {
1963 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1964 pm_serialize_location(&((
pm_when_node_t *)node)->keyword_loc, buffer);
1965 uint32_t conditions_size = pm_sizet_to_u32(((
pm_when_node_t *)node)->conditions.size);
1966 pm_buffer_append_varuint(buffer, conditions_size);
1967 for (uint32_t index = 0; index < conditions_size; index++) {
1971 pm_buffer_append_byte(buffer, 0);
1973 pm_buffer_append_byte(buffer, 1);
1974 pm_serialize_location(&((
pm_when_node_t *)node)->then_keyword_loc, buffer);
1977 pm_buffer_append_byte(buffer, 0);
1983 case PM_WHILE_NODE: {
1984 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
1985 pm_serialize_location(&((
pm_while_node_t *)node)->keyword_loc, buffer);
1987 pm_buffer_append_byte(buffer, 0);
1989 pm_buffer_append_byte(buffer, 1);
1990 pm_serialize_location(&((
pm_while_node_t *)node)->do_keyword_loc, buffer);
1993 pm_buffer_append_byte(buffer, 0);
1995 pm_buffer_append_byte(buffer, 1);
1996 pm_serialize_location(&((
pm_while_node_t *)node)->closing_loc, buffer);
2000 pm_buffer_append_byte(buffer, 0);
2006 case PM_X_STRING_NODE: {
2007 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
2014 case PM_YIELD_NODE: {
2015 pm_buffer_append_varuint(buffer, (uint32_t) node->
flags);
2016 pm_serialize_location(&((
pm_yield_node_t *)node)->keyword_loc, buffer);
2018 pm_buffer_append_byte(buffer, 0);
2020 pm_buffer_append_byte(buffer, 1);
2021 pm_serialize_location(&((
pm_yield_node_t *)node)->lparen_loc, buffer);
2024 pm_buffer_append_byte(buffer, 0);
2029 pm_buffer_append_byte(buffer, 0);
2031 pm_buffer_append_byte(buffer, 1);
2032 pm_serialize_location(&((
pm_yield_node_t *)node)->rparen_loc, buffer);
2041 uint32_t size = pm_sizet_to_u32(list->
size);
2042 pm_buffer_append_varuint(buffer, size);
2044 for (uint32_t i = 0; i < size; i++) {
2045 uint32_t offset = pm_sizet_to_u32(list->
offsets[i]);
2046 pm_buffer_append_varuint(buffer, offset);
2053 pm_buffer_append_byte(buffer, (uint8_t) comment->type);
2056 pm_serialize_location(&comment->location, buffer);
2064 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(pm_list_size(list)));
2068 pm_serialize_comment(comment, buffer);
2076 pm_buffer_append_varuint(buffer,
magic_comment->key.length);
2079 pm_buffer_append_varuint(buffer,
magic_comment->value.start);
2080 pm_buffer_append_varuint(buffer,
magic_comment->value.length);
2085 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(pm_list_size(list)));
2095 if (parser->data_loc.
length == 0) {
2096 pm_buffer_append_byte(buffer, 0);
2098 pm_buffer_append_byte(buffer, 1);
2099 pm_serialize_location(&parser->data_loc, buffer);
2106 pm_buffer_append_varuint(buffer, (uint32_t) diagnostic->diag_id);
2109 size_t message_length = strlen(diagnostic->message);
2110 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(message_length));
2111 pm_buffer_append_string(buffer, diagnostic->message, message_length);
2114 pm_serialize_location(&diagnostic->location, buffer);
2116 pm_buffer_append_byte(buffer, diagnostic->level);
2121 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(pm_list_size(list)));
2125 pm_serialize_diagnostic(diagnostic, buffer);
2134 size_t encoding_length = strlen(encoding->name);
2135 pm_buffer_append_varuint(buffer, pm_sizet_to_u32(encoding_length));
2136 pm_buffer_append_string(buffer, encoding->name, encoding_length);
2141 pm_serialize_encoding(parser->encoding, buffer);
2142 pm_buffer_append_varsint(buffer, parser->start_line);
2143 pm_serialize_line_offset_list(&parser->line_offsets, buffer);
2144 pm_serialize_comment_list(&parser->comment_list, buffer);
2145 pm_serialize_magic_comment_list(&parser->magic_comment_list, buffer);
2146 pm_serialize_data_loc(parser, buffer);
2147 pm_serialize_diagnostic_list(&parser->error_list, buffer);
2148 pm_serialize_diagnostic_list(&parser->warning_list, buffer);
2149 pm_buffer_append_byte(buffer, (uint8_t) parser->continuable);
2152#line 275 "prism/templates/src/serialize.c.erb"
2158 pm_serialize_metadata(parser, buffer);
2162 size_t offset = buffer->length;
2163 pm_buffer_append_zeroes(buffer, 4);
2166 pm_buffer_append_varuint(buffer, parser->constant_pool.size);
2169 pm_serialize_node(parser, node, buffer);
2173 uint32_t length = pm_sizet_to_u32(buffer->length);
2174 memcpy(buffer->value + offset, &length,
sizeof(uint32_t));
2177 offset = buffer->length;
2178 pm_buffer_append_zeroes(buffer, parser->constant_pool.size * 8);
2180 for (uint32_t index = 0; index < parser->constant_pool.capacity; index++) {
2185 if (bucket->id != 0) {
2186 pm_constant_t *constant = &parser->constant_pool.constants[bucket->id - 1];
2187 size_t buffer_offset = offset + ((((size_t)bucket->id) - 1) * 8);
2191 uint32_t content_offset = pm_sizet_to_u32(buffer->length);
2192 memcpy(buffer->value + buffer_offset, &content_offset, 4);
2193 pm_buffer_append_bytes(buffer, constant->start, constant->length);
2195 uint32_t constant_length = pm_sizet_to_u32(constant->length);
2196 memcpy(buffer->value + buffer_offset + 4, &constant_length, 4);
2205 pm_buffer_append_varuint(buffer, token->type);
2206 pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(token->start - parser->start));
2207 pm_buffer_append_varuint(buffer, pm_ptrdifft_to_u32(token->end - token->start));
2208 pm_buffer_append_varuint(buffer, parser->lex_state);
2215pm_serialize_lex(
pm_buffer_t *buffer,
const uint8_t *source,
size_t size,
const char *data) {
2217 pm_options_read(&options, data);
2221 pm_parser_init(&arena, &parser, source, size, &options);
2223 pm_parser_lex_callback_set(&parser, serialize_token, buffer);
2227 pm_buffer_append_byte(buffer, 0);
2229 pm_serialize_metadata(&parser, buffer);
2231 pm_parser_cleanup(&parser);
2232 pm_arena_cleanup(&arena);
2233 pm_options_cleanup(&options);
2241pm_serialize_parse_lex(
pm_buffer_t *buffer,
const uint8_t *source,
size_t size,
const char *data) {
2243 pm_options_read(&options, data);
2247 pm_parser_init(&arena, &parser, source, size, &options);
2249 pm_parser_lex_callback_set(&parser, serialize_token, buffer);
2252 pm_buffer_append_byte(buffer, 0);
2253 pm_serialize(&parser, node, buffer);
2255 pm_parser_cleanup(&parser);
2256 pm_arena_cleanup(&arena);
2257 pm_options_cleanup(&options);
2264pm_serialize_parse_success_p(
const uint8_t *source,
size_t size,
const char *data) {
2266 pm_options_read(&options, data);
2270 pm_parser_init(&arena, &parser, source, size, &options);
2274 bool result = parser.error_list.size == 0;
2275 pm_parser_cleanup(&parser);
2276 pm_arena_cleanup(&arena);
2277 pm_options_cleanup(&options);
A header file that defines macros to exclude certain features of the prism library.
#define PRISM_INLINE
Old Visual Studio versions do not support the inline keyword, so we need to define it to be __inline.
A list of byte offsets of newlines in a string.
PRISM_EXPORTED_FUNCTION pm_node_t * pm_parse(pm_parser_t *parser) PRISM_NONNULL(1)
Initiate the parser with the given parser.
The main header file for the prism parser.
ClassVariableAndWriteNode.
ClassVariableOperatorWriteNode.
ClassVariableOrWriteNode.
ConstantOperatorWriteNode.
ConstantPathAndWriteNode.
ConstantPathOperatorWriteNode.
GlobalVariableAndWriteNode.
GlobalVariableOperatorWriteNode.
GlobalVariableOrWriteNode.
GlobalVariableTargetNode.
InstanceVariableAndWriteNode.
InstanceVariableOperatorWriteNode.
InstanceVariableOrWriteNode.
InstanceVariableReadNode.
InstanceVariableTargetNode.
InstanceVariableWriteNode.
A structure represents an arbitrary-sized integer.
size_t length
The number of allocated values.
uint32_t value
Embedded value for small integer.
uint32_t * values
List of 32-bit integers.
bool negative
Whether or not the integer is negative.
InterpolatedMatchLastLineNode.
InterpolatedRegularExpressionNode.
KeywordRestParameterNode.
A list of offsets of the start of lines in a string.
uint32_t * offsets
The list of offsets.
size_t size
The number of offsets in the list.
LocalVariableAndWriteNode.
LocalVariableOperatorWriteNode.
LocalVariableOrWriteNode.
This struct represents a slice in the source code, defined by an offset and a length.
uint32_t start
The offset of the location from the start of the source.
uint32_t length
The length of the location.
This is the base structure that represents a node in the syntax tree.
uint32_t node_id
The unique identifier for this node, which is deterministic based on the source.
pm_node_flags_t flags
This represents any flags on the node.
pm_location_t location
This is the location of the node in the source.
NumberedReferenceReadNode.
OptionalKeywordParameterNode.
RequiredKeywordParameterNode.
A generic string type that can have various ownership semantics.
This struct represents a token in the Ruby source.