yarp 0.12.0 → 0.13.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 +29 -8
- data/CONTRIBUTING.md +2 -2
- data/Makefile +5 -5
- data/README.md +11 -12
- data/config.yml +6 -2
- data/docs/build_system.md +21 -21
- data/docs/building.md +4 -4
- data/docs/configuration.md +25 -21
- data/docs/design.md +2 -2
- data/docs/encoding.md +17 -17
- data/docs/fuzzing.md +4 -4
- data/docs/heredocs.md +3 -3
- data/docs/mapping.md +94 -94
- data/docs/ripper.md +4 -4
- data/docs/ruby_api.md +11 -11
- data/docs/serialization.md +17 -16
- data/docs/testing.md +6 -6
- data/ext/prism/api_node.c +4725 -0
- data/ext/{yarp → prism}/api_pack.c +82 -82
- data/ext/{yarp → prism}/extconf.rb +13 -13
- data/ext/{yarp → prism}/extension.c +175 -168
- data/ext/prism/extension.h +18 -0
- data/include/prism/ast.h +1932 -0
- data/include/prism/defines.h +45 -0
- data/include/prism/diagnostic.h +231 -0
- data/include/{yarp/enc/yp_encoding.h → prism/enc/pm_encoding.h} +40 -40
- data/include/prism/node.h +41 -0
- data/include/prism/pack.h +141 -0
- data/include/{yarp → prism}/parser.h +143 -142
- data/include/prism/regexp.h +19 -0
- data/include/prism/unescape.h +48 -0
- data/include/prism/util/pm_buffer.h +51 -0
- data/include/{yarp/util/yp_char.h → prism/util/pm_char.h} +20 -20
- data/include/{yarp/util/yp_constant_pool.h → prism/util/pm_constant_pool.h} +26 -22
- data/include/{yarp/util/yp_list.h → prism/util/pm_list.h} +21 -21
- data/include/prism/util/pm_memchr.h +14 -0
- data/include/{yarp/util/yp_newline_list.h → prism/util/pm_newline_list.h} +11 -11
- data/include/prism/util/pm_state_stack.h +24 -0
- data/include/{yarp/util/yp_string.h → prism/util/pm_string.h} +20 -20
- data/include/prism/util/pm_string_list.h +25 -0
- data/include/{yarp/util/yp_strpbrk.h → prism/util/pm_strpbrk.h} +7 -7
- data/include/prism/version.h +4 -0
- data/include/prism.h +82 -0
- data/lib/prism/compiler.rb +465 -0
- data/lib/prism/debug.rb +157 -0
- data/lib/{yarp/desugar_visitor.rb → prism/desugar_compiler.rb} +4 -2
- data/lib/prism/dispatcher.rb +2051 -0
- data/lib/prism/dsl.rb +750 -0
- data/lib/{yarp → prism}/ffi.rb +66 -67
- data/lib/{yarp → prism}/lex_compat.rb +40 -43
- data/lib/{yarp/mutation_visitor.rb → prism/mutation_compiler.rb} +3 -3
- data/lib/{yarp → prism}/node.rb +2012 -2593
- data/lib/prism/node_ext.rb +55 -0
- data/lib/prism/node_inspector.rb +68 -0
- data/lib/{yarp → prism}/pack.rb +1 -1
- data/lib/{yarp → prism}/parse_result/comments.rb +1 -1
- data/lib/{yarp → prism}/parse_result/newlines.rb +1 -1
- data/lib/prism/parse_result.rb +266 -0
- data/lib/{yarp → prism}/pattern.rb +14 -14
- data/lib/{yarp → prism}/ripper_compat.rb +5 -5
- data/lib/{yarp → prism}/serialize.rb +12 -7
- data/lib/prism/visitor.rb +470 -0
- data/lib/prism.rb +64 -0
- data/lib/yarp.rb +2 -614
- data/src/diagnostic.c +213 -208
- data/src/enc/pm_big5.c +52 -0
- data/src/enc/pm_euc_jp.c +58 -0
- data/src/enc/{yp_gbk.c → pm_gbk.c} +16 -16
- data/src/enc/pm_shift_jis.c +56 -0
- data/src/enc/{yp_tables.c → pm_tables.c} +69 -69
- data/src/enc/{yp_unicode.c → pm_unicode.c} +40 -40
- data/src/enc/pm_windows_31j.c +56 -0
- data/src/node.c +1293 -1233
- data/src/pack.c +247 -247
- data/src/prettyprint.c +1479 -1479
- data/src/{yarp.c → prism.c} +5205 -5083
- data/src/regexp.c +132 -132
- data/src/serialize.c +1121 -1121
- data/src/token_type.c +169 -167
- data/src/unescape.c +106 -87
- data/src/util/pm_buffer.c +103 -0
- data/src/util/{yp_char.c → pm_char.c} +72 -72
- data/src/util/{yp_constant_pool.c → pm_constant_pool.c} +85 -64
- data/src/util/{yp_list.c → pm_list.c} +10 -10
- data/src/util/{yp_memchr.c → pm_memchr.c} +6 -4
- data/src/util/{yp_newline_list.c → pm_newline_list.c} +21 -21
- data/src/util/{yp_state_stack.c → pm_state_stack.c} +4 -4
- data/src/util/{yp_string.c → pm_string.c} +38 -38
- data/src/util/pm_string_list.c +29 -0
- data/src/util/{yp_strncasecmp.c → pm_strncasecmp.c} +1 -1
- data/src/util/{yp_strpbrk.c → pm_strpbrk.c} +8 -8
- data/yarp.gemspec +68 -59
- metadata +70 -61
- data/ext/yarp/api_node.c +0 -4728
- data/ext/yarp/extension.h +0 -18
- data/include/yarp/ast.h +0 -1929
- data/include/yarp/defines.h +0 -45
- data/include/yarp/diagnostic.h +0 -226
- data/include/yarp/node.h +0 -42
- data/include/yarp/pack.h +0 -141
- data/include/yarp/regexp.h +0 -19
- data/include/yarp/unescape.h +0 -44
- data/include/yarp/util/yp_buffer.h +0 -51
- data/include/yarp/util/yp_memchr.h +0 -14
- data/include/yarp/util/yp_state_stack.h +0 -24
- data/include/yarp/util/yp_string_list.h +0 -25
- data/include/yarp/version.h +0 -4
- data/include/yarp.h +0 -82
- data/src/enc/yp_big5.c +0 -52
- data/src/enc/yp_euc_jp.c +0 -58
- data/src/enc/yp_shift_jis.c +0 -56
- data/src/enc/yp_windows_31j.c +0 -56
- data/src/util/yp_buffer.c +0 -101
- data/src/util/yp_string_list.c +0 -29
data/src/serialize.c
CHANGED
|
@@ -5,1721 +5,1721 @@
|
|
|
5
5
|
/* if you are looking to modify the */
|
|
6
6
|
/* template */
|
|
7
7
|
/******************************************************************************/
|
|
8
|
-
#include "
|
|
8
|
+
#include "prism.h"
|
|
9
9
|
|
|
10
10
|
#include <stdio.h>
|
|
11
11
|
|
|
12
12
|
static inline uint32_t
|
|
13
|
-
|
|
13
|
+
pm_ptrdifft_to_u32(ptrdiff_t value) {
|
|
14
14
|
assert(value >= 0 && ((unsigned long) value) < UINT32_MAX);
|
|
15
15
|
return (uint32_t) value;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
static inline uint32_t
|
|
19
|
-
|
|
19
|
+
pm_sizet_to_u32(size_t value) {
|
|
20
20
|
assert(value < UINT32_MAX);
|
|
21
21
|
return (uint32_t) value;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
static void
|
|
25
|
-
|
|
25
|
+
pm_serialize_location(pm_parser_t *parser, 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_u32(buffer, pm_ptrdifft_to_u32(location->start - parser->start));
|
|
31
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(location->end - location->start));
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
static void
|
|
35
|
-
|
|
35
|
+
pm_serialize_string(pm_parser_t *parser, pm_string_t *string, pm_buffer_t *buffer) {
|
|
36
36
|
switch (string->type) {
|
|
37
|
-
case
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
case PM_STRING_SHARED: {
|
|
38
|
+
pm_buffer_append_u8(buffer, 1);
|
|
39
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(pm_string_source(string) - parser->start));
|
|
40
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(pm_string_length(string)));
|
|
41
41
|
break;
|
|
42
42
|
}
|
|
43
|
-
case
|
|
44
|
-
case
|
|
45
|
-
uint32_t length =
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
case PM_STRING_OWNED:
|
|
44
|
+
case PM_STRING_CONSTANT: {
|
|
45
|
+
uint32_t length = pm_sizet_to_u32(pm_string_length(string));
|
|
46
|
+
pm_buffer_append_u8(buffer, 2);
|
|
47
|
+
pm_buffer_append_u32(buffer, length);
|
|
48
|
+
pm_buffer_append_bytes(buffer, pm_string_source(string), length);
|
|
49
49
|
break;
|
|
50
50
|
}
|
|
51
|
-
case
|
|
51
|
+
case PM_STRING_MAPPED:
|
|
52
52
|
assert(false && "Cannot serialize mapped strings.");
|
|
53
53
|
break;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
void
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
59
|
+
pm_buffer_append_u8(buffer, (uint8_t) PM_NODE_TYPE(node));
|
|
60
60
|
|
|
61
61
|
size_t offset = buffer->length;
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
pm_serialize_location(parser, &node->location, buffer);
|
|
64
64
|
|
|
65
|
-
switch (
|
|
65
|
+
switch (PM_NODE_TYPE(node)) {
|
|
66
66
|
// We do not need to serialize a ScopeNode ever as
|
|
67
67
|
// it is not part of the AST
|
|
68
|
-
case
|
|
68
|
+
case PM_SCOPE_NODE:
|
|
69
69
|
return;
|
|
70
|
-
case
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
case PM_ALIAS_GLOBAL_VARIABLE_NODE: {
|
|
71
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_alias_global_variable_node_t *)node)->new_name, buffer);
|
|
72
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_alias_global_variable_node_t *)node)->old_name, buffer);
|
|
73
|
+
pm_serialize_location(parser, &((pm_alias_global_variable_node_t *)node)->keyword_loc, buffer);
|
|
74
74
|
break;
|
|
75
75
|
}
|
|
76
|
-
case
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
case PM_ALIAS_METHOD_NODE: {
|
|
77
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_alias_method_node_t *)node)->new_name, buffer);
|
|
78
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_alias_method_node_t *)node)->old_name, buffer);
|
|
79
|
+
pm_serialize_location(parser, &((pm_alias_method_node_t *)node)->keyword_loc, buffer);
|
|
80
80
|
break;
|
|
81
81
|
}
|
|
82
|
-
case
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
case PM_ALTERNATION_PATTERN_NODE: {
|
|
83
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_alternation_pattern_node_t *)node)->left, buffer);
|
|
84
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_alternation_pattern_node_t *)node)->right, buffer);
|
|
85
|
+
pm_serialize_location(parser, &((pm_alternation_pattern_node_t *)node)->operator_loc, buffer);
|
|
86
86
|
break;
|
|
87
87
|
}
|
|
88
|
-
case
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
case PM_AND_NODE: {
|
|
89
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_and_node_t *)node)->left, buffer);
|
|
90
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_and_node_t *)node)->right, buffer);
|
|
91
|
+
pm_serialize_location(parser, &((pm_and_node_t *)node)->operator_loc, buffer);
|
|
92
92
|
break;
|
|
93
93
|
}
|
|
94
|
-
case
|
|
95
|
-
uint32_t arguments_size =
|
|
96
|
-
|
|
94
|
+
case PM_ARGUMENTS_NODE: {
|
|
95
|
+
uint32_t arguments_size = pm_sizet_to_u32(((pm_arguments_node_t *)node)->arguments.size);
|
|
96
|
+
pm_buffer_append_u32(buffer, arguments_size);
|
|
97
97
|
for (uint32_t index = 0; index < arguments_size; index++) {
|
|
98
|
-
|
|
98
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_arguments_node_t *)node)->arguments.nodes[index], buffer);
|
|
99
99
|
}
|
|
100
100
|
break;
|
|
101
101
|
}
|
|
102
|
-
case
|
|
103
|
-
uint32_t elements_size =
|
|
104
|
-
|
|
102
|
+
case PM_ARRAY_NODE: {
|
|
103
|
+
uint32_t elements_size = pm_sizet_to_u32(((pm_array_node_t *)node)->elements.size);
|
|
104
|
+
pm_buffer_append_u32(buffer, elements_size);
|
|
105
105
|
for (uint32_t index = 0; index < elements_size; index++) {
|
|
106
|
-
|
|
106
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_array_node_t *)node)->elements.nodes[index], buffer);
|
|
107
107
|
}
|
|
108
|
-
if (((
|
|
109
|
-
|
|
108
|
+
if (((pm_array_node_t *)node)->opening_loc.start == NULL) {
|
|
109
|
+
pm_buffer_append_u8(buffer, 0);
|
|
110
110
|
} else {
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
pm_buffer_append_u8(buffer, 1);
|
|
112
|
+
pm_serialize_location(parser, &((pm_array_node_t *)node)->opening_loc, buffer);
|
|
113
113
|
}
|
|
114
|
-
if (((
|
|
115
|
-
|
|
114
|
+
if (((pm_array_node_t *)node)->closing_loc.start == NULL) {
|
|
115
|
+
pm_buffer_append_u8(buffer, 0);
|
|
116
116
|
} else {
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
pm_buffer_append_u8(buffer, 1);
|
|
118
|
+
pm_serialize_location(parser, &((pm_array_node_t *)node)->closing_loc, buffer);
|
|
119
119
|
}
|
|
120
120
|
break;
|
|
121
121
|
}
|
|
122
|
-
case
|
|
123
|
-
if (((
|
|
124
|
-
|
|
122
|
+
case PM_ARRAY_PATTERN_NODE: {
|
|
123
|
+
if (((pm_array_pattern_node_t *)node)->constant == NULL) {
|
|
124
|
+
pm_buffer_append_u8(buffer, 0);
|
|
125
125
|
} else {
|
|
126
|
-
|
|
126
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_array_pattern_node_t *)node)->constant, buffer);
|
|
127
127
|
}
|
|
128
|
-
uint32_t requireds_size =
|
|
129
|
-
|
|
128
|
+
uint32_t requireds_size = pm_sizet_to_u32(((pm_array_pattern_node_t *)node)->requireds.size);
|
|
129
|
+
pm_buffer_append_u32(buffer, requireds_size);
|
|
130
130
|
for (uint32_t index = 0; index < requireds_size; index++) {
|
|
131
|
-
|
|
131
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_array_pattern_node_t *)node)->requireds.nodes[index], buffer);
|
|
132
132
|
}
|
|
133
|
-
if (((
|
|
134
|
-
|
|
133
|
+
if (((pm_array_pattern_node_t *)node)->rest == NULL) {
|
|
134
|
+
pm_buffer_append_u8(buffer, 0);
|
|
135
135
|
} else {
|
|
136
|
-
|
|
136
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_array_pattern_node_t *)node)->rest, buffer);
|
|
137
137
|
}
|
|
138
|
-
uint32_t posts_size =
|
|
139
|
-
|
|
138
|
+
uint32_t posts_size = pm_sizet_to_u32(((pm_array_pattern_node_t *)node)->posts.size);
|
|
139
|
+
pm_buffer_append_u32(buffer, posts_size);
|
|
140
140
|
for (uint32_t index = 0; index < posts_size; index++) {
|
|
141
|
-
|
|
141
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_array_pattern_node_t *)node)->posts.nodes[index], buffer);
|
|
142
142
|
}
|
|
143
|
-
if (((
|
|
144
|
-
|
|
143
|
+
if (((pm_array_pattern_node_t *)node)->opening_loc.start == NULL) {
|
|
144
|
+
pm_buffer_append_u8(buffer, 0);
|
|
145
145
|
} else {
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
pm_buffer_append_u8(buffer, 1);
|
|
147
|
+
pm_serialize_location(parser, &((pm_array_pattern_node_t *)node)->opening_loc, buffer);
|
|
148
148
|
}
|
|
149
|
-
if (((
|
|
150
|
-
|
|
149
|
+
if (((pm_array_pattern_node_t *)node)->closing_loc.start == NULL) {
|
|
150
|
+
pm_buffer_append_u8(buffer, 0);
|
|
151
151
|
} else {
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
pm_buffer_append_u8(buffer, 1);
|
|
153
|
+
pm_serialize_location(parser, &((pm_array_pattern_node_t *)node)->closing_loc, buffer);
|
|
154
154
|
}
|
|
155
155
|
break;
|
|
156
156
|
}
|
|
157
|
-
case
|
|
158
|
-
|
|
159
|
-
if (((
|
|
160
|
-
|
|
157
|
+
case PM_ASSOC_NODE: {
|
|
158
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_assoc_node_t *)node)->key, buffer);
|
|
159
|
+
if (((pm_assoc_node_t *)node)->value == NULL) {
|
|
160
|
+
pm_buffer_append_u8(buffer, 0);
|
|
161
161
|
} else {
|
|
162
|
-
|
|
162
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_assoc_node_t *)node)->value, buffer);
|
|
163
163
|
}
|
|
164
|
-
if (((
|
|
165
|
-
|
|
164
|
+
if (((pm_assoc_node_t *)node)->operator_loc.start == NULL) {
|
|
165
|
+
pm_buffer_append_u8(buffer, 0);
|
|
166
166
|
} else {
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
pm_buffer_append_u8(buffer, 1);
|
|
168
|
+
pm_serialize_location(parser, &((pm_assoc_node_t *)node)->operator_loc, buffer);
|
|
169
169
|
}
|
|
170
170
|
break;
|
|
171
171
|
}
|
|
172
|
-
case
|
|
173
|
-
if (((
|
|
174
|
-
|
|
172
|
+
case PM_ASSOC_SPLAT_NODE: {
|
|
173
|
+
if (((pm_assoc_splat_node_t *)node)->value == NULL) {
|
|
174
|
+
pm_buffer_append_u8(buffer, 0);
|
|
175
175
|
} else {
|
|
176
|
-
|
|
176
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_assoc_splat_node_t *)node)->value, buffer);
|
|
177
177
|
}
|
|
178
|
-
|
|
178
|
+
pm_serialize_location(parser, &((pm_assoc_splat_node_t *)node)->operator_loc, buffer);
|
|
179
179
|
break;
|
|
180
180
|
}
|
|
181
|
-
case
|
|
181
|
+
case PM_BACK_REFERENCE_READ_NODE: {
|
|
182
182
|
break;
|
|
183
183
|
}
|
|
184
|
-
case
|
|
185
|
-
if (((
|
|
186
|
-
|
|
184
|
+
case PM_BEGIN_NODE: {
|
|
185
|
+
if (((pm_begin_node_t *)node)->begin_keyword_loc.start == NULL) {
|
|
186
|
+
pm_buffer_append_u8(buffer, 0);
|
|
187
187
|
} else {
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
pm_buffer_append_u8(buffer, 1);
|
|
189
|
+
pm_serialize_location(parser, &((pm_begin_node_t *)node)->begin_keyword_loc, buffer);
|
|
190
190
|
}
|
|
191
|
-
if (((
|
|
192
|
-
|
|
191
|
+
if (((pm_begin_node_t *)node)->statements == NULL) {
|
|
192
|
+
pm_buffer_append_u8(buffer, 0);
|
|
193
193
|
} else {
|
|
194
|
-
|
|
194
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_begin_node_t *)node)->statements, buffer);
|
|
195
195
|
}
|
|
196
|
-
if (((
|
|
197
|
-
|
|
196
|
+
if (((pm_begin_node_t *)node)->rescue_clause == NULL) {
|
|
197
|
+
pm_buffer_append_u8(buffer, 0);
|
|
198
198
|
} else {
|
|
199
|
-
|
|
199
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_begin_node_t *)node)->rescue_clause, buffer);
|
|
200
200
|
}
|
|
201
|
-
if (((
|
|
202
|
-
|
|
201
|
+
if (((pm_begin_node_t *)node)->else_clause == NULL) {
|
|
202
|
+
pm_buffer_append_u8(buffer, 0);
|
|
203
203
|
} else {
|
|
204
|
-
|
|
204
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_begin_node_t *)node)->else_clause, buffer);
|
|
205
205
|
}
|
|
206
|
-
if (((
|
|
207
|
-
|
|
206
|
+
if (((pm_begin_node_t *)node)->ensure_clause == NULL) {
|
|
207
|
+
pm_buffer_append_u8(buffer, 0);
|
|
208
208
|
} else {
|
|
209
|
-
|
|
209
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_begin_node_t *)node)->ensure_clause, buffer);
|
|
210
210
|
}
|
|
211
|
-
if (((
|
|
212
|
-
|
|
211
|
+
if (((pm_begin_node_t *)node)->end_keyword_loc.start == NULL) {
|
|
212
|
+
pm_buffer_append_u8(buffer, 0);
|
|
213
213
|
} else {
|
|
214
|
-
|
|
215
|
-
|
|
214
|
+
pm_buffer_append_u8(buffer, 1);
|
|
215
|
+
pm_serialize_location(parser, &((pm_begin_node_t *)node)->end_keyword_loc, buffer);
|
|
216
216
|
}
|
|
217
217
|
break;
|
|
218
218
|
}
|
|
219
|
-
case
|
|
220
|
-
if (((
|
|
221
|
-
|
|
219
|
+
case PM_BLOCK_ARGUMENT_NODE: {
|
|
220
|
+
if (((pm_block_argument_node_t *)node)->expression == NULL) {
|
|
221
|
+
pm_buffer_append_u8(buffer, 0);
|
|
222
222
|
} else {
|
|
223
|
-
|
|
223
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_block_argument_node_t *)node)->expression, buffer);
|
|
224
224
|
}
|
|
225
|
-
|
|
225
|
+
pm_serialize_location(parser, &((pm_block_argument_node_t *)node)->operator_loc, buffer);
|
|
226
226
|
break;
|
|
227
227
|
}
|
|
228
|
-
case
|
|
229
|
-
|
|
228
|
+
case PM_BLOCK_LOCAL_VARIABLE_NODE: {
|
|
229
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_block_local_variable_node_t *)node)->name));
|
|
230
230
|
break;
|
|
231
231
|
}
|
|
232
|
-
case
|
|
233
|
-
uint32_t locals_size =
|
|
234
|
-
|
|
232
|
+
case PM_BLOCK_NODE: {
|
|
233
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_block_node_t *)node)->locals.size);
|
|
234
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
235
235
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
236
|
-
|
|
236
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_block_node_t *)node)->locals.ids[index]));
|
|
237
237
|
}
|
|
238
|
-
if (((
|
|
239
|
-
|
|
238
|
+
if (((pm_block_node_t *)node)->parameters == NULL) {
|
|
239
|
+
pm_buffer_append_u8(buffer, 0);
|
|
240
240
|
} else {
|
|
241
|
-
|
|
241
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_block_node_t *)node)->parameters, buffer);
|
|
242
242
|
}
|
|
243
|
-
if (((
|
|
244
|
-
|
|
243
|
+
if (((pm_block_node_t *)node)->body == NULL) {
|
|
244
|
+
pm_buffer_append_u8(buffer, 0);
|
|
245
245
|
} else {
|
|
246
|
-
|
|
246
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_block_node_t *)node)->body, buffer);
|
|
247
247
|
}
|
|
248
|
-
|
|
249
|
-
|
|
248
|
+
pm_serialize_location(parser, &((pm_block_node_t *)node)->opening_loc, buffer);
|
|
249
|
+
pm_serialize_location(parser, &((pm_block_node_t *)node)->closing_loc, buffer);
|
|
250
250
|
break;
|
|
251
251
|
}
|
|
252
|
-
case
|
|
253
|
-
|
|
254
|
-
if (((
|
|
255
|
-
|
|
252
|
+
case PM_BLOCK_PARAMETER_NODE: {
|
|
253
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_block_parameter_node_t *)node)->name));
|
|
254
|
+
if (((pm_block_parameter_node_t *)node)->name_loc.start == NULL) {
|
|
255
|
+
pm_buffer_append_u8(buffer, 0);
|
|
256
256
|
} else {
|
|
257
|
-
|
|
258
|
-
|
|
257
|
+
pm_buffer_append_u8(buffer, 1);
|
|
258
|
+
pm_serialize_location(parser, &((pm_block_parameter_node_t *)node)->name_loc, buffer);
|
|
259
259
|
}
|
|
260
|
-
|
|
260
|
+
pm_serialize_location(parser, &((pm_block_parameter_node_t *)node)->operator_loc, buffer);
|
|
261
261
|
break;
|
|
262
262
|
}
|
|
263
|
-
case
|
|
264
|
-
if (((
|
|
265
|
-
|
|
263
|
+
case PM_BLOCK_PARAMETERS_NODE: {
|
|
264
|
+
if (((pm_block_parameters_node_t *)node)->parameters == NULL) {
|
|
265
|
+
pm_buffer_append_u8(buffer, 0);
|
|
266
266
|
} else {
|
|
267
|
-
|
|
267
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_block_parameters_node_t *)node)->parameters, buffer);
|
|
268
268
|
}
|
|
269
|
-
uint32_t locals_size =
|
|
270
|
-
|
|
269
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_block_parameters_node_t *)node)->locals.size);
|
|
270
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
271
271
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
272
|
-
|
|
272
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_block_parameters_node_t *)node)->locals.nodes[index], buffer);
|
|
273
273
|
}
|
|
274
|
-
if (((
|
|
275
|
-
|
|
274
|
+
if (((pm_block_parameters_node_t *)node)->opening_loc.start == NULL) {
|
|
275
|
+
pm_buffer_append_u8(buffer, 0);
|
|
276
276
|
} else {
|
|
277
|
-
|
|
278
|
-
|
|
277
|
+
pm_buffer_append_u8(buffer, 1);
|
|
278
|
+
pm_serialize_location(parser, &((pm_block_parameters_node_t *)node)->opening_loc, buffer);
|
|
279
279
|
}
|
|
280
|
-
if (((
|
|
281
|
-
|
|
280
|
+
if (((pm_block_parameters_node_t *)node)->closing_loc.start == NULL) {
|
|
281
|
+
pm_buffer_append_u8(buffer, 0);
|
|
282
282
|
} else {
|
|
283
|
-
|
|
284
|
-
|
|
283
|
+
pm_buffer_append_u8(buffer, 1);
|
|
284
|
+
pm_serialize_location(parser, &((pm_block_parameters_node_t *)node)->closing_loc, buffer);
|
|
285
285
|
}
|
|
286
286
|
break;
|
|
287
287
|
}
|
|
288
|
-
case
|
|
289
|
-
if (((
|
|
290
|
-
|
|
288
|
+
case PM_BREAK_NODE: {
|
|
289
|
+
if (((pm_break_node_t *)node)->arguments == NULL) {
|
|
290
|
+
pm_buffer_append_u8(buffer, 0);
|
|
291
291
|
} else {
|
|
292
|
-
|
|
292
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_break_node_t *)node)->arguments, buffer);
|
|
293
293
|
}
|
|
294
|
-
|
|
294
|
+
pm_serialize_location(parser, &((pm_break_node_t *)node)->keyword_loc, buffer);
|
|
295
295
|
break;
|
|
296
296
|
}
|
|
297
|
-
case
|
|
298
|
-
if (((
|
|
299
|
-
|
|
297
|
+
case PM_CALL_AND_WRITE_NODE: {
|
|
298
|
+
if (((pm_call_and_write_node_t *)node)->receiver == NULL) {
|
|
299
|
+
pm_buffer_append_u8(buffer, 0);
|
|
300
300
|
} else {
|
|
301
|
-
|
|
301
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_and_write_node_t *)node)->receiver, buffer);
|
|
302
302
|
}
|
|
303
|
-
if (((
|
|
304
|
-
|
|
303
|
+
if (((pm_call_and_write_node_t *)node)->call_operator_loc.start == NULL) {
|
|
304
|
+
pm_buffer_append_u8(buffer, 0);
|
|
305
305
|
} else {
|
|
306
|
-
|
|
307
|
-
|
|
306
|
+
pm_buffer_append_u8(buffer, 1);
|
|
307
|
+
pm_serialize_location(parser, &((pm_call_and_write_node_t *)node)->call_operator_loc, buffer);
|
|
308
308
|
}
|
|
309
|
-
if (((
|
|
310
|
-
|
|
309
|
+
if (((pm_call_and_write_node_t *)node)->message_loc.start == NULL) {
|
|
310
|
+
pm_buffer_append_u8(buffer, 0);
|
|
311
311
|
} else {
|
|
312
|
-
|
|
313
|
-
|
|
312
|
+
pm_buffer_append_u8(buffer, 1);
|
|
313
|
+
pm_serialize_location(parser, &((pm_call_and_write_node_t *)node)->message_loc, buffer);
|
|
314
314
|
}
|
|
315
|
-
if (((
|
|
316
|
-
|
|
315
|
+
if (((pm_call_and_write_node_t *)node)->opening_loc.start == NULL) {
|
|
316
|
+
pm_buffer_append_u8(buffer, 0);
|
|
317
317
|
} else {
|
|
318
|
-
|
|
319
|
-
|
|
318
|
+
pm_buffer_append_u8(buffer, 1);
|
|
319
|
+
pm_serialize_location(parser, &((pm_call_and_write_node_t *)node)->opening_loc, buffer);
|
|
320
320
|
}
|
|
321
|
-
if (((
|
|
322
|
-
|
|
321
|
+
if (((pm_call_and_write_node_t *)node)->arguments == NULL) {
|
|
322
|
+
pm_buffer_append_u8(buffer, 0);
|
|
323
323
|
} else {
|
|
324
|
-
|
|
324
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_and_write_node_t *)node)->arguments, buffer);
|
|
325
325
|
}
|
|
326
|
-
if (((
|
|
327
|
-
|
|
326
|
+
if (((pm_call_and_write_node_t *)node)->closing_loc.start == NULL) {
|
|
327
|
+
pm_buffer_append_u8(buffer, 0);
|
|
328
328
|
} else {
|
|
329
|
-
|
|
330
|
-
|
|
329
|
+
pm_buffer_append_u8(buffer, 1);
|
|
330
|
+
pm_serialize_location(parser, &((pm_call_and_write_node_t *)node)->closing_loc, buffer);
|
|
331
331
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
332
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
333
|
+
pm_serialize_string(parser, &((pm_call_and_write_node_t *)node)->read_name, buffer);
|
|
334
|
+
pm_serialize_string(parser, &((pm_call_and_write_node_t *)node)->write_name, buffer);
|
|
335
|
+
pm_serialize_location(parser, &((pm_call_and_write_node_t *)node)->operator_loc, buffer);
|
|
336
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_and_write_node_t *)node)->value, buffer);
|
|
337
337
|
break;
|
|
338
338
|
}
|
|
339
|
-
case
|
|
340
|
-
if (((
|
|
341
|
-
|
|
339
|
+
case PM_CALL_NODE: {
|
|
340
|
+
if (((pm_call_node_t *)node)->receiver == NULL) {
|
|
341
|
+
pm_buffer_append_u8(buffer, 0);
|
|
342
342
|
} else {
|
|
343
|
-
|
|
343
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_node_t *)node)->receiver, buffer);
|
|
344
344
|
}
|
|
345
|
-
if (((
|
|
346
|
-
|
|
345
|
+
if (((pm_call_node_t *)node)->call_operator_loc.start == NULL) {
|
|
346
|
+
pm_buffer_append_u8(buffer, 0);
|
|
347
347
|
} else {
|
|
348
|
-
|
|
349
|
-
|
|
348
|
+
pm_buffer_append_u8(buffer, 1);
|
|
349
|
+
pm_serialize_location(parser, &((pm_call_node_t *)node)->call_operator_loc, buffer);
|
|
350
350
|
}
|
|
351
|
-
if (((
|
|
352
|
-
|
|
351
|
+
if (((pm_call_node_t *)node)->message_loc.start == NULL) {
|
|
352
|
+
pm_buffer_append_u8(buffer, 0);
|
|
353
353
|
} else {
|
|
354
|
-
|
|
355
|
-
|
|
354
|
+
pm_buffer_append_u8(buffer, 1);
|
|
355
|
+
pm_serialize_location(parser, &((pm_call_node_t *)node)->message_loc, buffer);
|
|
356
356
|
}
|
|
357
|
-
if (((
|
|
358
|
-
|
|
357
|
+
if (((pm_call_node_t *)node)->opening_loc.start == NULL) {
|
|
358
|
+
pm_buffer_append_u8(buffer, 0);
|
|
359
359
|
} else {
|
|
360
|
-
|
|
361
|
-
|
|
360
|
+
pm_buffer_append_u8(buffer, 1);
|
|
361
|
+
pm_serialize_location(parser, &((pm_call_node_t *)node)->opening_loc, buffer);
|
|
362
362
|
}
|
|
363
|
-
if (((
|
|
364
|
-
|
|
363
|
+
if (((pm_call_node_t *)node)->arguments == NULL) {
|
|
364
|
+
pm_buffer_append_u8(buffer, 0);
|
|
365
365
|
} else {
|
|
366
|
-
|
|
366
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_node_t *)node)->arguments, buffer);
|
|
367
367
|
}
|
|
368
|
-
if (((
|
|
369
|
-
|
|
368
|
+
if (((pm_call_node_t *)node)->closing_loc.start == NULL) {
|
|
369
|
+
pm_buffer_append_u8(buffer, 0);
|
|
370
370
|
} else {
|
|
371
|
-
|
|
372
|
-
|
|
371
|
+
pm_buffer_append_u8(buffer, 1);
|
|
372
|
+
pm_serialize_location(parser, &((pm_call_node_t *)node)->closing_loc, buffer);
|
|
373
373
|
}
|
|
374
|
-
if (((
|
|
375
|
-
|
|
374
|
+
if (((pm_call_node_t *)node)->block == NULL) {
|
|
375
|
+
pm_buffer_append_u8(buffer, 0);
|
|
376
376
|
} else {
|
|
377
|
-
|
|
377
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_node_t *)node)->block, buffer);
|
|
378
378
|
}
|
|
379
|
-
|
|
380
|
-
|
|
379
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
380
|
+
pm_serialize_string(parser, &((pm_call_node_t *)node)->name, buffer);
|
|
381
381
|
break;
|
|
382
382
|
}
|
|
383
|
-
case
|
|
384
|
-
if (((
|
|
385
|
-
|
|
383
|
+
case PM_CALL_OPERATOR_WRITE_NODE: {
|
|
384
|
+
if (((pm_call_operator_write_node_t *)node)->receiver == NULL) {
|
|
385
|
+
pm_buffer_append_u8(buffer, 0);
|
|
386
386
|
} else {
|
|
387
|
-
|
|
387
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_operator_write_node_t *)node)->receiver, buffer);
|
|
388
388
|
}
|
|
389
|
-
if (((
|
|
390
|
-
|
|
389
|
+
if (((pm_call_operator_write_node_t *)node)->call_operator_loc.start == NULL) {
|
|
390
|
+
pm_buffer_append_u8(buffer, 0);
|
|
391
391
|
} else {
|
|
392
|
-
|
|
393
|
-
|
|
392
|
+
pm_buffer_append_u8(buffer, 1);
|
|
393
|
+
pm_serialize_location(parser, &((pm_call_operator_write_node_t *)node)->call_operator_loc, buffer);
|
|
394
394
|
}
|
|
395
|
-
if (((
|
|
396
|
-
|
|
395
|
+
if (((pm_call_operator_write_node_t *)node)->message_loc.start == NULL) {
|
|
396
|
+
pm_buffer_append_u8(buffer, 0);
|
|
397
397
|
} else {
|
|
398
|
-
|
|
399
|
-
|
|
398
|
+
pm_buffer_append_u8(buffer, 1);
|
|
399
|
+
pm_serialize_location(parser, &((pm_call_operator_write_node_t *)node)->message_loc, buffer);
|
|
400
400
|
}
|
|
401
|
-
if (((
|
|
402
|
-
|
|
401
|
+
if (((pm_call_operator_write_node_t *)node)->opening_loc.start == NULL) {
|
|
402
|
+
pm_buffer_append_u8(buffer, 0);
|
|
403
403
|
} else {
|
|
404
|
-
|
|
405
|
-
|
|
404
|
+
pm_buffer_append_u8(buffer, 1);
|
|
405
|
+
pm_serialize_location(parser, &((pm_call_operator_write_node_t *)node)->opening_loc, buffer);
|
|
406
406
|
}
|
|
407
|
-
if (((
|
|
408
|
-
|
|
407
|
+
if (((pm_call_operator_write_node_t *)node)->arguments == NULL) {
|
|
408
|
+
pm_buffer_append_u8(buffer, 0);
|
|
409
409
|
} else {
|
|
410
|
-
|
|
410
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_operator_write_node_t *)node)->arguments, buffer);
|
|
411
411
|
}
|
|
412
|
-
if (((
|
|
413
|
-
|
|
412
|
+
if (((pm_call_operator_write_node_t *)node)->closing_loc.start == NULL) {
|
|
413
|
+
pm_buffer_append_u8(buffer, 0);
|
|
414
414
|
} else {
|
|
415
|
-
|
|
416
|
-
|
|
415
|
+
pm_buffer_append_u8(buffer, 1);
|
|
416
|
+
pm_serialize_location(parser, &((pm_call_operator_write_node_t *)node)->closing_loc, buffer);
|
|
417
417
|
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
418
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
419
|
+
pm_serialize_string(parser, &((pm_call_operator_write_node_t *)node)->read_name, buffer);
|
|
420
|
+
pm_serialize_string(parser, &((pm_call_operator_write_node_t *)node)->write_name, buffer);
|
|
421
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_call_operator_write_node_t *)node)->operator));
|
|
422
|
+
pm_serialize_location(parser, &((pm_call_operator_write_node_t *)node)->operator_loc, buffer);
|
|
423
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_operator_write_node_t *)node)->value, buffer);
|
|
424
424
|
break;
|
|
425
425
|
}
|
|
426
|
-
case
|
|
427
|
-
if (((
|
|
428
|
-
|
|
426
|
+
case PM_CALL_OR_WRITE_NODE: {
|
|
427
|
+
if (((pm_call_or_write_node_t *)node)->receiver == NULL) {
|
|
428
|
+
pm_buffer_append_u8(buffer, 0);
|
|
429
429
|
} else {
|
|
430
|
-
|
|
430
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_or_write_node_t *)node)->receiver, buffer);
|
|
431
431
|
}
|
|
432
|
-
if (((
|
|
433
|
-
|
|
432
|
+
if (((pm_call_or_write_node_t *)node)->call_operator_loc.start == NULL) {
|
|
433
|
+
pm_buffer_append_u8(buffer, 0);
|
|
434
434
|
} else {
|
|
435
|
-
|
|
436
|
-
|
|
435
|
+
pm_buffer_append_u8(buffer, 1);
|
|
436
|
+
pm_serialize_location(parser, &((pm_call_or_write_node_t *)node)->call_operator_loc, buffer);
|
|
437
437
|
}
|
|
438
|
-
if (((
|
|
439
|
-
|
|
438
|
+
if (((pm_call_or_write_node_t *)node)->message_loc.start == NULL) {
|
|
439
|
+
pm_buffer_append_u8(buffer, 0);
|
|
440
440
|
} else {
|
|
441
|
-
|
|
442
|
-
|
|
441
|
+
pm_buffer_append_u8(buffer, 1);
|
|
442
|
+
pm_serialize_location(parser, &((pm_call_or_write_node_t *)node)->message_loc, buffer);
|
|
443
443
|
}
|
|
444
|
-
if (((
|
|
445
|
-
|
|
444
|
+
if (((pm_call_or_write_node_t *)node)->opening_loc.start == NULL) {
|
|
445
|
+
pm_buffer_append_u8(buffer, 0);
|
|
446
446
|
} else {
|
|
447
|
-
|
|
448
|
-
|
|
447
|
+
pm_buffer_append_u8(buffer, 1);
|
|
448
|
+
pm_serialize_location(parser, &((pm_call_or_write_node_t *)node)->opening_loc, buffer);
|
|
449
449
|
}
|
|
450
|
-
if (((
|
|
451
|
-
|
|
450
|
+
if (((pm_call_or_write_node_t *)node)->arguments == NULL) {
|
|
451
|
+
pm_buffer_append_u8(buffer, 0);
|
|
452
452
|
} else {
|
|
453
|
-
|
|
453
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_or_write_node_t *)node)->arguments, buffer);
|
|
454
454
|
}
|
|
455
|
-
if (((
|
|
456
|
-
|
|
455
|
+
if (((pm_call_or_write_node_t *)node)->closing_loc.start == NULL) {
|
|
456
|
+
pm_buffer_append_u8(buffer, 0);
|
|
457
457
|
} else {
|
|
458
|
-
|
|
459
|
-
|
|
458
|
+
pm_buffer_append_u8(buffer, 1);
|
|
459
|
+
pm_serialize_location(parser, &((pm_call_or_write_node_t *)node)->closing_loc, buffer);
|
|
460
460
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
461
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
462
|
+
pm_serialize_string(parser, &((pm_call_or_write_node_t *)node)->read_name, buffer);
|
|
463
|
+
pm_serialize_string(parser, &((pm_call_or_write_node_t *)node)->write_name, buffer);
|
|
464
|
+
pm_serialize_location(parser, &((pm_call_or_write_node_t *)node)->operator_loc, buffer);
|
|
465
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_call_or_write_node_t *)node)->value, buffer);
|
|
466
466
|
break;
|
|
467
467
|
}
|
|
468
|
-
case
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
468
|
+
case PM_CAPTURE_PATTERN_NODE: {
|
|
469
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_capture_pattern_node_t *)node)->value, buffer);
|
|
470
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_capture_pattern_node_t *)node)->target, buffer);
|
|
471
|
+
pm_serialize_location(parser, &((pm_capture_pattern_node_t *)node)->operator_loc, buffer);
|
|
472
472
|
break;
|
|
473
473
|
}
|
|
474
|
-
case
|
|
475
|
-
if (((
|
|
476
|
-
|
|
474
|
+
case PM_CASE_NODE: {
|
|
475
|
+
if (((pm_case_node_t *)node)->predicate == NULL) {
|
|
476
|
+
pm_buffer_append_u8(buffer, 0);
|
|
477
477
|
} else {
|
|
478
|
-
|
|
478
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_case_node_t *)node)->predicate, buffer);
|
|
479
479
|
}
|
|
480
|
-
uint32_t conditions_size =
|
|
481
|
-
|
|
480
|
+
uint32_t conditions_size = pm_sizet_to_u32(((pm_case_node_t *)node)->conditions.size);
|
|
481
|
+
pm_buffer_append_u32(buffer, conditions_size);
|
|
482
482
|
for (uint32_t index = 0; index < conditions_size; index++) {
|
|
483
|
-
|
|
483
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_case_node_t *)node)->conditions.nodes[index], buffer);
|
|
484
484
|
}
|
|
485
|
-
if (((
|
|
486
|
-
|
|
485
|
+
if (((pm_case_node_t *)node)->consequent == NULL) {
|
|
486
|
+
pm_buffer_append_u8(buffer, 0);
|
|
487
487
|
} else {
|
|
488
|
-
|
|
488
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_case_node_t *)node)->consequent, buffer);
|
|
489
489
|
}
|
|
490
|
-
|
|
491
|
-
|
|
490
|
+
pm_serialize_location(parser, &((pm_case_node_t *)node)->case_keyword_loc, buffer);
|
|
491
|
+
pm_serialize_location(parser, &((pm_case_node_t *)node)->end_keyword_loc, buffer);
|
|
492
492
|
break;
|
|
493
493
|
}
|
|
494
|
-
case
|
|
495
|
-
uint32_t locals_size =
|
|
496
|
-
|
|
494
|
+
case PM_CLASS_NODE: {
|
|
495
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_class_node_t *)node)->locals.size);
|
|
496
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
497
497
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
498
|
-
|
|
498
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_node_t *)node)->locals.ids[index]));
|
|
499
499
|
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
if (((
|
|
503
|
-
|
|
500
|
+
pm_serialize_location(parser, &((pm_class_node_t *)node)->class_keyword_loc, buffer);
|
|
501
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_class_node_t *)node)->constant_path, buffer);
|
|
502
|
+
if (((pm_class_node_t *)node)->inheritance_operator_loc.start == NULL) {
|
|
503
|
+
pm_buffer_append_u8(buffer, 0);
|
|
504
504
|
} else {
|
|
505
|
-
|
|
506
|
-
|
|
505
|
+
pm_buffer_append_u8(buffer, 1);
|
|
506
|
+
pm_serialize_location(parser, &((pm_class_node_t *)node)->inheritance_operator_loc, buffer);
|
|
507
507
|
}
|
|
508
|
-
if (((
|
|
509
|
-
|
|
508
|
+
if (((pm_class_node_t *)node)->superclass == NULL) {
|
|
509
|
+
pm_buffer_append_u8(buffer, 0);
|
|
510
510
|
} else {
|
|
511
|
-
|
|
511
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_class_node_t *)node)->superclass, buffer);
|
|
512
512
|
}
|
|
513
|
-
if (((
|
|
514
|
-
|
|
513
|
+
if (((pm_class_node_t *)node)->body == NULL) {
|
|
514
|
+
pm_buffer_append_u8(buffer, 0);
|
|
515
515
|
} else {
|
|
516
|
-
|
|
516
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_class_node_t *)node)->body, buffer);
|
|
517
517
|
}
|
|
518
|
-
|
|
519
|
-
|
|
518
|
+
pm_serialize_location(parser, &((pm_class_node_t *)node)->end_keyword_loc, buffer);
|
|
519
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_node_t *)node)->name));
|
|
520
520
|
break;
|
|
521
521
|
}
|
|
522
|
-
case
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
522
|
+
case PM_CLASS_VARIABLE_AND_WRITE_NODE: {
|
|
523
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_variable_and_write_node_t *)node)->name));
|
|
524
|
+
pm_serialize_location(parser, &((pm_class_variable_and_write_node_t *)node)->name_loc, buffer);
|
|
525
|
+
pm_serialize_location(parser, &((pm_class_variable_and_write_node_t *)node)->operator_loc, buffer);
|
|
526
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_and_write_node_t *)node)->value, buffer);
|
|
527
527
|
break;
|
|
528
528
|
}
|
|
529
|
-
case
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
529
|
+
case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
|
|
530
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_variable_operator_write_node_t *)node)->name));
|
|
531
|
+
pm_serialize_location(parser, &((pm_class_variable_operator_write_node_t *)node)->name_loc, buffer);
|
|
532
|
+
pm_serialize_location(parser, &((pm_class_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
|
533
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_operator_write_node_t *)node)->value, buffer);
|
|
534
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_variable_operator_write_node_t *)node)->operator));
|
|
535
535
|
break;
|
|
536
536
|
}
|
|
537
|
-
case
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
537
|
+
case PM_CLASS_VARIABLE_OR_WRITE_NODE: {
|
|
538
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_variable_or_write_node_t *)node)->name));
|
|
539
|
+
pm_serialize_location(parser, &((pm_class_variable_or_write_node_t *)node)->name_loc, buffer);
|
|
540
|
+
pm_serialize_location(parser, &((pm_class_variable_or_write_node_t *)node)->operator_loc, buffer);
|
|
541
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_or_write_node_t *)node)->value, buffer);
|
|
542
542
|
break;
|
|
543
543
|
}
|
|
544
|
-
case
|
|
545
|
-
|
|
544
|
+
case PM_CLASS_VARIABLE_READ_NODE: {
|
|
545
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_variable_read_node_t *)node)->name));
|
|
546
546
|
break;
|
|
547
547
|
}
|
|
548
|
-
case
|
|
549
|
-
|
|
548
|
+
case PM_CLASS_VARIABLE_TARGET_NODE: {
|
|
549
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_variable_target_node_t *)node)->name));
|
|
550
550
|
break;
|
|
551
551
|
}
|
|
552
|
-
case
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
if (((
|
|
557
|
-
|
|
552
|
+
case PM_CLASS_VARIABLE_WRITE_NODE: {
|
|
553
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_class_variable_write_node_t *)node)->name));
|
|
554
|
+
pm_serialize_location(parser, &((pm_class_variable_write_node_t *)node)->name_loc, buffer);
|
|
555
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_class_variable_write_node_t *)node)->value, buffer);
|
|
556
|
+
if (((pm_class_variable_write_node_t *)node)->operator_loc.start == NULL) {
|
|
557
|
+
pm_buffer_append_u8(buffer, 0);
|
|
558
558
|
} else {
|
|
559
|
-
|
|
560
|
-
|
|
559
|
+
pm_buffer_append_u8(buffer, 1);
|
|
560
|
+
pm_serialize_location(parser, &((pm_class_variable_write_node_t *)node)->operator_loc, buffer);
|
|
561
561
|
}
|
|
562
562
|
break;
|
|
563
563
|
}
|
|
564
|
-
case
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
564
|
+
case PM_CONSTANT_AND_WRITE_NODE: {
|
|
565
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_and_write_node_t *)node)->name));
|
|
566
|
+
pm_serialize_location(parser, &((pm_constant_and_write_node_t *)node)->name_loc, buffer);
|
|
567
|
+
pm_serialize_location(parser, &((pm_constant_and_write_node_t *)node)->operator_loc, buffer);
|
|
568
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_and_write_node_t *)node)->value, buffer);
|
|
569
569
|
break;
|
|
570
570
|
}
|
|
571
|
-
case
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
571
|
+
case PM_CONSTANT_OPERATOR_WRITE_NODE: {
|
|
572
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_operator_write_node_t *)node)->name));
|
|
573
|
+
pm_serialize_location(parser, &((pm_constant_operator_write_node_t *)node)->name_loc, buffer);
|
|
574
|
+
pm_serialize_location(parser, &((pm_constant_operator_write_node_t *)node)->operator_loc, buffer);
|
|
575
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_operator_write_node_t *)node)->value, buffer);
|
|
576
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_operator_write_node_t *)node)->operator));
|
|
577
577
|
break;
|
|
578
578
|
}
|
|
579
|
-
case
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
579
|
+
case PM_CONSTANT_OR_WRITE_NODE: {
|
|
580
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_or_write_node_t *)node)->name));
|
|
581
|
+
pm_serialize_location(parser, &((pm_constant_or_write_node_t *)node)->name_loc, buffer);
|
|
582
|
+
pm_serialize_location(parser, &((pm_constant_or_write_node_t *)node)->operator_loc, buffer);
|
|
583
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_or_write_node_t *)node)->value, buffer);
|
|
584
584
|
break;
|
|
585
585
|
}
|
|
586
|
-
case
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
586
|
+
case PM_CONSTANT_PATH_AND_WRITE_NODE: {
|
|
587
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_and_write_node_t *)node)->target, buffer);
|
|
588
|
+
pm_serialize_location(parser, &((pm_constant_path_and_write_node_t *)node)->operator_loc, buffer);
|
|
589
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_and_write_node_t *)node)->value, buffer);
|
|
590
590
|
break;
|
|
591
591
|
}
|
|
592
|
-
case
|
|
593
|
-
if (((
|
|
594
|
-
|
|
592
|
+
case PM_CONSTANT_PATH_NODE: {
|
|
593
|
+
if (((pm_constant_path_node_t *)node)->parent == NULL) {
|
|
594
|
+
pm_buffer_append_u8(buffer, 0);
|
|
595
595
|
} else {
|
|
596
|
-
|
|
596
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_node_t *)node)->parent, buffer);
|
|
597
597
|
}
|
|
598
|
-
|
|
599
|
-
|
|
598
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_node_t *)node)->child, buffer);
|
|
599
|
+
pm_serialize_location(parser, &((pm_constant_path_node_t *)node)->delimiter_loc, buffer);
|
|
600
600
|
break;
|
|
601
601
|
}
|
|
602
|
-
case
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
602
|
+
case PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
|
|
603
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_operator_write_node_t *)node)->target, buffer);
|
|
604
|
+
pm_serialize_location(parser, &((pm_constant_path_operator_write_node_t *)node)->operator_loc, buffer);
|
|
605
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_operator_write_node_t *)node)->value, buffer);
|
|
606
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_path_operator_write_node_t *)node)->operator));
|
|
607
607
|
break;
|
|
608
608
|
}
|
|
609
|
-
case
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
609
|
+
case PM_CONSTANT_PATH_OR_WRITE_NODE: {
|
|
610
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_or_write_node_t *)node)->target, buffer);
|
|
611
|
+
pm_serialize_location(parser, &((pm_constant_path_or_write_node_t *)node)->operator_loc, buffer);
|
|
612
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_or_write_node_t *)node)->value, buffer);
|
|
613
613
|
break;
|
|
614
614
|
}
|
|
615
|
-
case
|
|
616
|
-
if (((
|
|
617
|
-
|
|
615
|
+
case PM_CONSTANT_PATH_TARGET_NODE: {
|
|
616
|
+
if (((pm_constant_path_target_node_t *)node)->parent == NULL) {
|
|
617
|
+
pm_buffer_append_u8(buffer, 0);
|
|
618
618
|
} else {
|
|
619
|
-
|
|
619
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_target_node_t *)node)->parent, buffer);
|
|
620
620
|
}
|
|
621
|
-
|
|
622
|
-
|
|
621
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_target_node_t *)node)->child, buffer);
|
|
622
|
+
pm_serialize_location(parser, &((pm_constant_path_target_node_t *)node)->delimiter_loc, buffer);
|
|
623
623
|
break;
|
|
624
624
|
}
|
|
625
|
-
case
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
625
|
+
case PM_CONSTANT_PATH_WRITE_NODE: {
|
|
626
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_write_node_t *)node)->target, buffer);
|
|
627
|
+
pm_serialize_location(parser, &((pm_constant_path_write_node_t *)node)->operator_loc, buffer);
|
|
628
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_path_write_node_t *)node)->value, buffer);
|
|
629
629
|
break;
|
|
630
630
|
}
|
|
631
|
-
case
|
|
632
|
-
|
|
631
|
+
case PM_CONSTANT_READ_NODE: {
|
|
632
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_read_node_t *)node)->name));
|
|
633
633
|
break;
|
|
634
634
|
}
|
|
635
|
-
case
|
|
636
|
-
|
|
635
|
+
case PM_CONSTANT_TARGET_NODE: {
|
|
636
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_target_node_t *)node)->name));
|
|
637
637
|
break;
|
|
638
638
|
}
|
|
639
|
-
case
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
639
|
+
case PM_CONSTANT_WRITE_NODE: {
|
|
640
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_constant_write_node_t *)node)->name));
|
|
641
|
+
pm_serialize_location(parser, &((pm_constant_write_node_t *)node)->name_loc, buffer);
|
|
642
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_constant_write_node_t *)node)->value, buffer);
|
|
643
|
+
pm_serialize_location(parser, &((pm_constant_write_node_t *)node)->operator_loc, buffer);
|
|
644
644
|
break;
|
|
645
645
|
}
|
|
646
|
-
case
|
|
646
|
+
case PM_DEF_NODE: {
|
|
647
647
|
// serialize length
|
|
648
648
|
// encoding of location u32s make us need to save this offset.
|
|
649
649
|
size_t length_offset = buffer->length;
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
if (((
|
|
654
|
-
|
|
650
|
+
pm_buffer_append_str(buffer, "\0\0\0\0", 4); /* consume 4 bytes, updated below */
|
|
651
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_def_node_t *)node)->name));
|
|
652
|
+
pm_serialize_location(parser, &((pm_def_node_t *)node)->name_loc, buffer);
|
|
653
|
+
if (((pm_def_node_t *)node)->receiver == NULL) {
|
|
654
|
+
pm_buffer_append_u8(buffer, 0);
|
|
655
655
|
} else {
|
|
656
|
-
|
|
656
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_def_node_t *)node)->receiver, buffer);
|
|
657
657
|
}
|
|
658
|
-
if (((
|
|
659
|
-
|
|
658
|
+
if (((pm_def_node_t *)node)->parameters == NULL) {
|
|
659
|
+
pm_buffer_append_u8(buffer, 0);
|
|
660
660
|
} else {
|
|
661
|
-
|
|
661
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_def_node_t *)node)->parameters, buffer);
|
|
662
662
|
}
|
|
663
|
-
if (((
|
|
664
|
-
|
|
663
|
+
if (((pm_def_node_t *)node)->body == NULL) {
|
|
664
|
+
pm_buffer_append_u8(buffer, 0);
|
|
665
665
|
} else {
|
|
666
|
-
|
|
666
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_def_node_t *)node)->body, buffer);
|
|
667
667
|
}
|
|
668
|
-
uint32_t locals_size =
|
|
669
|
-
|
|
668
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_def_node_t *)node)->locals.size);
|
|
669
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
670
670
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
671
|
-
|
|
671
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_def_node_t *)node)->locals.ids[index]));
|
|
672
672
|
}
|
|
673
|
-
|
|
674
|
-
if (((
|
|
675
|
-
|
|
673
|
+
pm_serialize_location(parser, &((pm_def_node_t *)node)->def_keyword_loc, buffer);
|
|
674
|
+
if (((pm_def_node_t *)node)->operator_loc.start == NULL) {
|
|
675
|
+
pm_buffer_append_u8(buffer, 0);
|
|
676
676
|
} else {
|
|
677
|
-
|
|
678
|
-
|
|
677
|
+
pm_buffer_append_u8(buffer, 1);
|
|
678
|
+
pm_serialize_location(parser, &((pm_def_node_t *)node)->operator_loc, buffer);
|
|
679
679
|
}
|
|
680
|
-
if (((
|
|
681
|
-
|
|
680
|
+
if (((pm_def_node_t *)node)->lparen_loc.start == NULL) {
|
|
681
|
+
pm_buffer_append_u8(buffer, 0);
|
|
682
682
|
} else {
|
|
683
|
-
|
|
684
|
-
|
|
683
|
+
pm_buffer_append_u8(buffer, 1);
|
|
684
|
+
pm_serialize_location(parser, &((pm_def_node_t *)node)->lparen_loc, buffer);
|
|
685
685
|
}
|
|
686
|
-
if (((
|
|
687
|
-
|
|
686
|
+
if (((pm_def_node_t *)node)->rparen_loc.start == NULL) {
|
|
687
|
+
pm_buffer_append_u8(buffer, 0);
|
|
688
688
|
} else {
|
|
689
|
-
|
|
690
|
-
|
|
689
|
+
pm_buffer_append_u8(buffer, 1);
|
|
690
|
+
pm_serialize_location(parser, &((pm_def_node_t *)node)->rparen_loc, buffer);
|
|
691
691
|
}
|
|
692
|
-
if (((
|
|
693
|
-
|
|
692
|
+
if (((pm_def_node_t *)node)->equal_loc.start == NULL) {
|
|
693
|
+
pm_buffer_append_u8(buffer, 0);
|
|
694
694
|
} else {
|
|
695
|
-
|
|
696
|
-
|
|
695
|
+
pm_buffer_append_u8(buffer, 1);
|
|
696
|
+
pm_serialize_location(parser, &((pm_def_node_t *)node)->equal_loc, buffer);
|
|
697
697
|
}
|
|
698
|
-
if (((
|
|
699
|
-
|
|
698
|
+
if (((pm_def_node_t *)node)->end_keyword_loc.start == NULL) {
|
|
699
|
+
pm_buffer_append_u8(buffer, 0);
|
|
700
700
|
} else {
|
|
701
|
-
|
|
702
|
-
|
|
701
|
+
pm_buffer_append_u8(buffer, 1);
|
|
702
|
+
pm_serialize_location(parser, &((pm_def_node_t *)node)->end_keyword_loc, buffer);
|
|
703
703
|
}
|
|
704
704
|
// serialize length
|
|
705
|
-
uint32_t length =
|
|
705
|
+
uint32_t length = pm_sizet_to_u32(buffer->length - offset - sizeof(uint32_t));
|
|
706
706
|
memcpy(buffer->value + length_offset, &length, sizeof(uint32_t));
|
|
707
707
|
break;
|
|
708
708
|
}
|
|
709
|
-
case
|
|
710
|
-
if (((
|
|
711
|
-
|
|
709
|
+
case PM_DEFINED_NODE: {
|
|
710
|
+
if (((pm_defined_node_t *)node)->lparen_loc.start == NULL) {
|
|
711
|
+
pm_buffer_append_u8(buffer, 0);
|
|
712
712
|
} else {
|
|
713
|
-
|
|
714
|
-
|
|
713
|
+
pm_buffer_append_u8(buffer, 1);
|
|
714
|
+
pm_serialize_location(parser, &((pm_defined_node_t *)node)->lparen_loc, buffer);
|
|
715
715
|
}
|
|
716
|
-
|
|
717
|
-
if (((
|
|
718
|
-
|
|
716
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_defined_node_t *)node)->value, buffer);
|
|
717
|
+
if (((pm_defined_node_t *)node)->rparen_loc.start == NULL) {
|
|
718
|
+
pm_buffer_append_u8(buffer, 0);
|
|
719
719
|
} else {
|
|
720
|
-
|
|
721
|
-
|
|
720
|
+
pm_buffer_append_u8(buffer, 1);
|
|
721
|
+
pm_serialize_location(parser, &((pm_defined_node_t *)node)->rparen_loc, buffer);
|
|
722
722
|
}
|
|
723
|
-
|
|
723
|
+
pm_serialize_location(parser, &((pm_defined_node_t *)node)->keyword_loc, buffer);
|
|
724
724
|
break;
|
|
725
725
|
}
|
|
726
|
-
case
|
|
727
|
-
|
|
728
|
-
if (((
|
|
729
|
-
|
|
726
|
+
case PM_ELSE_NODE: {
|
|
727
|
+
pm_serialize_location(parser, &((pm_else_node_t *)node)->else_keyword_loc, buffer);
|
|
728
|
+
if (((pm_else_node_t *)node)->statements == NULL) {
|
|
729
|
+
pm_buffer_append_u8(buffer, 0);
|
|
730
730
|
} else {
|
|
731
|
-
|
|
731
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_else_node_t *)node)->statements, buffer);
|
|
732
732
|
}
|
|
733
|
-
if (((
|
|
734
|
-
|
|
733
|
+
if (((pm_else_node_t *)node)->end_keyword_loc.start == NULL) {
|
|
734
|
+
pm_buffer_append_u8(buffer, 0);
|
|
735
735
|
} else {
|
|
736
|
-
|
|
737
|
-
|
|
736
|
+
pm_buffer_append_u8(buffer, 1);
|
|
737
|
+
pm_serialize_location(parser, &((pm_else_node_t *)node)->end_keyword_loc, buffer);
|
|
738
738
|
}
|
|
739
739
|
break;
|
|
740
740
|
}
|
|
741
|
-
case
|
|
742
|
-
|
|
743
|
-
if (((
|
|
744
|
-
|
|
741
|
+
case PM_EMBEDDED_STATEMENTS_NODE: {
|
|
742
|
+
pm_serialize_location(parser, &((pm_embedded_statements_node_t *)node)->opening_loc, buffer);
|
|
743
|
+
if (((pm_embedded_statements_node_t *)node)->statements == NULL) {
|
|
744
|
+
pm_buffer_append_u8(buffer, 0);
|
|
745
745
|
} else {
|
|
746
|
-
|
|
746
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_embedded_statements_node_t *)node)->statements, buffer);
|
|
747
747
|
}
|
|
748
|
-
|
|
748
|
+
pm_serialize_location(parser, &((pm_embedded_statements_node_t *)node)->closing_loc, buffer);
|
|
749
749
|
break;
|
|
750
750
|
}
|
|
751
|
-
case
|
|
752
|
-
|
|
753
|
-
|
|
751
|
+
case PM_EMBEDDED_VARIABLE_NODE: {
|
|
752
|
+
pm_serialize_location(parser, &((pm_embedded_variable_node_t *)node)->operator_loc, buffer);
|
|
753
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_embedded_variable_node_t *)node)->variable, buffer);
|
|
754
754
|
break;
|
|
755
755
|
}
|
|
756
|
-
case
|
|
757
|
-
|
|
758
|
-
if (((
|
|
759
|
-
|
|
756
|
+
case PM_ENSURE_NODE: {
|
|
757
|
+
pm_serialize_location(parser, &((pm_ensure_node_t *)node)->ensure_keyword_loc, buffer);
|
|
758
|
+
if (((pm_ensure_node_t *)node)->statements == NULL) {
|
|
759
|
+
pm_buffer_append_u8(buffer, 0);
|
|
760
760
|
} else {
|
|
761
|
-
|
|
761
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_ensure_node_t *)node)->statements, buffer);
|
|
762
762
|
}
|
|
763
|
-
|
|
763
|
+
pm_serialize_location(parser, &((pm_ensure_node_t *)node)->end_keyword_loc, buffer);
|
|
764
764
|
break;
|
|
765
765
|
}
|
|
766
|
-
case
|
|
766
|
+
case PM_FALSE_NODE: {
|
|
767
767
|
break;
|
|
768
768
|
}
|
|
769
|
-
case
|
|
770
|
-
if (((
|
|
771
|
-
|
|
769
|
+
case PM_FIND_PATTERN_NODE: {
|
|
770
|
+
if (((pm_find_pattern_node_t *)node)->constant == NULL) {
|
|
771
|
+
pm_buffer_append_u8(buffer, 0);
|
|
772
772
|
} else {
|
|
773
|
-
|
|
773
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_find_pattern_node_t *)node)->constant, buffer);
|
|
774
774
|
}
|
|
775
|
-
|
|
776
|
-
uint32_t requireds_size =
|
|
777
|
-
|
|
775
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_find_pattern_node_t *)node)->left, buffer);
|
|
776
|
+
uint32_t requireds_size = pm_sizet_to_u32(((pm_find_pattern_node_t *)node)->requireds.size);
|
|
777
|
+
pm_buffer_append_u32(buffer, requireds_size);
|
|
778
778
|
for (uint32_t index = 0; index < requireds_size; index++) {
|
|
779
|
-
|
|
779
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_find_pattern_node_t *)node)->requireds.nodes[index], buffer);
|
|
780
780
|
}
|
|
781
|
-
|
|
782
|
-
if (((
|
|
783
|
-
|
|
781
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_find_pattern_node_t *)node)->right, buffer);
|
|
782
|
+
if (((pm_find_pattern_node_t *)node)->opening_loc.start == NULL) {
|
|
783
|
+
pm_buffer_append_u8(buffer, 0);
|
|
784
784
|
} else {
|
|
785
|
-
|
|
786
|
-
|
|
785
|
+
pm_buffer_append_u8(buffer, 1);
|
|
786
|
+
pm_serialize_location(parser, &((pm_find_pattern_node_t *)node)->opening_loc, buffer);
|
|
787
787
|
}
|
|
788
|
-
if (((
|
|
789
|
-
|
|
788
|
+
if (((pm_find_pattern_node_t *)node)->closing_loc.start == NULL) {
|
|
789
|
+
pm_buffer_append_u8(buffer, 0);
|
|
790
790
|
} else {
|
|
791
|
-
|
|
792
|
-
|
|
791
|
+
pm_buffer_append_u8(buffer, 1);
|
|
792
|
+
pm_serialize_location(parser, &((pm_find_pattern_node_t *)node)->closing_loc, buffer);
|
|
793
793
|
}
|
|
794
794
|
break;
|
|
795
795
|
}
|
|
796
|
-
case
|
|
797
|
-
if (((
|
|
798
|
-
|
|
796
|
+
case PM_FLIP_FLOP_NODE: {
|
|
797
|
+
if (((pm_flip_flop_node_t *)node)->left == NULL) {
|
|
798
|
+
pm_buffer_append_u8(buffer, 0);
|
|
799
799
|
} else {
|
|
800
|
-
|
|
800
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_flip_flop_node_t *)node)->left, buffer);
|
|
801
801
|
}
|
|
802
|
-
if (((
|
|
803
|
-
|
|
802
|
+
if (((pm_flip_flop_node_t *)node)->right == NULL) {
|
|
803
|
+
pm_buffer_append_u8(buffer, 0);
|
|
804
804
|
} else {
|
|
805
|
-
|
|
805
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_flip_flop_node_t *)node)->right, buffer);
|
|
806
806
|
}
|
|
807
|
-
|
|
808
|
-
|
|
807
|
+
pm_serialize_location(parser, &((pm_flip_flop_node_t *)node)->operator_loc, buffer);
|
|
808
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
809
809
|
break;
|
|
810
810
|
}
|
|
811
|
-
case
|
|
811
|
+
case PM_FLOAT_NODE: {
|
|
812
812
|
break;
|
|
813
813
|
}
|
|
814
|
-
case
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
if (((
|
|
818
|
-
|
|
814
|
+
case PM_FOR_NODE: {
|
|
815
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_for_node_t *)node)->index, buffer);
|
|
816
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_for_node_t *)node)->collection, buffer);
|
|
817
|
+
if (((pm_for_node_t *)node)->statements == NULL) {
|
|
818
|
+
pm_buffer_append_u8(buffer, 0);
|
|
819
819
|
} else {
|
|
820
|
-
|
|
820
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_for_node_t *)node)->statements, buffer);
|
|
821
821
|
}
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
if (((
|
|
825
|
-
|
|
822
|
+
pm_serialize_location(parser, &((pm_for_node_t *)node)->for_keyword_loc, buffer);
|
|
823
|
+
pm_serialize_location(parser, &((pm_for_node_t *)node)->in_keyword_loc, buffer);
|
|
824
|
+
if (((pm_for_node_t *)node)->do_keyword_loc.start == NULL) {
|
|
825
|
+
pm_buffer_append_u8(buffer, 0);
|
|
826
826
|
} else {
|
|
827
|
-
|
|
828
|
-
|
|
827
|
+
pm_buffer_append_u8(buffer, 1);
|
|
828
|
+
pm_serialize_location(parser, &((pm_for_node_t *)node)->do_keyword_loc, buffer);
|
|
829
829
|
}
|
|
830
|
-
|
|
830
|
+
pm_serialize_location(parser, &((pm_for_node_t *)node)->end_keyword_loc, buffer);
|
|
831
831
|
break;
|
|
832
832
|
}
|
|
833
|
-
case
|
|
833
|
+
case PM_FORWARDING_ARGUMENTS_NODE: {
|
|
834
834
|
break;
|
|
835
835
|
}
|
|
836
|
-
case
|
|
836
|
+
case PM_FORWARDING_PARAMETER_NODE: {
|
|
837
837
|
break;
|
|
838
838
|
}
|
|
839
|
-
case
|
|
840
|
-
if (((
|
|
841
|
-
|
|
839
|
+
case PM_FORWARDING_SUPER_NODE: {
|
|
840
|
+
if (((pm_forwarding_super_node_t *)node)->block == NULL) {
|
|
841
|
+
pm_buffer_append_u8(buffer, 0);
|
|
842
842
|
} else {
|
|
843
|
-
|
|
843
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_forwarding_super_node_t *)node)->block, buffer);
|
|
844
844
|
}
|
|
845
845
|
break;
|
|
846
846
|
}
|
|
847
|
-
case
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
847
|
+
case PM_GLOBAL_VARIABLE_AND_WRITE_NODE: {
|
|
848
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_global_variable_and_write_node_t *)node)->name));
|
|
849
|
+
pm_serialize_location(parser, &((pm_global_variable_and_write_node_t *)node)->name_loc, buffer);
|
|
850
|
+
pm_serialize_location(parser, &((pm_global_variable_and_write_node_t *)node)->operator_loc, buffer);
|
|
851
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_and_write_node_t *)node)->value, buffer);
|
|
852
852
|
break;
|
|
853
853
|
}
|
|
854
|
-
case
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
854
|
+
case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
|
|
855
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_global_variable_operator_write_node_t *)node)->name));
|
|
856
|
+
pm_serialize_location(parser, &((pm_global_variable_operator_write_node_t *)node)->name_loc, buffer);
|
|
857
|
+
pm_serialize_location(parser, &((pm_global_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
|
858
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_operator_write_node_t *)node)->value, buffer);
|
|
859
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_global_variable_operator_write_node_t *)node)->operator));
|
|
860
860
|
break;
|
|
861
861
|
}
|
|
862
|
-
case
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
862
|
+
case PM_GLOBAL_VARIABLE_OR_WRITE_NODE: {
|
|
863
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_global_variable_or_write_node_t *)node)->name));
|
|
864
|
+
pm_serialize_location(parser, &((pm_global_variable_or_write_node_t *)node)->name_loc, buffer);
|
|
865
|
+
pm_serialize_location(parser, &((pm_global_variable_or_write_node_t *)node)->operator_loc, buffer);
|
|
866
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_or_write_node_t *)node)->value, buffer);
|
|
867
867
|
break;
|
|
868
868
|
}
|
|
869
|
-
case
|
|
870
|
-
|
|
869
|
+
case PM_GLOBAL_VARIABLE_READ_NODE: {
|
|
870
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_global_variable_read_node_t *)node)->name));
|
|
871
871
|
break;
|
|
872
872
|
}
|
|
873
|
-
case
|
|
874
|
-
|
|
873
|
+
case PM_GLOBAL_VARIABLE_TARGET_NODE: {
|
|
874
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_global_variable_target_node_t *)node)->name));
|
|
875
875
|
break;
|
|
876
876
|
}
|
|
877
|
-
case
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
877
|
+
case PM_GLOBAL_VARIABLE_WRITE_NODE: {
|
|
878
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_global_variable_write_node_t *)node)->name));
|
|
879
|
+
pm_serialize_location(parser, &((pm_global_variable_write_node_t *)node)->name_loc, buffer);
|
|
880
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_global_variable_write_node_t *)node)->value, buffer);
|
|
881
|
+
pm_serialize_location(parser, &((pm_global_variable_write_node_t *)node)->operator_loc, buffer);
|
|
882
882
|
break;
|
|
883
883
|
}
|
|
884
|
-
case
|
|
885
|
-
|
|
886
|
-
uint32_t elements_size =
|
|
887
|
-
|
|
884
|
+
case PM_HASH_NODE: {
|
|
885
|
+
pm_serialize_location(parser, &((pm_hash_node_t *)node)->opening_loc, buffer);
|
|
886
|
+
uint32_t elements_size = pm_sizet_to_u32(((pm_hash_node_t *)node)->elements.size);
|
|
887
|
+
pm_buffer_append_u32(buffer, elements_size);
|
|
888
888
|
for (uint32_t index = 0; index < elements_size; index++) {
|
|
889
|
-
|
|
889
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_hash_node_t *)node)->elements.nodes[index], buffer);
|
|
890
890
|
}
|
|
891
|
-
|
|
891
|
+
pm_serialize_location(parser, &((pm_hash_node_t *)node)->closing_loc, buffer);
|
|
892
892
|
break;
|
|
893
893
|
}
|
|
894
|
-
case
|
|
895
|
-
if (((
|
|
896
|
-
|
|
894
|
+
case PM_HASH_PATTERN_NODE: {
|
|
895
|
+
if (((pm_hash_pattern_node_t *)node)->constant == NULL) {
|
|
896
|
+
pm_buffer_append_u8(buffer, 0);
|
|
897
897
|
} else {
|
|
898
|
-
|
|
898
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_hash_pattern_node_t *)node)->constant, buffer);
|
|
899
899
|
}
|
|
900
|
-
uint32_t assocs_size =
|
|
901
|
-
|
|
900
|
+
uint32_t assocs_size = pm_sizet_to_u32(((pm_hash_pattern_node_t *)node)->assocs.size);
|
|
901
|
+
pm_buffer_append_u32(buffer, assocs_size);
|
|
902
902
|
for (uint32_t index = 0; index < assocs_size; index++) {
|
|
903
|
-
|
|
903
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_hash_pattern_node_t *)node)->assocs.nodes[index], buffer);
|
|
904
904
|
}
|
|
905
|
-
if (((
|
|
906
|
-
|
|
905
|
+
if (((pm_hash_pattern_node_t *)node)->kwrest == NULL) {
|
|
906
|
+
pm_buffer_append_u8(buffer, 0);
|
|
907
907
|
} else {
|
|
908
|
-
|
|
908
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_hash_pattern_node_t *)node)->kwrest, buffer);
|
|
909
909
|
}
|
|
910
|
-
if (((
|
|
911
|
-
|
|
910
|
+
if (((pm_hash_pattern_node_t *)node)->opening_loc.start == NULL) {
|
|
911
|
+
pm_buffer_append_u8(buffer, 0);
|
|
912
912
|
} else {
|
|
913
|
-
|
|
914
|
-
|
|
913
|
+
pm_buffer_append_u8(buffer, 1);
|
|
914
|
+
pm_serialize_location(parser, &((pm_hash_pattern_node_t *)node)->opening_loc, buffer);
|
|
915
915
|
}
|
|
916
|
-
if (((
|
|
917
|
-
|
|
916
|
+
if (((pm_hash_pattern_node_t *)node)->closing_loc.start == NULL) {
|
|
917
|
+
pm_buffer_append_u8(buffer, 0);
|
|
918
918
|
} else {
|
|
919
|
-
|
|
920
|
-
|
|
919
|
+
pm_buffer_append_u8(buffer, 1);
|
|
920
|
+
pm_serialize_location(parser, &((pm_hash_pattern_node_t *)node)->closing_loc, buffer);
|
|
921
921
|
}
|
|
922
922
|
break;
|
|
923
923
|
}
|
|
924
|
-
case
|
|
925
|
-
if (((
|
|
926
|
-
|
|
924
|
+
case PM_IF_NODE: {
|
|
925
|
+
if (((pm_if_node_t *)node)->if_keyword_loc.start == NULL) {
|
|
926
|
+
pm_buffer_append_u8(buffer, 0);
|
|
927
927
|
} else {
|
|
928
|
-
|
|
929
|
-
|
|
928
|
+
pm_buffer_append_u8(buffer, 1);
|
|
929
|
+
pm_serialize_location(parser, &((pm_if_node_t *)node)->if_keyword_loc, buffer);
|
|
930
930
|
}
|
|
931
|
-
|
|
932
|
-
if (((
|
|
933
|
-
|
|
931
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_if_node_t *)node)->predicate, buffer);
|
|
932
|
+
if (((pm_if_node_t *)node)->statements == NULL) {
|
|
933
|
+
pm_buffer_append_u8(buffer, 0);
|
|
934
934
|
} else {
|
|
935
|
-
|
|
935
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_if_node_t *)node)->statements, buffer);
|
|
936
936
|
}
|
|
937
|
-
if (((
|
|
938
|
-
|
|
937
|
+
if (((pm_if_node_t *)node)->consequent == NULL) {
|
|
938
|
+
pm_buffer_append_u8(buffer, 0);
|
|
939
939
|
} else {
|
|
940
|
-
|
|
940
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_if_node_t *)node)->consequent, buffer);
|
|
941
941
|
}
|
|
942
|
-
if (((
|
|
943
|
-
|
|
942
|
+
if (((pm_if_node_t *)node)->end_keyword_loc.start == NULL) {
|
|
943
|
+
pm_buffer_append_u8(buffer, 0);
|
|
944
944
|
} else {
|
|
945
|
-
|
|
946
|
-
|
|
945
|
+
pm_buffer_append_u8(buffer, 1);
|
|
946
|
+
pm_serialize_location(parser, &((pm_if_node_t *)node)->end_keyword_loc, buffer);
|
|
947
947
|
}
|
|
948
948
|
break;
|
|
949
949
|
}
|
|
950
|
-
case
|
|
951
|
-
|
|
950
|
+
case PM_IMAGINARY_NODE: {
|
|
951
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_imaginary_node_t *)node)->numeric, buffer);
|
|
952
952
|
break;
|
|
953
953
|
}
|
|
954
|
-
case
|
|
955
|
-
|
|
954
|
+
case PM_IMPLICIT_NODE: {
|
|
955
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_implicit_node_t *)node)->value, buffer);
|
|
956
956
|
break;
|
|
957
957
|
}
|
|
958
|
-
case
|
|
959
|
-
|
|
960
|
-
if (((
|
|
961
|
-
|
|
958
|
+
case PM_IN_NODE: {
|
|
959
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_in_node_t *)node)->pattern, buffer);
|
|
960
|
+
if (((pm_in_node_t *)node)->statements == NULL) {
|
|
961
|
+
pm_buffer_append_u8(buffer, 0);
|
|
962
962
|
} else {
|
|
963
|
-
|
|
963
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_in_node_t *)node)->statements, buffer);
|
|
964
964
|
}
|
|
965
|
-
|
|
966
|
-
if (((
|
|
967
|
-
|
|
965
|
+
pm_serialize_location(parser, &((pm_in_node_t *)node)->in_loc, buffer);
|
|
966
|
+
if (((pm_in_node_t *)node)->then_loc.start == NULL) {
|
|
967
|
+
pm_buffer_append_u8(buffer, 0);
|
|
968
968
|
} else {
|
|
969
|
-
|
|
970
|
-
|
|
969
|
+
pm_buffer_append_u8(buffer, 1);
|
|
970
|
+
pm_serialize_location(parser, &((pm_in_node_t *)node)->then_loc, buffer);
|
|
971
971
|
}
|
|
972
972
|
break;
|
|
973
973
|
}
|
|
974
|
-
case
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
974
|
+
case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
|
|
975
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_instance_variable_and_write_node_t *)node)->name));
|
|
976
|
+
pm_serialize_location(parser, &((pm_instance_variable_and_write_node_t *)node)->name_loc, buffer);
|
|
977
|
+
pm_serialize_location(parser, &((pm_instance_variable_and_write_node_t *)node)->operator_loc, buffer);
|
|
978
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_and_write_node_t *)node)->value, buffer);
|
|
979
979
|
break;
|
|
980
980
|
}
|
|
981
|
-
case
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
981
|
+
case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
|
|
982
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_instance_variable_operator_write_node_t *)node)->name));
|
|
983
|
+
pm_serialize_location(parser, &((pm_instance_variable_operator_write_node_t *)node)->name_loc, buffer);
|
|
984
|
+
pm_serialize_location(parser, &((pm_instance_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
|
985
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_operator_write_node_t *)node)->value, buffer);
|
|
986
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_instance_variable_operator_write_node_t *)node)->operator));
|
|
987
987
|
break;
|
|
988
988
|
}
|
|
989
|
-
case
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
989
|
+
case PM_INSTANCE_VARIABLE_OR_WRITE_NODE: {
|
|
990
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_instance_variable_or_write_node_t *)node)->name));
|
|
991
|
+
pm_serialize_location(parser, &((pm_instance_variable_or_write_node_t *)node)->name_loc, buffer);
|
|
992
|
+
pm_serialize_location(parser, &((pm_instance_variable_or_write_node_t *)node)->operator_loc, buffer);
|
|
993
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_or_write_node_t *)node)->value, buffer);
|
|
994
994
|
break;
|
|
995
995
|
}
|
|
996
|
-
case
|
|
997
|
-
|
|
996
|
+
case PM_INSTANCE_VARIABLE_READ_NODE: {
|
|
997
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_instance_variable_read_node_t *)node)->name));
|
|
998
998
|
break;
|
|
999
999
|
}
|
|
1000
|
-
case
|
|
1001
|
-
|
|
1000
|
+
case PM_INSTANCE_VARIABLE_TARGET_NODE: {
|
|
1001
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_instance_variable_target_node_t *)node)->name));
|
|
1002
1002
|
break;
|
|
1003
1003
|
}
|
|
1004
|
-
case
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1004
|
+
case PM_INSTANCE_VARIABLE_WRITE_NODE: {
|
|
1005
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_instance_variable_write_node_t *)node)->name));
|
|
1006
|
+
pm_serialize_location(parser, &((pm_instance_variable_write_node_t *)node)->name_loc, buffer);
|
|
1007
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_instance_variable_write_node_t *)node)->value, buffer);
|
|
1008
|
+
pm_serialize_location(parser, &((pm_instance_variable_write_node_t *)node)->operator_loc, buffer);
|
|
1009
1009
|
break;
|
|
1010
1010
|
}
|
|
1011
|
-
case
|
|
1012
|
-
|
|
1011
|
+
case PM_INTEGER_NODE: {
|
|
1012
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1013
1013
|
break;
|
|
1014
1014
|
}
|
|
1015
|
-
case
|
|
1016
|
-
|
|
1017
|
-
uint32_t parts_size =
|
|
1018
|
-
|
|
1015
|
+
case PM_INTERPOLATED_MATCH_LAST_LINE_NODE: {
|
|
1016
|
+
pm_serialize_location(parser, &((pm_interpolated_match_last_line_node_t *)node)->opening_loc, buffer);
|
|
1017
|
+
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_match_last_line_node_t *)node)->parts.size);
|
|
1018
|
+
pm_buffer_append_u32(buffer, parts_size);
|
|
1019
1019
|
for (uint32_t index = 0; index < parts_size; index++) {
|
|
1020
|
-
|
|
1020
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_match_last_line_node_t *)node)->parts.nodes[index], buffer);
|
|
1021
1021
|
}
|
|
1022
|
-
|
|
1023
|
-
|
|
1022
|
+
pm_serialize_location(parser, &((pm_interpolated_match_last_line_node_t *)node)->closing_loc, buffer);
|
|
1023
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1024
1024
|
break;
|
|
1025
1025
|
}
|
|
1026
|
-
case
|
|
1027
|
-
|
|
1028
|
-
uint32_t parts_size =
|
|
1029
|
-
|
|
1026
|
+
case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
|
|
1027
|
+
pm_serialize_location(parser, &((pm_interpolated_regular_expression_node_t *)node)->opening_loc, buffer);
|
|
1028
|
+
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_regular_expression_node_t *)node)->parts.size);
|
|
1029
|
+
pm_buffer_append_u32(buffer, parts_size);
|
|
1030
1030
|
for (uint32_t index = 0; index < parts_size; index++) {
|
|
1031
|
-
|
|
1031
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_regular_expression_node_t *)node)->parts.nodes[index], buffer);
|
|
1032
1032
|
}
|
|
1033
|
-
|
|
1034
|
-
|
|
1033
|
+
pm_serialize_location(parser, &((pm_interpolated_regular_expression_node_t *)node)->closing_loc, buffer);
|
|
1034
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1035
1035
|
break;
|
|
1036
1036
|
}
|
|
1037
|
-
case
|
|
1038
|
-
if (((
|
|
1039
|
-
|
|
1037
|
+
case PM_INTERPOLATED_STRING_NODE: {
|
|
1038
|
+
if (((pm_interpolated_string_node_t *)node)->opening_loc.start == NULL) {
|
|
1039
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1040
1040
|
} else {
|
|
1041
|
-
|
|
1042
|
-
|
|
1041
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1042
|
+
pm_serialize_location(parser, &((pm_interpolated_string_node_t *)node)->opening_loc, buffer);
|
|
1043
1043
|
}
|
|
1044
|
-
uint32_t parts_size =
|
|
1045
|
-
|
|
1044
|
+
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_string_node_t *)node)->parts.size);
|
|
1045
|
+
pm_buffer_append_u32(buffer, parts_size);
|
|
1046
1046
|
for (uint32_t index = 0; index < parts_size; index++) {
|
|
1047
|
-
|
|
1047
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_string_node_t *)node)->parts.nodes[index], buffer);
|
|
1048
1048
|
}
|
|
1049
|
-
if (((
|
|
1050
|
-
|
|
1049
|
+
if (((pm_interpolated_string_node_t *)node)->closing_loc.start == NULL) {
|
|
1050
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1051
1051
|
} else {
|
|
1052
|
-
|
|
1053
|
-
|
|
1052
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1053
|
+
pm_serialize_location(parser, &((pm_interpolated_string_node_t *)node)->closing_loc, buffer);
|
|
1054
1054
|
}
|
|
1055
1055
|
break;
|
|
1056
1056
|
}
|
|
1057
|
-
case
|
|
1058
|
-
if (((
|
|
1059
|
-
|
|
1057
|
+
case PM_INTERPOLATED_SYMBOL_NODE: {
|
|
1058
|
+
if (((pm_interpolated_symbol_node_t *)node)->opening_loc.start == NULL) {
|
|
1059
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1060
1060
|
} else {
|
|
1061
|
-
|
|
1062
|
-
|
|
1061
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1062
|
+
pm_serialize_location(parser, &((pm_interpolated_symbol_node_t *)node)->opening_loc, buffer);
|
|
1063
1063
|
}
|
|
1064
|
-
uint32_t parts_size =
|
|
1065
|
-
|
|
1064
|
+
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_symbol_node_t *)node)->parts.size);
|
|
1065
|
+
pm_buffer_append_u32(buffer, parts_size);
|
|
1066
1066
|
for (uint32_t index = 0; index < parts_size; index++) {
|
|
1067
|
-
|
|
1067
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_symbol_node_t *)node)->parts.nodes[index], buffer);
|
|
1068
1068
|
}
|
|
1069
|
-
if (((
|
|
1070
|
-
|
|
1069
|
+
if (((pm_interpolated_symbol_node_t *)node)->closing_loc.start == NULL) {
|
|
1070
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1071
1071
|
} else {
|
|
1072
|
-
|
|
1073
|
-
|
|
1072
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1073
|
+
pm_serialize_location(parser, &((pm_interpolated_symbol_node_t *)node)->closing_loc, buffer);
|
|
1074
1074
|
}
|
|
1075
1075
|
break;
|
|
1076
1076
|
}
|
|
1077
|
-
case
|
|
1078
|
-
|
|
1079
|
-
uint32_t parts_size =
|
|
1080
|
-
|
|
1077
|
+
case PM_INTERPOLATED_X_STRING_NODE: {
|
|
1078
|
+
pm_serialize_location(parser, &((pm_interpolated_x_string_node_t *)node)->opening_loc, buffer);
|
|
1079
|
+
uint32_t parts_size = pm_sizet_to_u32(((pm_interpolated_x_string_node_t *)node)->parts.size);
|
|
1080
|
+
pm_buffer_append_u32(buffer, parts_size);
|
|
1081
1081
|
for (uint32_t index = 0; index < parts_size; index++) {
|
|
1082
|
-
|
|
1082
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_interpolated_x_string_node_t *)node)->parts.nodes[index], buffer);
|
|
1083
1083
|
}
|
|
1084
|
-
|
|
1084
|
+
pm_serialize_location(parser, &((pm_interpolated_x_string_node_t *)node)->closing_loc, buffer);
|
|
1085
1085
|
break;
|
|
1086
1086
|
}
|
|
1087
|
-
case
|
|
1088
|
-
uint32_t elements_size =
|
|
1089
|
-
|
|
1087
|
+
case PM_KEYWORD_HASH_NODE: {
|
|
1088
|
+
uint32_t elements_size = pm_sizet_to_u32(((pm_keyword_hash_node_t *)node)->elements.size);
|
|
1089
|
+
pm_buffer_append_u32(buffer, elements_size);
|
|
1090
1090
|
for (uint32_t index = 0; index < elements_size; index++) {
|
|
1091
|
-
|
|
1091
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_keyword_hash_node_t *)node)->elements.nodes[index], buffer);
|
|
1092
1092
|
}
|
|
1093
1093
|
break;
|
|
1094
1094
|
}
|
|
1095
|
-
case
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
if (((
|
|
1099
|
-
|
|
1095
|
+
case PM_KEYWORD_PARAMETER_NODE: {
|
|
1096
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_keyword_parameter_node_t *)node)->name));
|
|
1097
|
+
pm_serialize_location(parser, &((pm_keyword_parameter_node_t *)node)->name_loc, buffer);
|
|
1098
|
+
if (((pm_keyword_parameter_node_t *)node)->value == NULL) {
|
|
1099
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1100
1100
|
} else {
|
|
1101
|
-
|
|
1101
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_keyword_parameter_node_t *)node)->value, buffer);
|
|
1102
1102
|
}
|
|
1103
1103
|
break;
|
|
1104
1104
|
}
|
|
1105
|
-
case
|
|
1106
|
-
|
|
1107
|
-
if (((
|
|
1108
|
-
|
|
1105
|
+
case PM_KEYWORD_REST_PARAMETER_NODE: {
|
|
1106
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_keyword_rest_parameter_node_t *)node)->name));
|
|
1107
|
+
if (((pm_keyword_rest_parameter_node_t *)node)->name_loc.start == NULL) {
|
|
1108
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1109
1109
|
} else {
|
|
1110
|
-
|
|
1111
|
-
|
|
1110
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1111
|
+
pm_serialize_location(parser, &((pm_keyword_rest_parameter_node_t *)node)->name_loc, buffer);
|
|
1112
1112
|
}
|
|
1113
|
-
|
|
1113
|
+
pm_serialize_location(parser, &((pm_keyword_rest_parameter_node_t *)node)->operator_loc, buffer);
|
|
1114
1114
|
break;
|
|
1115
1115
|
}
|
|
1116
|
-
case
|
|
1117
|
-
uint32_t locals_size =
|
|
1118
|
-
|
|
1116
|
+
case PM_LAMBDA_NODE: {
|
|
1117
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_lambda_node_t *)node)->locals.size);
|
|
1118
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
1119
1119
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
1120
|
-
|
|
1120
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_lambda_node_t *)node)->locals.ids[index]));
|
|
1121
1121
|
}
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
if (((
|
|
1126
|
-
|
|
1122
|
+
pm_serialize_location(parser, &((pm_lambda_node_t *)node)->operator_loc, buffer);
|
|
1123
|
+
pm_serialize_location(parser, &((pm_lambda_node_t *)node)->opening_loc, buffer);
|
|
1124
|
+
pm_serialize_location(parser, &((pm_lambda_node_t *)node)->closing_loc, buffer);
|
|
1125
|
+
if (((pm_lambda_node_t *)node)->parameters == NULL) {
|
|
1126
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1127
1127
|
} else {
|
|
1128
|
-
|
|
1128
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_lambda_node_t *)node)->parameters, buffer);
|
|
1129
1129
|
}
|
|
1130
|
-
if (((
|
|
1131
|
-
|
|
1130
|
+
if (((pm_lambda_node_t *)node)->body == NULL) {
|
|
1131
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1132
1132
|
} else {
|
|
1133
|
-
|
|
1133
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_lambda_node_t *)node)->body, buffer);
|
|
1134
1134
|
}
|
|
1135
1135
|
break;
|
|
1136
1136
|
}
|
|
1137
|
-
case
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1137
|
+
case PM_LOCAL_VARIABLE_AND_WRITE_NODE: {
|
|
1138
|
+
pm_serialize_location(parser, &((pm_local_variable_and_write_node_t *)node)->name_loc, buffer);
|
|
1139
|
+
pm_serialize_location(parser, &((pm_local_variable_and_write_node_t *)node)->operator_loc, buffer);
|
|
1140
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_and_write_node_t *)node)->value, buffer);
|
|
1141
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_local_variable_and_write_node_t *)node)->name));
|
|
1142
|
+
pm_buffer_append_u32(buffer, ((pm_local_variable_and_write_node_t *)node)->depth);
|
|
1143
1143
|
break;
|
|
1144
1144
|
}
|
|
1145
|
-
case
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1145
|
+
case PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
|
|
1146
|
+
pm_serialize_location(parser, &((pm_local_variable_operator_write_node_t *)node)->name_loc, buffer);
|
|
1147
|
+
pm_serialize_location(parser, &((pm_local_variable_operator_write_node_t *)node)->operator_loc, buffer);
|
|
1148
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_operator_write_node_t *)node)->value, buffer);
|
|
1149
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_local_variable_operator_write_node_t *)node)->name));
|
|
1150
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_local_variable_operator_write_node_t *)node)->operator));
|
|
1151
|
+
pm_buffer_append_u32(buffer, ((pm_local_variable_operator_write_node_t *)node)->depth);
|
|
1152
1152
|
break;
|
|
1153
1153
|
}
|
|
1154
|
-
case
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1154
|
+
case PM_LOCAL_VARIABLE_OR_WRITE_NODE: {
|
|
1155
|
+
pm_serialize_location(parser, &((pm_local_variable_or_write_node_t *)node)->name_loc, buffer);
|
|
1156
|
+
pm_serialize_location(parser, &((pm_local_variable_or_write_node_t *)node)->operator_loc, buffer);
|
|
1157
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_or_write_node_t *)node)->value, buffer);
|
|
1158
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_local_variable_or_write_node_t *)node)->name));
|
|
1159
|
+
pm_buffer_append_u32(buffer, ((pm_local_variable_or_write_node_t *)node)->depth);
|
|
1160
1160
|
break;
|
|
1161
1161
|
}
|
|
1162
|
-
case
|
|
1163
|
-
|
|
1164
|
-
|
|
1162
|
+
case PM_LOCAL_VARIABLE_READ_NODE: {
|
|
1163
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_local_variable_read_node_t *)node)->name));
|
|
1164
|
+
pm_buffer_append_u32(buffer, ((pm_local_variable_read_node_t *)node)->depth);
|
|
1165
1165
|
break;
|
|
1166
1166
|
}
|
|
1167
|
-
case
|
|
1168
|
-
|
|
1169
|
-
|
|
1167
|
+
case PM_LOCAL_VARIABLE_TARGET_NODE: {
|
|
1168
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_local_variable_target_node_t *)node)->name));
|
|
1169
|
+
pm_buffer_append_u32(buffer, ((pm_local_variable_target_node_t *)node)->depth);
|
|
1170
1170
|
break;
|
|
1171
1171
|
}
|
|
1172
|
-
case
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1172
|
+
case PM_LOCAL_VARIABLE_WRITE_NODE: {
|
|
1173
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_local_variable_write_node_t *)node)->name));
|
|
1174
|
+
pm_buffer_append_u32(buffer, ((pm_local_variable_write_node_t *)node)->depth);
|
|
1175
|
+
pm_serialize_location(parser, &((pm_local_variable_write_node_t *)node)->name_loc, buffer);
|
|
1176
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_local_variable_write_node_t *)node)->value, buffer);
|
|
1177
|
+
pm_serialize_location(parser, &((pm_local_variable_write_node_t *)node)->operator_loc, buffer);
|
|
1178
1178
|
break;
|
|
1179
1179
|
}
|
|
1180
|
-
case
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1180
|
+
case PM_MATCH_LAST_LINE_NODE: {
|
|
1181
|
+
pm_serialize_location(parser, &((pm_match_last_line_node_t *)node)->opening_loc, buffer);
|
|
1182
|
+
pm_serialize_location(parser, &((pm_match_last_line_node_t *)node)->content_loc, buffer);
|
|
1183
|
+
pm_serialize_location(parser, &((pm_match_last_line_node_t *)node)->closing_loc, buffer);
|
|
1184
|
+
pm_serialize_string(parser, &((pm_match_last_line_node_t *)node)->unescaped, buffer);
|
|
1185
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1186
1186
|
break;
|
|
1187
1187
|
}
|
|
1188
|
-
case
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1188
|
+
case PM_MATCH_PREDICATE_NODE: {
|
|
1189
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_match_predicate_node_t *)node)->value, buffer);
|
|
1190
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_match_predicate_node_t *)node)->pattern, buffer);
|
|
1191
|
+
pm_serialize_location(parser, &((pm_match_predicate_node_t *)node)->operator_loc, buffer);
|
|
1192
1192
|
break;
|
|
1193
1193
|
}
|
|
1194
|
-
case
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1194
|
+
case PM_MATCH_REQUIRED_NODE: {
|
|
1195
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_match_required_node_t *)node)->value, buffer);
|
|
1196
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_match_required_node_t *)node)->pattern, buffer);
|
|
1197
|
+
pm_serialize_location(parser, &((pm_match_required_node_t *)node)->operator_loc, buffer);
|
|
1198
1198
|
break;
|
|
1199
1199
|
}
|
|
1200
|
-
case
|
|
1201
|
-
|
|
1202
|
-
uint32_t locals_size =
|
|
1203
|
-
|
|
1200
|
+
case PM_MATCH_WRITE_NODE: {
|
|
1201
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_match_write_node_t *)node)->call, buffer);
|
|
1202
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_match_write_node_t *)node)->locals.size);
|
|
1203
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
1204
1204
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
1205
|
-
|
|
1205
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_match_write_node_t *)node)->locals.ids[index]));
|
|
1206
1206
|
}
|
|
1207
1207
|
break;
|
|
1208
1208
|
}
|
|
1209
|
-
case
|
|
1209
|
+
case PM_MISSING_NODE: {
|
|
1210
1210
|
break;
|
|
1211
1211
|
}
|
|
1212
|
-
case
|
|
1213
|
-
uint32_t locals_size =
|
|
1214
|
-
|
|
1212
|
+
case PM_MODULE_NODE: {
|
|
1213
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_module_node_t *)node)->locals.size);
|
|
1214
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
1215
1215
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
1216
|
-
|
|
1216
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_module_node_t *)node)->locals.ids[index]));
|
|
1217
1217
|
}
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
if (((
|
|
1221
|
-
|
|
1218
|
+
pm_serialize_location(parser, &((pm_module_node_t *)node)->module_keyword_loc, buffer);
|
|
1219
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_module_node_t *)node)->constant_path, buffer);
|
|
1220
|
+
if (((pm_module_node_t *)node)->body == NULL) {
|
|
1221
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1222
1222
|
} else {
|
|
1223
|
-
|
|
1223
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_module_node_t *)node)->body, buffer);
|
|
1224
1224
|
}
|
|
1225
|
-
|
|
1226
|
-
|
|
1225
|
+
pm_serialize_location(parser, &((pm_module_node_t *)node)->end_keyword_loc, buffer);
|
|
1226
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_module_node_t *)node)->name));
|
|
1227
1227
|
break;
|
|
1228
1228
|
}
|
|
1229
|
-
case
|
|
1230
|
-
uint32_t targets_size =
|
|
1231
|
-
|
|
1229
|
+
case PM_MULTI_TARGET_NODE: {
|
|
1230
|
+
uint32_t targets_size = pm_sizet_to_u32(((pm_multi_target_node_t *)node)->targets.size);
|
|
1231
|
+
pm_buffer_append_u32(buffer, targets_size);
|
|
1232
1232
|
for (uint32_t index = 0; index < targets_size; index++) {
|
|
1233
|
-
|
|
1233
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_multi_target_node_t *)node)->targets.nodes[index], buffer);
|
|
1234
1234
|
}
|
|
1235
|
-
if (((
|
|
1236
|
-
|
|
1235
|
+
if (((pm_multi_target_node_t *)node)->lparen_loc.start == NULL) {
|
|
1236
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1237
1237
|
} else {
|
|
1238
|
-
|
|
1239
|
-
|
|
1238
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1239
|
+
pm_serialize_location(parser, &((pm_multi_target_node_t *)node)->lparen_loc, buffer);
|
|
1240
1240
|
}
|
|
1241
|
-
if (((
|
|
1242
|
-
|
|
1241
|
+
if (((pm_multi_target_node_t *)node)->rparen_loc.start == NULL) {
|
|
1242
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1243
1243
|
} else {
|
|
1244
|
-
|
|
1245
|
-
|
|
1244
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1245
|
+
pm_serialize_location(parser, &((pm_multi_target_node_t *)node)->rparen_loc, buffer);
|
|
1246
1246
|
}
|
|
1247
1247
|
break;
|
|
1248
1248
|
}
|
|
1249
|
-
case
|
|
1250
|
-
uint32_t targets_size =
|
|
1251
|
-
|
|
1249
|
+
case PM_MULTI_WRITE_NODE: {
|
|
1250
|
+
uint32_t targets_size = pm_sizet_to_u32(((pm_multi_write_node_t *)node)->targets.size);
|
|
1251
|
+
pm_buffer_append_u32(buffer, targets_size);
|
|
1252
1252
|
for (uint32_t index = 0; index < targets_size; index++) {
|
|
1253
|
-
|
|
1253
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_multi_write_node_t *)node)->targets.nodes[index], buffer);
|
|
1254
1254
|
}
|
|
1255
|
-
if (((
|
|
1256
|
-
|
|
1255
|
+
if (((pm_multi_write_node_t *)node)->lparen_loc.start == NULL) {
|
|
1256
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1257
1257
|
} else {
|
|
1258
|
-
|
|
1259
|
-
|
|
1258
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1259
|
+
pm_serialize_location(parser, &((pm_multi_write_node_t *)node)->lparen_loc, buffer);
|
|
1260
1260
|
}
|
|
1261
|
-
if (((
|
|
1262
|
-
|
|
1261
|
+
if (((pm_multi_write_node_t *)node)->rparen_loc.start == NULL) {
|
|
1262
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1263
1263
|
} else {
|
|
1264
|
-
|
|
1265
|
-
|
|
1264
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1265
|
+
pm_serialize_location(parser, &((pm_multi_write_node_t *)node)->rparen_loc, buffer);
|
|
1266
1266
|
}
|
|
1267
|
-
|
|
1268
|
-
|
|
1267
|
+
pm_serialize_location(parser, &((pm_multi_write_node_t *)node)->operator_loc, buffer);
|
|
1268
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_multi_write_node_t *)node)->value, buffer);
|
|
1269
1269
|
break;
|
|
1270
1270
|
}
|
|
1271
|
-
case
|
|
1272
|
-
if (((
|
|
1273
|
-
|
|
1271
|
+
case PM_NEXT_NODE: {
|
|
1272
|
+
if (((pm_next_node_t *)node)->arguments == NULL) {
|
|
1273
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1274
1274
|
} else {
|
|
1275
|
-
|
|
1275
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_next_node_t *)node)->arguments, buffer);
|
|
1276
1276
|
}
|
|
1277
|
-
|
|
1277
|
+
pm_serialize_location(parser, &((pm_next_node_t *)node)->keyword_loc, buffer);
|
|
1278
1278
|
break;
|
|
1279
1279
|
}
|
|
1280
|
-
case
|
|
1280
|
+
case PM_NIL_NODE: {
|
|
1281
1281
|
break;
|
|
1282
1282
|
}
|
|
1283
|
-
case
|
|
1284
|
-
|
|
1285
|
-
|
|
1283
|
+
case PM_NO_KEYWORDS_PARAMETER_NODE: {
|
|
1284
|
+
pm_serialize_location(parser, &((pm_no_keywords_parameter_node_t *)node)->operator_loc, buffer);
|
|
1285
|
+
pm_serialize_location(parser, &((pm_no_keywords_parameter_node_t *)node)->keyword_loc, buffer);
|
|
1286
1286
|
break;
|
|
1287
1287
|
}
|
|
1288
|
-
case
|
|
1289
|
-
|
|
1288
|
+
case PM_NUMBERED_REFERENCE_READ_NODE: {
|
|
1289
|
+
pm_buffer_append_u32(buffer, ((pm_numbered_reference_read_node_t *)node)->number);
|
|
1290
1290
|
break;
|
|
1291
1291
|
}
|
|
1292
|
-
case
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1292
|
+
case PM_OPTIONAL_PARAMETER_NODE: {
|
|
1293
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_optional_parameter_node_t *)node)->name));
|
|
1294
|
+
pm_serialize_location(parser, &((pm_optional_parameter_node_t *)node)->name_loc, buffer);
|
|
1295
|
+
pm_serialize_location(parser, &((pm_optional_parameter_node_t *)node)->operator_loc, buffer);
|
|
1296
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_optional_parameter_node_t *)node)->value, buffer);
|
|
1297
1297
|
break;
|
|
1298
1298
|
}
|
|
1299
|
-
case
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1299
|
+
case PM_OR_NODE: {
|
|
1300
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_or_node_t *)node)->left, buffer);
|
|
1301
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_or_node_t *)node)->right, buffer);
|
|
1302
|
+
pm_serialize_location(parser, &((pm_or_node_t *)node)->operator_loc, buffer);
|
|
1303
1303
|
break;
|
|
1304
1304
|
}
|
|
1305
|
-
case
|
|
1306
|
-
uint32_t requireds_size =
|
|
1307
|
-
|
|
1305
|
+
case PM_PARAMETERS_NODE: {
|
|
1306
|
+
uint32_t requireds_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->requireds.size);
|
|
1307
|
+
pm_buffer_append_u32(buffer, requireds_size);
|
|
1308
1308
|
for (uint32_t index = 0; index < requireds_size; index++) {
|
|
1309
|
-
|
|
1309
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->requireds.nodes[index], buffer);
|
|
1310
1310
|
}
|
|
1311
|
-
uint32_t optionals_size =
|
|
1312
|
-
|
|
1311
|
+
uint32_t optionals_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->optionals.size);
|
|
1312
|
+
pm_buffer_append_u32(buffer, optionals_size);
|
|
1313
1313
|
for (uint32_t index = 0; index < optionals_size; index++) {
|
|
1314
|
-
|
|
1314
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->optionals.nodes[index], buffer);
|
|
1315
1315
|
}
|
|
1316
|
-
if (((
|
|
1317
|
-
|
|
1316
|
+
if (((pm_parameters_node_t *)node)->rest == NULL) {
|
|
1317
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1318
1318
|
} else {
|
|
1319
|
-
|
|
1319
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_parameters_node_t *)node)->rest, buffer);
|
|
1320
1320
|
}
|
|
1321
|
-
uint32_t posts_size =
|
|
1322
|
-
|
|
1321
|
+
uint32_t posts_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->posts.size);
|
|
1322
|
+
pm_buffer_append_u32(buffer, posts_size);
|
|
1323
1323
|
for (uint32_t index = 0; index < posts_size; index++) {
|
|
1324
|
-
|
|
1324
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->posts.nodes[index], buffer);
|
|
1325
1325
|
}
|
|
1326
|
-
uint32_t keywords_size =
|
|
1327
|
-
|
|
1326
|
+
uint32_t keywords_size = pm_sizet_to_u32(((pm_parameters_node_t *)node)->keywords.size);
|
|
1327
|
+
pm_buffer_append_u32(buffer, keywords_size);
|
|
1328
1328
|
for (uint32_t index = 0; index < keywords_size; index++) {
|
|
1329
|
-
|
|
1329
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_parameters_node_t *)node)->keywords.nodes[index], buffer);
|
|
1330
1330
|
}
|
|
1331
|
-
if (((
|
|
1332
|
-
|
|
1331
|
+
if (((pm_parameters_node_t *)node)->keyword_rest == NULL) {
|
|
1332
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1333
1333
|
} else {
|
|
1334
|
-
|
|
1334
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_parameters_node_t *)node)->keyword_rest, buffer);
|
|
1335
1335
|
}
|
|
1336
|
-
if (((
|
|
1337
|
-
|
|
1336
|
+
if (((pm_parameters_node_t *)node)->block == NULL) {
|
|
1337
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1338
1338
|
} else {
|
|
1339
|
-
|
|
1339
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_parameters_node_t *)node)->block, buffer);
|
|
1340
1340
|
}
|
|
1341
1341
|
break;
|
|
1342
1342
|
}
|
|
1343
|
-
case
|
|
1344
|
-
if (((
|
|
1345
|
-
|
|
1343
|
+
case PM_PARENTHESES_NODE: {
|
|
1344
|
+
if (((pm_parentheses_node_t *)node)->body == NULL) {
|
|
1345
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1346
1346
|
} else {
|
|
1347
|
-
|
|
1347
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_parentheses_node_t *)node)->body, buffer);
|
|
1348
1348
|
}
|
|
1349
|
-
|
|
1350
|
-
|
|
1349
|
+
pm_serialize_location(parser, &((pm_parentheses_node_t *)node)->opening_loc, buffer);
|
|
1350
|
+
pm_serialize_location(parser, &((pm_parentheses_node_t *)node)->closing_loc, buffer);
|
|
1351
1351
|
break;
|
|
1352
1352
|
}
|
|
1353
|
-
case
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1353
|
+
case PM_PINNED_EXPRESSION_NODE: {
|
|
1354
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_pinned_expression_node_t *)node)->expression, buffer);
|
|
1355
|
+
pm_serialize_location(parser, &((pm_pinned_expression_node_t *)node)->operator_loc, buffer);
|
|
1356
|
+
pm_serialize_location(parser, &((pm_pinned_expression_node_t *)node)->lparen_loc, buffer);
|
|
1357
|
+
pm_serialize_location(parser, &((pm_pinned_expression_node_t *)node)->rparen_loc, buffer);
|
|
1358
1358
|
break;
|
|
1359
1359
|
}
|
|
1360
|
-
case
|
|
1361
|
-
|
|
1362
|
-
|
|
1360
|
+
case PM_PINNED_VARIABLE_NODE: {
|
|
1361
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_pinned_variable_node_t *)node)->variable, buffer);
|
|
1362
|
+
pm_serialize_location(parser, &((pm_pinned_variable_node_t *)node)->operator_loc, buffer);
|
|
1363
1363
|
break;
|
|
1364
1364
|
}
|
|
1365
|
-
case
|
|
1366
|
-
if (((
|
|
1367
|
-
|
|
1365
|
+
case PM_POST_EXECUTION_NODE: {
|
|
1366
|
+
if (((pm_post_execution_node_t *)node)->statements == NULL) {
|
|
1367
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1368
1368
|
} else {
|
|
1369
|
-
|
|
1369
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_post_execution_node_t *)node)->statements, buffer);
|
|
1370
1370
|
}
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1371
|
+
pm_serialize_location(parser, &((pm_post_execution_node_t *)node)->keyword_loc, buffer);
|
|
1372
|
+
pm_serialize_location(parser, &((pm_post_execution_node_t *)node)->opening_loc, buffer);
|
|
1373
|
+
pm_serialize_location(parser, &((pm_post_execution_node_t *)node)->closing_loc, buffer);
|
|
1374
1374
|
break;
|
|
1375
1375
|
}
|
|
1376
|
-
case
|
|
1377
|
-
if (((
|
|
1378
|
-
|
|
1376
|
+
case PM_PRE_EXECUTION_NODE: {
|
|
1377
|
+
if (((pm_pre_execution_node_t *)node)->statements == NULL) {
|
|
1378
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1379
1379
|
} else {
|
|
1380
|
-
|
|
1380
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_pre_execution_node_t *)node)->statements, buffer);
|
|
1381
1381
|
}
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1382
|
+
pm_serialize_location(parser, &((pm_pre_execution_node_t *)node)->keyword_loc, buffer);
|
|
1383
|
+
pm_serialize_location(parser, &((pm_pre_execution_node_t *)node)->opening_loc, buffer);
|
|
1384
|
+
pm_serialize_location(parser, &((pm_pre_execution_node_t *)node)->closing_loc, buffer);
|
|
1385
1385
|
break;
|
|
1386
1386
|
}
|
|
1387
|
-
case
|
|
1388
|
-
uint32_t locals_size =
|
|
1389
|
-
|
|
1387
|
+
case PM_PROGRAM_NODE: {
|
|
1388
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_program_node_t *)node)->locals.size);
|
|
1389
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
1390
1390
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
1391
|
-
|
|
1391
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_program_node_t *)node)->locals.ids[index]));
|
|
1392
1392
|
}
|
|
1393
|
-
|
|
1393
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_program_node_t *)node)->statements, buffer);
|
|
1394
1394
|
break;
|
|
1395
1395
|
}
|
|
1396
|
-
case
|
|
1397
|
-
if (((
|
|
1398
|
-
|
|
1396
|
+
case PM_RANGE_NODE: {
|
|
1397
|
+
if (((pm_range_node_t *)node)->left == NULL) {
|
|
1398
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1399
1399
|
} else {
|
|
1400
|
-
|
|
1400
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_range_node_t *)node)->left, buffer);
|
|
1401
1401
|
}
|
|
1402
|
-
if (((
|
|
1403
|
-
|
|
1402
|
+
if (((pm_range_node_t *)node)->right == NULL) {
|
|
1403
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1404
1404
|
} else {
|
|
1405
|
-
|
|
1405
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_range_node_t *)node)->right, buffer);
|
|
1406
1406
|
}
|
|
1407
|
-
|
|
1408
|
-
|
|
1407
|
+
pm_serialize_location(parser, &((pm_range_node_t *)node)->operator_loc, buffer);
|
|
1408
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1409
1409
|
break;
|
|
1410
1410
|
}
|
|
1411
|
-
case
|
|
1412
|
-
|
|
1411
|
+
case PM_RATIONAL_NODE: {
|
|
1412
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_rational_node_t *)node)->numeric, buffer);
|
|
1413
1413
|
break;
|
|
1414
1414
|
}
|
|
1415
|
-
case
|
|
1415
|
+
case PM_REDO_NODE: {
|
|
1416
1416
|
break;
|
|
1417
1417
|
}
|
|
1418
|
-
case
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1418
|
+
case PM_REGULAR_EXPRESSION_NODE: {
|
|
1419
|
+
pm_serialize_location(parser, &((pm_regular_expression_node_t *)node)->opening_loc, buffer);
|
|
1420
|
+
pm_serialize_location(parser, &((pm_regular_expression_node_t *)node)->content_loc, buffer);
|
|
1421
|
+
pm_serialize_location(parser, &((pm_regular_expression_node_t *)node)->closing_loc, buffer);
|
|
1422
|
+
pm_serialize_string(parser, &((pm_regular_expression_node_t *)node)->unescaped, buffer);
|
|
1423
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1424
1424
|
break;
|
|
1425
1425
|
}
|
|
1426
|
-
case
|
|
1427
|
-
uint32_t parameters_size =
|
|
1428
|
-
|
|
1426
|
+
case PM_REQUIRED_DESTRUCTURED_PARAMETER_NODE: {
|
|
1427
|
+
uint32_t parameters_size = pm_sizet_to_u32(((pm_required_destructured_parameter_node_t *)node)->parameters.size);
|
|
1428
|
+
pm_buffer_append_u32(buffer, parameters_size);
|
|
1429
1429
|
for (uint32_t index = 0; index < parameters_size; index++) {
|
|
1430
|
-
|
|
1430
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_required_destructured_parameter_node_t *)node)->parameters.nodes[index], buffer);
|
|
1431
1431
|
}
|
|
1432
|
-
|
|
1433
|
-
|
|
1432
|
+
pm_serialize_location(parser, &((pm_required_destructured_parameter_node_t *)node)->opening_loc, buffer);
|
|
1433
|
+
pm_serialize_location(parser, &((pm_required_destructured_parameter_node_t *)node)->closing_loc, buffer);
|
|
1434
1434
|
break;
|
|
1435
1435
|
}
|
|
1436
|
-
case
|
|
1437
|
-
|
|
1436
|
+
case PM_REQUIRED_PARAMETER_NODE: {
|
|
1437
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_required_parameter_node_t *)node)->name));
|
|
1438
1438
|
break;
|
|
1439
1439
|
}
|
|
1440
|
-
case
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1440
|
+
case PM_RESCUE_MODIFIER_NODE: {
|
|
1441
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_rescue_modifier_node_t *)node)->expression, buffer);
|
|
1442
|
+
pm_serialize_location(parser, &((pm_rescue_modifier_node_t *)node)->keyword_loc, buffer);
|
|
1443
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_rescue_modifier_node_t *)node)->rescue_expression, buffer);
|
|
1444
1444
|
break;
|
|
1445
1445
|
}
|
|
1446
|
-
case
|
|
1447
|
-
|
|
1448
|
-
uint32_t exceptions_size =
|
|
1449
|
-
|
|
1446
|
+
case PM_RESCUE_NODE: {
|
|
1447
|
+
pm_serialize_location(parser, &((pm_rescue_node_t *)node)->keyword_loc, buffer);
|
|
1448
|
+
uint32_t exceptions_size = pm_sizet_to_u32(((pm_rescue_node_t *)node)->exceptions.size);
|
|
1449
|
+
pm_buffer_append_u32(buffer, exceptions_size);
|
|
1450
1450
|
for (uint32_t index = 0; index < exceptions_size; index++) {
|
|
1451
|
-
|
|
1451
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_rescue_node_t *)node)->exceptions.nodes[index], buffer);
|
|
1452
1452
|
}
|
|
1453
|
-
if (((
|
|
1454
|
-
|
|
1453
|
+
if (((pm_rescue_node_t *)node)->operator_loc.start == NULL) {
|
|
1454
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1455
1455
|
} else {
|
|
1456
|
-
|
|
1457
|
-
|
|
1456
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1457
|
+
pm_serialize_location(parser, &((pm_rescue_node_t *)node)->operator_loc, buffer);
|
|
1458
1458
|
}
|
|
1459
|
-
if (((
|
|
1460
|
-
|
|
1459
|
+
if (((pm_rescue_node_t *)node)->reference == NULL) {
|
|
1460
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1461
1461
|
} else {
|
|
1462
|
-
|
|
1462
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_rescue_node_t *)node)->reference, buffer);
|
|
1463
1463
|
}
|
|
1464
|
-
if (((
|
|
1465
|
-
|
|
1464
|
+
if (((pm_rescue_node_t *)node)->statements == NULL) {
|
|
1465
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1466
1466
|
} else {
|
|
1467
|
-
|
|
1467
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_rescue_node_t *)node)->statements, buffer);
|
|
1468
1468
|
}
|
|
1469
|
-
if (((
|
|
1470
|
-
|
|
1469
|
+
if (((pm_rescue_node_t *)node)->consequent == NULL) {
|
|
1470
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1471
1471
|
} else {
|
|
1472
|
-
|
|
1472
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_rescue_node_t *)node)->consequent, buffer);
|
|
1473
1473
|
}
|
|
1474
1474
|
break;
|
|
1475
1475
|
}
|
|
1476
|
-
case
|
|
1477
|
-
|
|
1478
|
-
if (((
|
|
1479
|
-
|
|
1476
|
+
case PM_REST_PARAMETER_NODE: {
|
|
1477
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_rest_parameter_node_t *)node)->name));
|
|
1478
|
+
if (((pm_rest_parameter_node_t *)node)->name_loc.start == NULL) {
|
|
1479
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1480
1480
|
} else {
|
|
1481
|
-
|
|
1482
|
-
|
|
1481
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1482
|
+
pm_serialize_location(parser, &((pm_rest_parameter_node_t *)node)->name_loc, buffer);
|
|
1483
1483
|
}
|
|
1484
|
-
|
|
1484
|
+
pm_serialize_location(parser, &((pm_rest_parameter_node_t *)node)->operator_loc, buffer);
|
|
1485
1485
|
break;
|
|
1486
1486
|
}
|
|
1487
|
-
case
|
|
1487
|
+
case PM_RETRY_NODE: {
|
|
1488
1488
|
break;
|
|
1489
1489
|
}
|
|
1490
|
-
case
|
|
1491
|
-
|
|
1492
|
-
if (((
|
|
1493
|
-
|
|
1490
|
+
case PM_RETURN_NODE: {
|
|
1491
|
+
pm_serialize_location(parser, &((pm_return_node_t *)node)->keyword_loc, buffer);
|
|
1492
|
+
if (((pm_return_node_t *)node)->arguments == NULL) {
|
|
1493
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1494
1494
|
} else {
|
|
1495
|
-
|
|
1495
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_return_node_t *)node)->arguments, buffer);
|
|
1496
1496
|
}
|
|
1497
1497
|
break;
|
|
1498
1498
|
}
|
|
1499
|
-
case
|
|
1499
|
+
case PM_SELF_NODE: {
|
|
1500
1500
|
break;
|
|
1501
1501
|
}
|
|
1502
|
-
case
|
|
1503
|
-
uint32_t locals_size =
|
|
1504
|
-
|
|
1502
|
+
case PM_SINGLETON_CLASS_NODE: {
|
|
1503
|
+
uint32_t locals_size = pm_sizet_to_u32(((pm_singleton_class_node_t *)node)->locals.size);
|
|
1504
|
+
pm_buffer_append_u32(buffer, locals_size);
|
|
1505
1505
|
for (uint32_t index = 0; index < locals_size; index++) {
|
|
1506
|
-
|
|
1506
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(((pm_singleton_class_node_t *)node)->locals.ids[index]));
|
|
1507
1507
|
}
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
if (((
|
|
1512
|
-
|
|
1508
|
+
pm_serialize_location(parser, &((pm_singleton_class_node_t *)node)->class_keyword_loc, buffer);
|
|
1509
|
+
pm_serialize_location(parser, &((pm_singleton_class_node_t *)node)->operator_loc, buffer);
|
|
1510
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_singleton_class_node_t *)node)->expression, buffer);
|
|
1511
|
+
if (((pm_singleton_class_node_t *)node)->body == NULL) {
|
|
1512
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1513
1513
|
} else {
|
|
1514
|
-
|
|
1514
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_singleton_class_node_t *)node)->body, buffer);
|
|
1515
1515
|
}
|
|
1516
|
-
|
|
1516
|
+
pm_serialize_location(parser, &((pm_singleton_class_node_t *)node)->end_keyword_loc, buffer);
|
|
1517
1517
|
break;
|
|
1518
1518
|
}
|
|
1519
|
-
case
|
|
1519
|
+
case PM_SOURCE_ENCODING_NODE: {
|
|
1520
1520
|
break;
|
|
1521
1521
|
}
|
|
1522
|
-
case
|
|
1523
|
-
|
|
1522
|
+
case PM_SOURCE_FILE_NODE: {
|
|
1523
|
+
pm_serialize_string(parser, &((pm_source_file_node_t *)node)->filepath, buffer);
|
|
1524
1524
|
break;
|
|
1525
1525
|
}
|
|
1526
|
-
case
|
|
1526
|
+
case PM_SOURCE_LINE_NODE: {
|
|
1527
1527
|
break;
|
|
1528
1528
|
}
|
|
1529
|
-
case
|
|
1530
|
-
|
|
1531
|
-
if (((
|
|
1532
|
-
|
|
1529
|
+
case PM_SPLAT_NODE: {
|
|
1530
|
+
pm_serialize_location(parser, &((pm_splat_node_t *)node)->operator_loc, buffer);
|
|
1531
|
+
if (((pm_splat_node_t *)node)->expression == NULL) {
|
|
1532
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1533
1533
|
} else {
|
|
1534
|
-
|
|
1534
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_splat_node_t *)node)->expression, buffer);
|
|
1535
1535
|
}
|
|
1536
1536
|
break;
|
|
1537
1537
|
}
|
|
1538
|
-
case
|
|
1539
|
-
uint32_t body_size =
|
|
1540
|
-
|
|
1538
|
+
case PM_STATEMENTS_NODE: {
|
|
1539
|
+
uint32_t body_size = pm_sizet_to_u32(((pm_statements_node_t *)node)->body.size);
|
|
1540
|
+
pm_buffer_append_u32(buffer, body_size);
|
|
1541
1541
|
for (uint32_t index = 0; index < body_size; index++) {
|
|
1542
|
-
|
|
1542
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_statements_node_t *)node)->body.nodes[index], buffer);
|
|
1543
1543
|
}
|
|
1544
1544
|
break;
|
|
1545
1545
|
}
|
|
1546
|
-
case
|
|
1547
|
-
|
|
1548
|
-
|
|
1546
|
+
case PM_STRING_CONCAT_NODE: {
|
|
1547
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_string_concat_node_t *)node)->left, buffer);
|
|
1548
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_string_concat_node_t *)node)->right, buffer);
|
|
1549
1549
|
break;
|
|
1550
1550
|
}
|
|
1551
|
-
case
|
|
1552
|
-
|
|
1553
|
-
if (((
|
|
1554
|
-
|
|
1551
|
+
case PM_STRING_NODE: {
|
|
1552
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1553
|
+
if (((pm_string_node_t *)node)->opening_loc.start == NULL) {
|
|
1554
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1555
1555
|
} else {
|
|
1556
|
-
|
|
1557
|
-
|
|
1556
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1557
|
+
pm_serialize_location(parser, &((pm_string_node_t *)node)->opening_loc, buffer);
|
|
1558
1558
|
}
|
|
1559
|
-
|
|
1560
|
-
if (((
|
|
1561
|
-
|
|
1559
|
+
pm_serialize_location(parser, &((pm_string_node_t *)node)->content_loc, buffer);
|
|
1560
|
+
if (((pm_string_node_t *)node)->closing_loc.start == NULL) {
|
|
1561
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1562
1562
|
} else {
|
|
1563
|
-
|
|
1564
|
-
|
|
1563
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1564
|
+
pm_serialize_location(parser, &((pm_string_node_t *)node)->closing_loc, buffer);
|
|
1565
1565
|
}
|
|
1566
|
-
|
|
1566
|
+
pm_serialize_string(parser, &((pm_string_node_t *)node)->unescaped, buffer);
|
|
1567
1567
|
break;
|
|
1568
1568
|
}
|
|
1569
|
-
case
|
|
1570
|
-
|
|
1571
|
-
if (((
|
|
1572
|
-
|
|
1569
|
+
case PM_SUPER_NODE: {
|
|
1570
|
+
pm_serialize_location(parser, &((pm_super_node_t *)node)->keyword_loc, buffer);
|
|
1571
|
+
if (((pm_super_node_t *)node)->lparen_loc.start == NULL) {
|
|
1572
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1573
1573
|
} else {
|
|
1574
|
-
|
|
1575
|
-
|
|
1574
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1575
|
+
pm_serialize_location(parser, &((pm_super_node_t *)node)->lparen_loc, buffer);
|
|
1576
1576
|
}
|
|
1577
|
-
if (((
|
|
1578
|
-
|
|
1577
|
+
if (((pm_super_node_t *)node)->arguments == NULL) {
|
|
1578
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1579
1579
|
} else {
|
|
1580
|
-
|
|
1580
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_super_node_t *)node)->arguments, buffer);
|
|
1581
1581
|
}
|
|
1582
|
-
if (((
|
|
1583
|
-
|
|
1582
|
+
if (((pm_super_node_t *)node)->rparen_loc.start == NULL) {
|
|
1583
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1584
1584
|
} else {
|
|
1585
|
-
|
|
1586
|
-
|
|
1585
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1586
|
+
pm_serialize_location(parser, &((pm_super_node_t *)node)->rparen_loc, buffer);
|
|
1587
1587
|
}
|
|
1588
|
-
if (((
|
|
1589
|
-
|
|
1588
|
+
if (((pm_super_node_t *)node)->block == NULL) {
|
|
1589
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1590
1590
|
} else {
|
|
1591
|
-
|
|
1591
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_super_node_t *)node)->block, buffer);
|
|
1592
1592
|
}
|
|
1593
1593
|
break;
|
|
1594
1594
|
}
|
|
1595
|
-
case
|
|
1596
|
-
if (((
|
|
1597
|
-
|
|
1595
|
+
case PM_SYMBOL_NODE: {
|
|
1596
|
+
if (((pm_symbol_node_t *)node)->opening_loc.start == NULL) {
|
|
1597
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1598
1598
|
} else {
|
|
1599
|
-
|
|
1600
|
-
|
|
1599
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1600
|
+
pm_serialize_location(parser, &((pm_symbol_node_t *)node)->opening_loc, buffer);
|
|
1601
1601
|
}
|
|
1602
|
-
if (((
|
|
1603
|
-
|
|
1602
|
+
if (((pm_symbol_node_t *)node)->value_loc.start == NULL) {
|
|
1603
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1604
1604
|
} else {
|
|
1605
|
-
|
|
1606
|
-
|
|
1605
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1606
|
+
pm_serialize_location(parser, &((pm_symbol_node_t *)node)->value_loc, buffer);
|
|
1607
1607
|
}
|
|
1608
|
-
if (((
|
|
1609
|
-
|
|
1608
|
+
if (((pm_symbol_node_t *)node)->closing_loc.start == NULL) {
|
|
1609
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1610
1610
|
} else {
|
|
1611
|
-
|
|
1612
|
-
|
|
1611
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1612
|
+
pm_serialize_location(parser, &((pm_symbol_node_t *)node)->closing_loc, buffer);
|
|
1613
1613
|
}
|
|
1614
|
-
|
|
1614
|
+
pm_serialize_string(parser, &((pm_symbol_node_t *)node)->unescaped, buffer);
|
|
1615
1615
|
break;
|
|
1616
1616
|
}
|
|
1617
|
-
case
|
|
1617
|
+
case PM_TRUE_NODE: {
|
|
1618
1618
|
break;
|
|
1619
1619
|
}
|
|
1620
|
-
case
|
|
1621
|
-
uint32_t names_size =
|
|
1622
|
-
|
|
1620
|
+
case PM_UNDEF_NODE: {
|
|
1621
|
+
uint32_t names_size = pm_sizet_to_u32(((pm_undef_node_t *)node)->names.size);
|
|
1622
|
+
pm_buffer_append_u32(buffer, names_size);
|
|
1623
1623
|
for (uint32_t index = 0; index < names_size; index++) {
|
|
1624
|
-
|
|
1624
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_undef_node_t *)node)->names.nodes[index], buffer);
|
|
1625
1625
|
}
|
|
1626
|
-
|
|
1626
|
+
pm_serialize_location(parser, &((pm_undef_node_t *)node)->keyword_loc, buffer);
|
|
1627
1627
|
break;
|
|
1628
1628
|
}
|
|
1629
|
-
case
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
if (((
|
|
1633
|
-
|
|
1629
|
+
case PM_UNLESS_NODE: {
|
|
1630
|
+
pm_serialize_location(parser, &((pm_unless_node_t *)node)->keyword_loc, buffer);
|
|
1631
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_unless_node_t *)node)->predicate, buffer);
|
|
1632
|
+
if (((pm_unless_node_t *)node)->statements == NULL) {
|
|
1633
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1634
1634
|
} else {
|
|
1635
|
-
|
|
1635
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_unless_node_t *)node)->statements, buffer);
|
|
1636
1636
|
}
|
|
1637
|
-
if (((
|
|
1638
|
-
|
|
1637
|
+
if (((pm_unless_node_t *)node)->consequent == NULL) {
|
|
1638
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1639
1639
|
} else {
|
|
1640
|
-
|
|
1640
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_unless_node_t *)node)->consequent, buffer);
|
|
1641
1641
|
}
|
|
1642
|
-
if (((
|
|
1643
|
-
|
|
1642
|
+
if (((pm_unless_node_t *)node)->end_keyword_loc.start == NULL) {
|
|
1643
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1644
1644
|
} else {
|
|
1645
|
-
|
|
1646
|
-
|
|
1645
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1646
|
+
pm_serialize_location(parser, &((pm_unless_node_t *)node)->end_keyword_loc, buffer);
|
|
1647
1647
|
}
|
|
1648
1648
|
break;
|
|
1649
1649
|
}
|
|
1650
|
-
case
|
|
1651
|
-
|
|
1652
|
-
if (((
|
|
1653
|
-
|
|
1650
|
+
case PM_UNTIL_NODE: {
|
|
1651
|
+
pm_serialize_location(parser, &((pm_until_node_t *)node)->keyword_loc, buffer);
|
|
1652
|
+
if (((pm_until_node_t *)node)->closing_loc.start == NULL) {
|
|
1653
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1654
1654
|
} else {
|
|
1655
|
-
|
|
1656
|
-
|
|
1655
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1656
|
+
pm_serialize_location(parser, &((pm_until_node_t *)node)->closing_loc, buffer);
|
|
1657
1657
|
}
|
|
1658
|
-
|
|
1659
|
-
if (((
|
|
1660
|
-
|
|
1658
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_until_node_t *)node)->predicate, buffer);
|
|
1659
|
+
if (((pm_until_node_t *)node)->statements == NULL) {
|
|
1660
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1661
1661
|
} else {
|
|
1662
|
-
|
|
1662
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_until_node_t *)node)->statements, buffer);
|
|
1663
1663
|
}
|
|
1664
|
-
|
|
1664
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1665
1665
|
break;
|
|
1666
1666
|
}
|
|
1667
|
-
case
|
|
1668
|
-
|
|
1669
|
-
uint32_t conditions_size =
|
|
1670
|
-
|
|
1667
|
+
case PM_WHEN_NODE: {
|
|
1668
|
+
pm_serialize_location(parser, &((pm_when_node_t *)node)->keyword_loc, buffer);
|
|
1669
|
+
uint32_t conditions_size = pm_sizet_to_u32(((pm_when_node_t *)node)->conditions.size);
|
|
1670
|
+
pm_buffer_append_u32(buffer, conditions_size);
|
|
1671
1671
|
for (uint32_t index = 0; index < conditions_size; index++) {
|
|
1672
|
-
|
|
1672
|
+
pm_serialize_node(parser, (pm_node_t *) ((pm_when_node_t *)node)->conditions.nodes[index], buffer);
|
|
1673
1673
|
}
|
|
1674
|
-
if (((
|
|
1675
|
-
|
|
1674
|
+
if (((pm_when_node_t *)node)->statements == NULL) {
|
|
1675
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1676
1676
|
} else {
|
|
1677
|
-
|
|
1677
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_when_node_t *)node)->statements, buffer);
|
|
1678
1678
|
}
|
|
1679
1679
|
break;
|
|
1680
1680
|
}
|
|
1681
|
-
case
|
|
1682
|
-
|
|
1683
|
-
if (((
|
|
1684
|
-
|
|
1681
|
+
case PM_WHILE_NODE: {
|
|
1682
|
+
pm_serialize_location(parser, &((pm_while_node_t *)node)->keyword_loc, buffer);
|
|
1683
|
+
if (((pm_while_node_t *)node)->closing_loc.start == NULL) {
|
|
1684
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1685
1685
|
} else {
|
|
1686
|
-
|
|
1687
|
-
|
|
1686
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1687
|
+
pm_serialize_location(parser, &((pm_while_node_t *)node)->closing_loc, buffer);
|
|
1688
1688
|
}
|
|
1689
|
-
|
|
1690
|
-
if (((
|
|
1691
|
-
|
|
1689
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_while_node_t *)node)->predicate, buffer);
|
|
1690
|
+
if (((pm_while_node_t *)node)->statements == NULL) {
|
|
1691
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1692
1692
|
} else {
|
|
1693
|
-
|
|
1693
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_while_node_t *)node)->statements, buffer);
|
|
1694
1694
|
}
|
|
1695
|
-
|
|
1695
|
+
pm_buffer_append_u32(buffer, node->flags >> 2);
|
|
1696
1696
|
break;
|
|
1697
1697
|
}
|
|
1698
|
-
case
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1698
|
+
case PM_X_STRING_NODE: {
|
|
1699
|
+
pm_serialize_location(parser, &((pm_x_string_node_t *)node)->opening_loc, buffer);
|
|
1700
|
+
pm_serialize_location(parser, &((pm_x_string_node_t *)node)->content_loc, buffer);
|
|
1701
|
+
pm_serialize_location(parser, &((pm_x_string_node_t *)node)->closing_loc, buffer);
|
|
1702
|
+
pm_serialize_string(parser, &((pm_x_string_node_t *)node)->unescaped, buffer);
|
|
1703
1703
|
break;
|
|
1704
1704
|
}
|
|
1705
|
-
case
|
|
1706
|
-
|
|
1707
|
-
if (((
|
|
1708
|
-
|
|
1705
|
+
case PM_YIELD_NODE: {
|
|
1706
|
+
pm_serialize_location(parser, &((pm_yield_node_t *)node)->keyword_loc, buffer);
|
|
1707
|
+
if (((pm_yield_node_t *)node)->lparen_loc.start == NULL) {
|
|
1708
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1709
1709
|
} else {
|
|
1710
|
-
|
|
1711
|
-
|
|
1710
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1711
|
+
pm_serialize_location(parser, &((pm_yield_node_t *)node)->lparen_loc, buffer);
|
|
1712
1712
|
}
|
|
1713
|
-
if (((
|
|
1714
|
-
|
|
1713
|
+
if (((pm_yield_node_t *)node)->arguments == NULL) {
|
|
1714
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1715
1715
|
} else {
|
|
1716
|
-
|
|
1716
|
+
pm_serialize_node(parser, (pm_node_t *)((pm_yield_node_t *)node)->arguments, buffer);
|
|
1717
1717
|
}
|
|
1718
|
-
if (((
|
|
1719
|
-
|
|
1718
|
+
if (((pm_yield_node_t *)node)->rparen_loc.start == NULL) {
|
|
1719
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1720
1720
|
} else {
|
|
1721
|
-
|
|
1722
|
-
|
|
1721
|
+
pm_buffer_append_u8(buffer, 1);
|
|
1722
|
+
pm_serialize_location(parser, &((pm_yield_node_t *)node)->rparen_loc, buffer);
|
|
1723
1723
|
}
|
|
1724
1724
|
break;
|
|
1725
1725
|
}
|
|
@@ -1727,173 +1727,173 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
|
|
|
1727
1727
|
}
|
|
1728
1728
|
|
|
1729
1729
|
static void
|
|
1730
|
-
|
|
1730
|
+
pm_serialize_comment(pm_parser_t *parser, pm_comment_t *comment, pm_buffer_t *buffer) {
|
|
1731
1731
|
// serialize type
|
|
1732
|
-
|
|
1732
|
+
pm_buffer_append_u8(buffer, (uint8_t) comment->type);
|
|
1733
1733
|
|
|
1734
1734
|
// serialize location
|
|
1735
|
-
|
|
1736
|
-
|
|
1735
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(comment->start - parser->start));
|
|
1736
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(comment->end - comment->start));
|
|
1737
1737
|
}
|
|
1738
1738
|
|
|
1739
1739
|
static void
|
|
1740
|
-
|
|
1741
|
-
|
|
1740
|
+
pm_serialize_comment_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_t *buffer) {
|
|
1741
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(pm_list_size(list)));
|
|
1742
1742
|
|
|
1743
|
-
|
|
1744
|
-
for (comment = (
|
|
1745
|
-
|
|
1743
|
+
pm_comment_t *comment;
|
|
1744
|
+
for (comment = (pm_comment_t *) list->head; comment != NULL; comment = (pm_comment_t *) comment->node.next) {
|
|
1745
|
+
pm_serialize_comment(parser, comment, buffer);
|
|
1746
1746
|
}
|
|
1747
1747
|
}
|
|
1748
1748
|
|
|
1749
1749
|
static void
|
|
1750
|
-
|
|
1750
|
+
pm_serialize_diagnostic(pm_parser_t *parser, pm_diagnostic_t *diagnostic, pm_buffer_t *buffer) {
|
|
1751
1751
|
// serialize message
|
|
1752
1752
|
size_t message_length = strlen(diagnostic->message);
|
|
1753
|
-
|
|
1754
|
-
|
|
1753
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(message_length));
|
|
1754
|
+
pm_buffer_append_str(buffer, diagnostic->message, message_length);
|
|
1755
1755
|
|
|
1756
1756
|
// serialize location
|
|
1757
|
-
|
|
1758
|
-
|
|
1757
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(diagnostic->start - parser->start));
|
|
1758
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(diagnostic->end - diagnostic->start));
|
|
1759
1759
|
}
|
|
1760
1760
|
|
|
1761
1761
|
static void
|
|
1762
|
-
|
|
1763
|
-
|
|
1762
|
+
pm_serialize_diagnostic_list(pm_parser_t *parser, pm_list_t *list, pm_buffer_t *buffer) {
|
|
1763
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(pm_list_size(list)));
|
|
1764
1764
|
|
|
1765
|
-
|
|
1766
|
-
for (diagnostic = (
|
|
1767
|
-
|
|
1765
|
+
pm_diagnostic_t *diagnostic;
|
|
1766
|
+
for (diagnostic = (pm_diagnostic_t *) list->head; diagnostic != NULL; diagnostic = (pm_diagnostic_t *) diagnostic->node.next) {
|
|
1767
|
+
pm_serialize_diagnostic(parser, diagnostic, buffer);
|
|
1768
1768
|
}
|
|
1769
1769
|
}
|
|
1770
1770
|
|
|
1771
1771
|
static void
|
|
1772
|
-
|
|
1772
|
+
pm_serialize_encoding(pm_encoding_t *encoding, pm_buffer_t *buffer) {
|
|
1773
1773
|
size_t encoding_length = strlen(encoding->name);
|
|
1774
|
-
|
|
1775
|
-
|
|
1774
|
+
pm_buffer_append_u32(buffer, pm_sizet_to_u32(encoding_length));
|
|
1775
|
+
pm_buffer_append_str(buffer, encoding->name, encoding_length);
|
|
1776
1776
|
}
|
|
1777
1777
|
|
|
1778
|
-
#line
|
|
1778
|
+
#line 179 "serialize.c.erb"
|
|
1779
1779
|
void
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1780
|
+
pm_serialize_content(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) {
|
|
1781
|
+
pm_serialize_encoding(&parser->encoding, buffer);
|
|
1782
|
+
pm_serialize_comment_list(parser, &parser->comment_list, buffer);
|
|
1783
|
+
pm_serialize_diagnostic_list(parser, &parser->error_list, buffer);
|
|
1784
|
+
pm_serialize_diagnostic_list(parser, &parser->warning_list, buffer);
|
|
1785
1785
|
|
|
1786
1786
|
// Here we're going to leave space for the offset of the constant pool in
|
|
1787
1787
|
// the buffer.
|
|
1788
1788
|
size_t offset = buffer->length;
|
|
1789
|
-
|
|
1789
|
+
pm_buffer_append_zeroes(buffer, 4);
|
|
1790
1790
|
|
|
1791
1791
|
// Next, encode the length of the constant pool.
|
|
1792
|
-
|
|
1792
|
+
pm_buffer_append_u32(buffer, parser->constant_pool.size);
|
|
1793
1793
|
|
|
1794
1794
|
// Now we're going to serialize the content of the node.
|
|
1795
|
-
|
|
1795
|
+
pm_serialize_node(parser, node, buffer);
|
|
1796
1796
|
|
|
1797
1797
|
// Now we're going to serialize the offset of the constant pool back where
|
|
1798
1798
|
// we left space for it.
|
|
1799
|
-
uint32_t length =
|
|
1799
|
+
uint32_t length = pm_sizet_to_u32(buffer->length);
|
|
1800
1800
|
memcpy(buffer->value + offset, &length, sizeof(uint32_t));
|
|
1801
1801
|
|
|
1802
1802
|
// Now we're going to serialize the constant pool.
|
|
1803
1803
|
offset = buffer->length;
|
|
1804
|
-
|
|
1804
|
+
pm_buffer_append_zeroes(buffer, parser->constant_pool.size * 8);
|
|
1805
1805
|
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
constant = &parser->constant_pool.constants[index];
|
|
1806
|
+
for (uint32_t index = 0; index < parser->constant_pool.capacity; index++) {
|
|
1807
|
+
pm_constant_pool_bucket_t *bucket = &parser->constant_pool.buckets[index];
|
|
1809
1808
|
|
|
1810
1809
|
// If we find a constant at this index, serialize it at the correct
|
|
1811
1810
|
// index in the buffer.
|
|
1812
|
-
if (
|
|
1813
|
-
|
|
1811
|
+
if (bucket->id != 0) {
|
|
1812
|
+
pm_constant_t *constant = &parser->constant_pool.constants[bucket->id - 1];
|
|
1813
|
+
size_t buffer_offset = offset + ((((size_t)bucket->id) - 1) * 8);
|
|
1814
1814
|
|
|
1815
|
-
if (
|
|
1815
|
+
if (bucket->owned) {
|
|
1816
1816
|
// Since this is an owned constant, we are going to write its
|
|
1817
1817
|
// contents into the buffer after the constant pool. So
|
|
1818
1818
|
// effectively in place of the source offset, we have a buffer
|
|
1819
1819
|
// offset. We will add a leading 1 to indicate that this is a
|
|
1820
1820
|
// buffer offset.
|
|
1821
|
-
uint32_t content_offset =
|
|
1821
|
+
uint32_t content_offset = pm_sizet_to_u32(buffer->length);
|
|
1822
1822
|
uint32_t owned_mask = (uint32_t) (1 << 31);
|
|
1823
1823
|
|
|
1824
1824
|
assert(content_offset < owned_mask);
|
|
1825
1825
|
content_offset |= owned_mask;
|
|
1826
1826
|
|
|
1827
1827
|
memcpy(buffer->value + buffer_offset, &content_offset, 4);
|
|
1828
|
-
|
|
1828
|
+
pm_buffer_append_bytes(buffer, constant->start, constant->length);
|
|
1829
1829
|
} else {
|
|
1830
1830
|
// Since this is a shared constant, we are going to write its
|
|
1831
1831
|
// source offset directly into the buffer.
|
|
1832
|
-
uint32_t source_offset =
|
|
1832
|
+
uint32_t source_offset = pm_ptrdifft_to_u32(constant->start - parser->start);
|
|
1833
1833
|
memcpy(buffer->value + buffer_offset, &source_offset, 4);
|
|
1834
1834
|
}
|
|
1835
1835
|
|
|
1836
1836
|
// Now we can write the length of the constant into the buffer.
|
|
1837
|
-
uint32_t constant_length =
|
|
1837
|
+
uint32_t constant_length = pm_sizet_to_u32(constant->length);
|
|
1838
1838
|
memcpy(buffer->value + buffer_offset + 4, &constant_length, 4);
|
|
1839
1839
|
}
|
|
1840
1840
|
}
|
|
1841
1841
|
}
|
|
1842
1842
|
|
|
1843
1843
|
static void
|
|
1844
|
-
serialize_token(void *data,
|
|
1845
|
-
|
|
1844
|
+
serialize_token(void *data, pm_parser_t *parser, pm_token_t *token) {
|
|
1845
|
+
pm_buffer_t *buffer = (pm_buffer_t *) data;
|
|
1846
1846
|
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1847
|
+
pm_buffer_append_u32(buffer, token->type);
|
|
1848
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(token->start - parser->start));
|
|
1849
|
+
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(token->end - token->start));
|
|
1850
|
+
pm_buffer_append_u32(buffer, parser->lex_state);
|
|
1851
1851
|
}
|
|
1852
1852
|
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1853
|
+
PRISM_EXPORTED_FUNCTION void
|
|
1854
|
+
pm_lex_serialize(const uint8_t *source, size_t size, const char *filepath, pm_buffer_t *buffer) {
|
|
1855
|
+
pm_parser_t parser;
|
|
1856
|
+
pm_parser_init(&parser, source, size, filepath);
|
|
1857
1857
|
|
|
1858
|
-
|
|
1858
|
+
pm_lex_callback_t lex_callback = (pm_lex_callback_t) {
|
|
1859
1859
|
.data = (void *) buffer,
|
|
1860
1860
|
.callback = serialize_token,
|
|
1861
1861
|
};
|
|
1862
1862
|
|
|
1863
1863
|
parser.lex_callback = &lex_callback;
|
|
1864
|
-
|
|
1864
|
+
pm_node_t *node = pm_parse(&parser);
|
|
1865
1865
|
|
|
1866
1866
|
// Append 0 to mark end of tokens
|
|
1867
|
-
|
|
1867
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1868
1868
|
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1869
|
+
pm_serialize_encoding(&parser.encoding, buffer);
|
|
1870
|
+
pm_serialize_comment_list(&parser, &parser.comment_list, buffer);
|
|
1871
|
+
pm_serialize_diagnostic_list(&parser, &parser.error_list, buffer);
|
|
1872
|
+
pm_serialize_diagnostic_list(&parser, &parser.warning_list, buffer);
|
|
1873
1873
|
|
|
1874
|
-
|
|
1875
|
-
|
|
1874
|
+
pm_node_destroy(&parser, node);
|
|
1875
|
+
pm_parser_free(&parser);
|
|
1876
1876
|
}
|
|
1877
1877
|
|
|
1878
1878
|
// Parse and serialize both the AST and the tokens represented by the given
|
|
1879
1879
|
// source to the given buffer.
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
if (metadata)
|
|
1880
|
+
PRISM_EXPORTED_FUNCTION void
|
|
1881
|
+
pm_parse_lex_serialize(const uint8_t *source, size_t size, pm_buffer_t *buffer, const char *metadata) {
|
|
1882
|
+
pm_parser_t parser;
|
|
1883
|
+
pm_parser_init(&parser, source, size, NULL);
|
|
1884
|
+
if (metadata) pm_parser_metadata(&parser, metadata);
|
|
1885
1885
|
|
|
1886
|
-
|
|
1886
|
+
pm_lex_callback_t lex_callback = (pm_lex_callback_t) {
|
|
1887
1887
|
.data = (void *) buffer,
|
|
1888
1888
|
.callback = serialize_token,
|
|
1889
1889
|
};
|
|
1890
1890
|
|
|
1891
1891
|
parser.lex_callback = &lex_callback;
|
|
1892
|
-
|
|
1892
|
+
pm_node_t *node = pm_parse(&parser);
|
|
1893
1893
|
|
|
1894
|
-
|
|
1895
|
-
|
|
1894
|
+
pm_buffer_append_u8(buffer, 0);
|
|
1895
|
+
pm_serialize(&parser, node, buffer);
|
|
1896
1896
|
|
|
1897
|
-
|
|
1898
|
-
|
|
1897
|
+
pm_node_destroy(&parser, node);
|
|
1898
|
+
pm_parser_free(&parser);
|
|
1899
1899
|
}
|