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