yarp 0.9.0 → 0.11.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -1
  3. data/CONTRIBUTING.md +7 -0
  4. data/Makefile +5 -1
  5. data/config.yml +308 -166
  6. data/docs/configuration.md +0 -1
  7. data/docs/encoding.md +5 -5
  8. data/docs/mapping.md +91 -91
  9. data/docs/serialization.md +25 -22
  10. data/ext/yarp/api_node.c +1210 -483
  11. data/ext/yarp/extension.c +22 -8
  12. data/ext/yarp/extension.h +2 -2
  13. data/include/yarp/ast.h +692 -183
  14. data/include/yarp/defines.h +2 -1
  15. data/include/yarp/diagnostic.h +200 -3
  16. data/include/yarp/enc/yp_encoding.h +10 -10
  17. data/include/yarp/node.h +0 -4
  18. data/include/yarp/parser.h +19 -19
  19. data/include/yarp/regexp.h +1 -1
  20. data/include/yarp/unescape.h +4 -4
  21. data/include/yarp/util/yp_buffer.h +3 -0
  22. data/include/yarp/util/yp_char.h +16 -16
  23. data/include/yarp/util/yp_constant_pool.h +12 -5
  24. data/include/yarp/util/yp_newline_list.h +5 -5
  25. data/include/yarp/util/yp_string.h +4 -4
  26. data/include/yarp/util/yp_string_list.h +0 -3
  27. data/include/yarp/util/yp_strpbrk.h +1 -1
  28. data/include/yarp/version.h +2 -2
  29. data/include/yarp.h +5 -4
  30. data/lib/yarp/desugar_visitor.rb +59 -122
  31. data/lib/yarp/mutation_visitor.rb +22 -12
  32. data/lib/yarp/node.rb +3081 -501
  33. data/lib/yarp/parse_result/comments.rb +172 -0
  34. data/lib/yarp/parse_result/newlines.rb +60 -0
  35. data/lib/yarp/pattern.rb +239 -0
  36. data/lib/yarp/serialize.rb +152 -129
  37. data/lib/yarp.rb +109 -49
  38. data/src/diagnostic.c +254 -2
  39. data/src/enc/yp_big5.c +15 -42
  40. data/src/enc/yp_euc_jp.c +16 -43
  41. data/src/enc/yp_gbk.c +19 -46
  42. data/src/enc/yp_shift_jis.c +16 -43
  43. data/src/enc/yp_tables.c +36 -38
  44. data/src/enc/yp_unicode.c +20 -25
  45. data/src/enc/yp_windows_31j.c +16 -43
  46. data/src/node.c +1871 -1466
  47. data/src/prettyprint.c +463 -230
  48. data/src/regexp.c +21 -21
  49. data/src/serialize.c +352 -184
  50. data/src/unescape.c +152 -122
  51. data/src/util/yp_buffer.c +7 -2
  52. data/src/util/yp_char.c +35 -40
  53. data/src/util/yp_constant_pool.c +45 -12
  54. data/src/util/yp_memchr.c +1 -1
  55. data/src/util/yp_newline_list.c +10 -5
  56. data/src/util/yp_string.c +22 -20
  57. data/src/util/yp_string_list.c +4 -7
  58. data/src/util/yp_strncasecmp.c +3 -6
  59. data/src/util/yp_strpbrk.c +8 -8
  60. data/src/yarp.c +1288 -1021
  61. data/yarp.gemspec +4 -1
  62. metadata +6 -3
data/src/serialize.c CHANGED
@@ -45,7 +45,7 @@ yp_serialize_string(yp_parser_t *parser, yp_string_t *string, yp_buffer_t *buffe
45
45
  uint32_t length = yp_sizet_to_u32(yp_string_length(string));
46
46
  yp_buffer_append_u8(buffer, 2);
47
47
  yp_buffer_append_u32(buffer, length);
48
- yp_buffer_append_str(buffer, yp_string_source(string), length);
48
+ yp_buffer_append_bytes(buffer, yp_string_source(string), length);
49
49
  break;
50
50
  }
51
51
  case YP_STRING_MAPPED:
@@ -65,27 +65,27 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
65
65
  switch (YP_NODE_TYPE(node)) {
66
66
  // We do not need to serialize a ScopeNode ever as
67
67
  // it is not part of the AST
68
- case YP_NODE_SCOPE_NODE:
68
+ case YP_SCOPE_NODE:
69
69
  return;
70
- case YP_NODE_ALIAS_NODE: {
70
+ case YP_ALIAS_NODE: {
71
71
  yp_serialize_node(parser, (yp_node_t *)((yp_alias_node_t *)node)->new_name, buffer);
72
72
  yp_serialize_node(parser, (yp_node_t *)((yp_alias_node_t *)node)->old_name, buffer);
73
73
  yp_serialize_location(parser, &((yp_alias_node_t *)node)->keyword_loc, buffer);
74
74
  break;
75
75
  }
76
- case YP_NODE_ALTERNATION_PATTERN_NODE: {
76
+ case YP_ALTERNATION_PATTERN_NODE: {
77
77
  yp_serialize_node(parser, (yp_node_t *)((yp_alternation_pattern_node_t *)node)->left, buffer);
78
78
  yp_serialize_node(parser, (yp_node_t *)((yp_alternation_pattern_node_t *)node)->right, buffer);
79
79
  yp_serialize_location(parser, &((yp_alternation_pattern_node_t *)node)->operator_loc, buffer);
80
80
  break;
81
81
  }
82
- case YP_NODE_AND_NODE: {
82
+ case YP_AND_NODE: {
83
83
  yp_serialize_node(parser, (yp_node_t *)((yp_and_node_t *)node)->left, buffer);
84
84
  yp_serialize_node(parser, (yp_node_t *)((yp_and_node_t *)node)->right, buffer);
85
85
  yp_serialize_location(parser, &((yp_and_node_t *)node)->operator_loc, buffer);
86
86
  break;
87
87
  }
88
- case YP_NODE_ARGUMENTS_NODE: {
88
+ case YP_ARGUMENTS_NODE: {
89
89
  uint32_t arguments_size = yp_sizet_to_u32(((yp_arguments_node_t *)node)->arguments.size);
90
90
  yp_buffer_append_u32(buffer, arguments_size);
91
91
  for (uint32_t index = 0; index < arguments_size; index++) {
@@ -93,7 +93,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
93
93
  }
94
94
  break;
95
95
  }
96
- case YP_NODE_ARRAY_NODE: {
96
+ case YP_ARRAY_NODE: {
97
97
  uint32_t elements_size = yp_sizet_to_u32(((yp_array_node_t *)node)->elements.size);
98
98
  yp_buffer_append_u32(buffer, elements_size);
99
99
  for (uint32_t index = 0; index < elements_size; index++) {
@@ -113,7 +113,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
113
113
  }
114
114
  break;
115
115
  }
116
- case YP_NODE_ARRAY_PATTERN_NODE: {
116
+ case YP_ARRAY_PATTERN_NODE: {
117
117
  if (((yp_array_pattern_node_t *)node)->constant == NULL) {
118
118
  yp_buffer_append_u8(buffer, 0);
119
119
  } else {
@@ -148,7 +148,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
148
148
  }
149
149
  break;
150
150
  }
151
- case YP_NODE_ASSOC_NODE: {
151
+ case YP_ASSOC_NODE: {
152
152
  yp_serialize_node(parser, (yp_node_t *)((yp_assoc_node_t *)node)->key, buffer);
153
153
  if (((yp_assoc_node_t *)node)->value == NULL) {
154
154
  yp_buffer_append_u8(buffer, 0);
@@ -163,7 +163,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
163
163
  }
164
164
  break;
165
165
  }
166
- case YP_NODE_ASSOC_SPLAT_NODE: {
166
+ case YP_ASSOC_SPLAT_NODE: {
167
167
  if (((yp_assoc_splat_node_t *)node)->value == NULL) {
168
168
  yp_buffer_append_u8(buffer, 0);
169
169
  } else {
@@ -172,10 +172,10 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
172
172
  yp_serialize_location(parser, &((yp_assoc_splat_node_t *)node)->operator_loc, buffer);
173
173
  break;
174
174
  }
175
- case YP_NODE_BACK_REFERENCE_READ_NODE: {
175
+ case YP_BACK_REFERENCE_READ_NODE: {
176
176
  break;
177
177
  }
178
- case YP_NODE_BEGIN_NODE: {
178
+ case YP_BEGIN_NODE: {
179
179
  if (((yp_begin_node_t *)node)->begin_keyword_loc.start == NULL) {
180
180
  yp_buffer_append_u8(buffer, 0);
181
181
  } else {
@@ -210,7 +210,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
210
210
  }
211
211
  break;
212
212
  }
213
- case YP_NODE_BLOCK_ARGUMENT_NODE: {
213
+ case YP_BLOCK_ARGUMENT_NODE: {
214
214
  if (((yp_block_argument_node_t *)node)->expression == NULL) {
215
215
  yp_buffer_append_u8(buffer, 0);
216
216
  } else {
@@ -219,7 +219,11 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
219
219
  yp_serialize_location(parser, &((yp_block_argument_node_t *)node)->operator_loc, buffer);
220
220
  break;
221
221
  }
222
- case YP_NODE_BLOCK_NODE: {
222
+ case YP_BLOCK_LOCAL_VARIABLE_NODE: {
223
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_block_local_variable_node_t *)node)->name));
224
+ break;
225
+ }
226
+ case YP_BLOCK_NODE: {
223
227
  uint32_t locals_size = yp_sizet_to_u32(((yp_block_node_t *)node)->locals.size);
224
228
  yp_buffer_append_u32(buffer, locals_size);
225
229
  for (uint32_t index = 0; index < locals_size; index++) {
@@ -239,7 +243,8 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
239
243
  yp_serialize_location(parser, &((yp_block_node_t *)node)->closing_loc, buffer);
240
244
  break;
241
245
  }
242
- case YP_NODE_BLOCK_PARAMETER_NODE: {
246
+ case YP_BLOCK_PARAMETER_NODE: {
247
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_block_parameter_node_t *)node)->name));
243
248
  if (((yp_block_parameter_node_t *)node)->name_loc.start == NULL) {
244
249
  yp_buffer_append_u8(buffer, 0);
245
250
  } else {
@@ -249,7 +254,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
249
254
  yp_serialize_location(parser, &((yp_block_parameter_node_t *)node)->operator_loc, buffer);
250
255
  break;
251
256
  }
252
- case YP_NODE_BLOCK_PARAMETERS_NODE: {
257
+ case YP_BLOCK_PARAMETERS_NODE: {
253
258
  if (((yp_block_parameters_node_t *)node)->parameters == NULL) {
254
259
  yp_buffer_append_u8(buffer, 0);
255
260
  } else {
@@ -258,7 +263,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
258
263
  uint32_t locals_size = yp_sizet_to_u32(((yp_block_parameters_node_t *)node)->locals.size);
259
264
  yp_buffer_append_u32(buffer, locals_size);
260
265
  for (uint32_t index = 0; index < locals_size; index++) {
261
- yp_serialize_location(parser, &((yp_block_parameters_node_t *)node)->locals.locations[index], buffer);
266
+ yp_serialize_node(parser, (yp_node_t *) ((yp_block_parameters_node_t *)node)->locals.nodes[index], buffer);
262
267
  }
263
268
  if (((yp_block_parameters_node_t *)node)->opening_loc.start == NULL) {
264
269
  yp_buffer_append_u8(buffer, 0);
@@ -274,7 +279,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
274
279
  }
275
280
  break;
276
281
  }
277
- case YP_NODE_BREAK_NODE: {
282
+ case YP_BREAK_NODE: {
278
283
  if (((yp_break_node_t *)node)->arguments == NULL) {
279
284
  yp_buffer_append_u8(buffer, 0);
280
285
  } else {
@@ -283,17 +288,59 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
283
288
  yp_serialize_location(parser, &((yp_break_node_t *)node)->keyword_loc, buffer);
284
289
  break;
285
290
  }
286
- case YP_NODE_CALL_NODE: {
291
+ case YP_CALL_AND_WRITE_NODE: {
292
+ if (((yp_call_and_write_node_t *)node)->receiver == NULL) {
293
+ yp_buffer_append_u8(buffer, 0);
294
+ } else {
295
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_and_write_node_t *)node)->receiver, buffer);
296
+ }
297
+ if (((yp_call_and_write_node_t *)node)->call_operator_loc.start == NULL) {
298
+ yp_buffer_append_u8(buffer, 0);
299
+ } else {
300
+ yp_buffer_append_u8(buffer, 1);
301
+ yp_serialize_location(parser, &((yp_call_and_write_node_t *)node)->call_operator_loc, buffer);
302
+ }
303
+ if (((yp_call_and_write_node_t *)node)->message_loc.start == NULL) {
304
+ yp_buffer_append_u8(buffer, 0);
305
+ } else {
306
+ yp_buffer_append_u8(buffer, 1);
307
+ yp_serialize_location(parser, &((yp_call_and_write_node_t *)node)->message_loc, buffer);
308
+ }
309
+ if (((yp_call_and_write_node_t *)node)->opening_loc.start == NULL) {
310
+ yp_buffer_append_u8(buffer, 0);
311
+ } else {
312
+ yp_buffer_append_u8(buffer, 1);
313
+ yp_serialize_location(parser, &((yp_call_and_write_node_t *)node)->opening_loc, buffer);
314
+ }
315
+ if (((yp_call_and_write_node_t *)node)->arguments == NULL) {
316
+ yp_buffer_append_u8(buffer, 0);
317
+ } else {
318
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_and_write_node_t *)node)->arguments, buffer);
319
+ }
320
+ if (((yp_call_and_write_node_t *)node)->closing_loc.start == NULL) {
321
+ yp_buffer_append_u8(buffer, 0);
322
+ } else {
323
+ yp_buffer_append_u8(buffer, 1);
324
+ yp_serialize_location(parser, &((yp_call_and_write_node_t *)node)->closing_loc, buffer);
325
+ }
326
+ yp_buffer_append_u32(buffer, node->flags >> 1);
327
+ yp_serialize_string(parser, &((yp_call_and_write_node_t *)node)->read_name, buffer);
328
+ yp_serialize_string(parser, &((yp_call_and_write_node_t *)node)->write_name, buffer);
329
+ yp_serialize_location(parser, &((yp_call_and_write_node_t *)node)->operator_loc, buffer);
330
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_and_write_node_t *)node)->value, buffer);
331
+ break;
332
+ }
333
+ case YP_CALL_NODE: {
287
334
  if (((yp_call_node_t *)node)->receiver == NULL) {
288
335
  yp_buffer_append_u8(buffer, 0);
289
336
  } else {
290
337
  yp_serialize_node(parser, (yp_node_t *)((yp_call_node_t *)node)->receiver, buffer);
291
338
  }
292
- if (((yp_call_node_t *)node)->operator_loc.start == NULL) {
339
+ if (((yp_call_node_t *)node)->call_operator_loc.start == NULL) {
293
340
  yp_buffer_append_u8(buffer, 0);
294
341
  } else {
295
342
  yp_buffer_append_u8(buffer, 1);
296
- yp_serialize_location(parser, &((yp_call_node_t *)node)->operator_loc, buffer);
343
+ yp_serialize_location(parser, &((yp_call_node_t *)node)->call_operator_loc, buffer);
297
344
  }
298
345
  if (((yp_call_node_t *)node)->message_loc.start == NULL) {
299
346
  yp_buffer_append_u8(buffer, 0);
@@ -327,32 +374,98 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
327
374
  yp_serialize_string(parser, &((yp_call_node_t *)node)->name, buffer);
328
375
  break;
329
376
  }
330
- case YP_NODE_CALL_OPERATOR_AND_WRITE_NODE: {
331
- yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_and_write_node_t *)node)->target, buffer);
332
- yp_serialize_location(parser, &((yp_call_operator_and_write_node_t *)node)->operator_loc, buffer);
333
- yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_and_write_node_t *)node)->value, buffer);
334
- break;
335
- }
336
- case YP_NODE_CALL_OPERATOR_OR_WRITE_NODE: {
337
- yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_or_write_node_t *)node)->target, buffer);
338
- yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_or_write_node_t *)node)->value, buffer);
339
- yp_serialize_location(parser, &((yp_call_operator_or_write_node_t *)node)->operator_loc, buffer);
340
- break;
341
- }
342
- case YP_NODE_CALL_OPERATOR_WRITE_NODE: {
343
- yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_write_node_t *)node)->target, buffer);
377
+ case YP_CALL_OPERATOR_WRITE_NODE: {
378
+ if (((yp_call_operator_write_node_t *)node)->receiver == NULL) {
379
+ yp_buffer_append_u8(buffer, 0);
380
+ } else {
381
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_write_node_t *)node)->receiver, buffer);
382
+ }
383
+ if (((yp_call_operator_write_node_t *)node)->call_operator_loc.start == NULL) {
384
+ yp_buffer_append_u8(buffer, 0);
385
+ } else {
386
+ yp_buffer_append_u8(buffer, 1);
387
+ yp_serialize_location(parser, &((yp_call_operator_write_node_t *)node)->call_operator_loc, buffer);
388
+ }
389
+ if (((yp_call_operator_write_node_t *)node)->message_loc.start == NULL) {
390
+ yp_buffer_append_u8(buffer, 0);
391
+ } else {
392
+ yp_buffer_append_u8(buffer, 1);
393
+ yp_serialize_location(parser, &((yp_call_operator_write_node_t *)node)->message_loc, buffer);
394
+ }
395
+ if (((yp_call_operator_write_node_t *)node)->opening_loc.start == NULL) {
396
+ yp_buffer_append_u8(buffer, 0);
397
+ } else {
398
+ yp_buffer_append_u8(buffer, 1);
399
+ yp_serialize_location(parser, &((yp_call_operator_write_node_t *)node)->opening_loc, buffer);
400
+ }
401
+ if (((yp_call_operator_write_node_t *)node)->arguments == NULL) {
402
+ yp_buffer_append_u8(buffer, 0);
403
+ } else {
404
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_write_node_t *)node)->arguments, buffer);
405
+ }
406
+ if (((yp_call_operator_write_node_t *)node)->closing_loc.start == NULL) {
407
+ yp_buffer_append_u8(buffer, 0);
408
+ } else {
409
+ yp_buffer_append_u8(buffer, 1);
410
+ yp_serialize_location(parser, &((yp_call_operator_write_node_t *)node)->closing_loc, buffer);
411
+ }
412
+ yp_buffer_append_u32(buffer, node->flags >> 1);
413
+ yp_serialize_string(parser, &((yp_call_operator_write_node_t *)node)->read_name, buffer);
414
+ yp_serialize_string(parser, &((yp_call_operator_write_node_t *)node)->write_name, buffer);
415
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_call_operator_write_node_t *)node)->operator));
344
416
  yp_serialize_location(parser, &((yp_call_operator_write_node_t *)node)->operator_loc, buffer);
345
417
  yp_serialize_node(parser, (yp_node_t *)((yp_call_operator_write_node_t *)node)->value, buffer);
346
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_call_operator_write_node_t *)node)->operator_id));
347
418
  break;
348
419
  }
349
- case YP_NODE_CAPTURE_PATTERN_NODE: {
420
+ case YP_CALL_OR_WRITE_NODE: {
421
+ if (((yp_call_or_write_node_t *)node)->receiver == NULL) {
422
+ yp_buffer_append_u8(buffer, 0);
423
+ } else {
424
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_or_write_node_t *)node)->receiver, buffer);
425
+ }
426
+ if (((yp_call_or_write_node_t *)node)->call_operator_loc.start == NULL) {
427
+ yp_buffer_append_u8(buffer, 0);
428
+ } else {
429
+ yp_buffer_append_u8(buffer, 1);
430
+ yp_serialize_location(parser, &((yp_call_or_write_node_t *)node)->call_operator_loc, buffer);
431
+ }
432
+ if (((yp_call_or_write_node_t *)node)->message_loc.start == NULL) {
433
+ yp_buffer_append_u8(buffer, 0);
434
+ } else {
435
+ yp_buffer_append_u8(buffer, 1);
436
+ yp_serialize_location(parser, &((yp_call_or_write_node_t *)node)->message_loc, buffer);
437
+ }
438
+ if (((yp_call_or_write_node_t *)node)->opening_loc.start == NULL) {
439
+ yp_buffer_append_u8(buffer, 0);
440
+ } else {
441
+ yp_buffer_append_u8(buffer, 1);
442
+ yp_serialize_location(parser, &((yp_call_or_write_node_t *)node)->opening_loc, buffer);
443
+ }
444
+ if (((yp_call_or_write_node_t *)node)->arguments == NULL) {
445
+ yp_buffer_append_u8(buffer, 0);
446
+ } else {
447
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_or_write_node_t *)node)->arguments, buffer);
448
+ }
449
+ if (((yp_call_or_write_node_t *)node)->closing_loc.start == NULL) {
450
+ yp_buffer_append_u8(buffer, 0);
451
+ } else {
452
+ yp_buffer_append_u8(buffer, 1);
453
+ yp_serialize_location(parser, &((yp_call_or_write_node_t *)node)->closing_loc, buffer);
454
+ }
455
+ yp_buffer_append_u32(buffer, node->flags >> 1);
456
+ yp_serialize_string(parser, &((yp_call_or_write_node_t *)node)->read_name, buffer);
457
+ yp_serialize_string(parser, &((yp_call_or_write_node_t *)node)->write_name, buffer);
458
+ yp_serialize_location(parser, &((yp_call_or_write_node_t *)node)->operator_loc, buffer);
459
+ yp_serialize_node(parser, (yp_node_t *)((yp_call_or_write_node_t *)node)->value, buffer);
460
+ break;
461
+ }
462
+ case YP_CAPTURE_PATTERN_NODE: {
350
463
  yp_serialize_node(parser, (yp_node_t *)((yp_capture_pattern_node_t *)node)->value, buffer);
351
464
  yp_serialize_node(parser, (yp_node_t *)((yp_capture_pattern_node_t *)node)->target, buffer);
352
465
  yp_serialize_location(parser, &((yp_capture_pattern_node_t *)node)->operator_loc, buffer);
353
466
  break;
354
467
  }
355
- case YP_NODE_CASE_NODE: {
468
+ case YP_CASE_NODE: {
356
469
  if (((yp_case_node_t *)node)->predicate == NULL) {
357
470
  yp_buffer_append_u8(buffer, 0);
358
471
  } else {
@@ -372,7 +485,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
372
485
  yp_serialize_location(parser, &((yp_case_node_t *)node)->end_keyword_loc, buffer);
373
486
  break;
374
487
  }
375
- case YP_NODE_CLASS_NODE: {
488
+ case YP_CLASS_NODE: {
376
489
  uint32_t locals_size = yp_sizet_to_u32(((yp_class_node_t *)node)->locals.size);
377
490
  yp_buffer_append_u32(buffer, locals_size);
378
491
  for (uint32_t index = 0; index < locals_size; index++) {
@@ -397,41 +510,43 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
397
510
  yp_serialize_node(parser, (yp_node_t *)((yp_class_node_t *)node)->body, buffer);
398
511
  }
399
512
  yp_serialize_location(parser, &((yp_class_node_t *)node)->end_keyword_loc, buffer);
400
- yp_serialize_string(parser, &((yp_class_node_t *)node)->name, buffer);
513
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_node_t *)node)->name));
401
514
  break;
402
515
  }
403
- case YP_NODE_CLASS_VARIABLE_AND_WRITE_NODE: {
516
+ case YP_CLASS_VARIABLE_AND_WRITE_NODE: {
517
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_variable_and_write_node_t *)node)->name));
404
518
  yp_serialize_location(parser, &((yp_class_variable_and_write_node_t *)node)->name_loc, buffer);
405
519
  yp_serialize_location(parser, &((yp_class_variable_and_write_node_t *)node)->operator_loc, buffer);
406
520
  yp_serialize_node(parser, (yp_node_t *)((yp_class_variable_and_write_node_t *)node)->value, buffer);
407
521
  break;
408
522
  }
409
- case YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
523
+ case YP_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
524
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_variable_operator_write_node_t *)node)->name));
410
525
  yp_serialize_location(parser, &((yp_class_variable_operator_write_node_t *)node)->name_loc, buffer);
411
526
  yp_serialize_location(parser, &((yp_class_variable_operator_write_node_t *)node)->operator_loc, buffer);
412
527
  yp_serialize_node(parser, (yp_node_t *)((yp_class_variable_operator_write_node_t *)node)->value, buffer);
413
528
  yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_variable_operator_write_node_t *)node)->operator));
414
529
  break;
415
530
  }
416
- case YP_NODE_CLASS_VARIABLE_OR_WRITE_NODE: {
531
+ case YP_CLASS_VARIABLE_OR_WRITE_NODE: {
532
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_variable_or_write_node_t *)node)->name));
417
533
  yp_serialize_location(parser, &((yp_class_variable_or_write_node_t *)node)->name_loc, buffer);
418
534
  yp_serialize_location(parser, &((yp_class_variable_or_write_node_t *)node)->operator_loc, buffer);
419
535
  yp_serialize_node(parser, (yp_node_t *)((yp_class_variable_or_write_node_t *)node)->value, buffer);
420
536
  break;
421
537
  }
422
- case YP_NODE_CLASS_VARIABLE_READ_NODE: {
538
+ case YP_CLASS_VARIABLE_READ_NODE: {
539
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_variable_read_node_t *)node)->name));
423
540
  break;
424
541
  }
425
- case YP_NODE_CLASS_VARIABLE_TARGET_NODE: {
542
+ case YP_CLASS_VARIABLE_TARGET_NODE: {
543
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_variable_target_node_t *)node)->name));
426
544
  break;
427
545
  }
428
- case YP_NODE_CLASS_VARIABLE_WRITE_NODE: {
546
+ case YP_CLASS_VARIABLE_WRITE_NODE: {
547
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_class_variable_write_node_t *)node)->name));
429
548
  yp_serialize_location(parser, &((yp_class_variable_write_node_t *)node)->name_loc, buffer);
430
- if (((yp_class_variable_write_node_t *)node)->value == NULL) {
431
- yp_buffer_append_u8(buffer, 0);
432
- } else {
433
- yp_serialize_node(parser, (yp_node_t *)((yp_class_variable_write_node_t *)node)->value, buffer);
434
- }
549
+ yp_serialize_node(parser, (yp_node_t *)((yp_class_variable_write_node_t *)node)->value, buffer);
435
550
  if (((yp_class_variable_write_node_t *)node)->operator_loc.start == NULL) {
436
551
  yp_buffer_append_u8(buffer, 0);
437
552
  } else {
@@ -440,32 +555,35 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
440
555
  }
441
556
  break;
442
557
  }
443
- case YP_NODE_CONSTANT_AND_WRITE_NODE: {
558
+ case YP_CONSTANT_AND_WRITE_NODE: {
559
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_and_write_node_t *)node)->name));
444
560
  yp_serialize_location(parser, &((yp_constant_and_write_node_t *)node)->name_loc, buffer);
445
561
  yp_serialize_location(parser, &((yp_constant_and_write_node_t *)node)->operator_loc, buffer);
446
562
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_and_write_node_t *)node)->value, buffer);
447
563
  break;
448
564
  }
449
- case YP_NODE_CONSTANT_OPERATOR_WRITE_NODE: {
565
+ case YP_CONSTANT_OPERATOR_WRITE_NODE: {
566
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_operator_write_node_t *)node)->name));
450
567
  yp_serialize_location(parser, &((yp_constant_operator_write_node_t *)node)->name_loc, buffer);
451
568
  yp_serialize_location(parser, &((yp_constant_operator_write_node_t *)node)->operator_loc, buffer);
452
569
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_operator_write_node_t *)node)->value, buffer);
453
570
  yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_operator_write_node_t *)node)->operator));
454
571
  break;
455
572
  }
456
- case YP_NODE_CONSTANT_OR_WRITE_NODE: {
573
+ case YP_CONSTANT_OR_WRITE_NODE: {
574
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_or_write_node_t *)node)->name));
457
575
  yp_serialize_location(parser, &((yp_constant_or_write_node_t *)node)->name_loc, buffer);
458
576
  yp_serialize_location(parser, &((yp_constant_or_write_node_t *)node)->operator_loc, buffer);
459
577
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_or_write_node_t *)node)->value, buffer);
460
578
  break;
461
579
  }
462
- case YP_NODE_CONSTANT_PATH_AND_WRITE_NODE: {
580
+ case YP_CONSTANT_PATH_AND_WRITE_NODE: {
463
581
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_and_write_node_t *)node)->target, buffer);
464
582
  yp_serialize_location(parser, &((yp_constant_path_and_write_node_t *)node)->operator_loc, buffer);
465
583
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_and_write_node_t *)node)->value, buffer);
466
584
  break;
467
585
  }
468
- case YP_NODE_CONSTANT_PATH_NODE: {
586
+ case YP_CONSTANT_PATH_NODE: {
469
587
  if (((yp_constant_path_node_t *)node)->parent == NULL) {
470
588
  yp_buffer_append_u8(buffer, 0);
471
589
  } else {
@@ -475,20 +593,20 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
475
593
  yp_serialize_location(parser, &((yp_constant_path_node_t *)node)->delimiter_loc, buffer);
476
594
  break;
477
595
  }
478
- case YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
596
+ case YP_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
479
597
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_operator_write_node_t *)node)->target, buffer);
480
598
  yp_serialize_location(parser, &((yp_constant_path_operator_write_node_t *)node)->operator_loc, buffer);
481
599
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_operator_write_node_t *)node)->value, buffer);
482
600
  yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_path_operator_write_node_t *)node)->operator));
483
601
  break;
484
602
  }
485
- case YP_NODE_CONSTANT_PATH_OR_WRITE_NODE: {
603
+ case YP_CONSTANT_PATH_OR_WRITE_NODE: {
486
604
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_or_write_node_t *)node)->target, buffer);
487
605
  yp_serialize_location(parser, &((yp_constant_path_or_write_node_t *)node)->operator_loc, buffer);
488
606
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_or_write_node_t *)node)->value, buffer);
489
607
  break;
490
608
  }
491
- case YP_NODE_CONSTANT_PATH_TARGET_NODE: {
609
+ case YP_CONSTANT_PATH_TARGET_NODE: {
492
610
  if (((yp_constant_path_target_node_t *)node)->parent == NULL) {
493
611
  yp_buffer_append_u8(buffer, 0);
494
612
  } else {
@@ -498,29 +616,33 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
498
616
  yp_serialize_location(parser, &((yp_constant_path_target_node_t *)node)->delimiter_loc, buffer);
499
617
  break;
500
618
  }
501
- case YP_NODE_CONSTANT_PATH_WRITE_NODE: {
619
+ case YP_CONSTANT_PATH_WRITE_NODE: {
502
620
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_write_node_t *)node)->target, buffer);
503
621
  yp_serialize_location(parser, &((yp_constant_path_write_node_t *)node)->operator_loc, buffer);
504
622
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_path_write_node_t *)node)->value, buffer);
505
623
  break;
506
624
  }
507
- case YP_NODE_CONSTANT_READ_NODE: {
625
+ case YP_CONSTANT_READ_NODE: {
626
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_read_node_t *)node)->name));
508
627
  break;
509
628
  }
510
- case YP_NODE_CONSTANT_TARGET_NODE: {
629
+ case YP_CONSTANT_TARGET_NODE: {
630
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_target_node_t *)node)->name));
511
631
  break;
512
632
  }
513
- case YP_NODE_CONSTANT_WRITE_NODE: {
633
+ case YP_CONSTANT_WRITE_NODE: {
634
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_constant_write_node_t *)node)->name));
514
635
  yp_serialize_location(parser, &((yp_constant_write_node_t *)node)->name_loc, buffer);
515
636
  yp_serialize_node(parser, (yp_node_t *)((yp_constant_write_node_t *)node)->value, buffer);
516
637
  yp_serialize_location(parser, &((yp_constant_write_node_t *)node)->operator_loc, buffer);
517
638
  break;
518
639
  }
519
- case YP_NODE_DEF_NODE: {
640
+ case YP_DEF_NODE: {
520
641
  // serialize length
521
642
  // encoding of location u32s make us need to save this offset.
522
643
  size_t length_offset = buffer->length;
523
644
  yp_buffer_append_str(buffer, "\0\0\0\0", 4); /* consume 4 bytes, updated below */
645
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_def_node_t *)node)->name));
524
646
  yp_serialize_location(parser, &((yp_def_node_t *)node)->name_loc, buffer);
525
647
  if (((yp_def_node_t *)node)->receiver == NULL) {
526
648
  yp_buffer_append_u8(buffer, 0);
@@ -578,7 +700,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
578
700
  memcpy(buffer->value + length_offset, &length, sizeof(uint32_t));
579
701
  break;
580
702
  }
581
- case YP_NODE_DEFINED_NODE: {
703
+ case YP_DEFINED_NODE: {
582
704
  if (((yp_defined_node_t *)node)->lparen_loc.start == NULL) {
583
705
  yp_buffer_append_u8(buffer, 0);
584
706
  } else {
@@ -595,7 +717,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
595
717
  yp_serialize_location(parser, &((yp_defined_node_t *)node)->keyword_loc, buffer);
596
718
  break;
597
719
  }
598
- case YP_NODE_ELSE_NODE: {
720
+ case YP_ELSE_NODE: {
599
721
  yp_serialize_location(parser, &((yp_else_node_t *)node)->else_keyword_loc, buffer);
600
722
  if (((yp_else_node_t *)node)->statements == NULL) {
601
723
  yp_buffer_append_u8(buffer, 0);
@@ -610,7 +732,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
610
732
  }
611
733
  break;
612
734
  }
613
- case YP_NODE_EMBEDDED_STATEMENTS_NODE: {
735
+ case YP_EMBEDDED_STATEMENTS_NODE: {
614
736
  yp_serialize_location(parser, &((yp_embedded_statements_node_t *)node)->opening_loc, buffer);
615
737
  if (((yp_embedded_statements_node_t *)node)->statements == NULL) {
616
738
  yp_buffer_append_u8(buffer, 0);
@@ -620,12 +742,12 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
620
742
  yp_serialize_location(parser, &((yp_embedded_statements_node_t *)node)->closing_loc, buffer);
621
743
  break;
622
744
  }
623
- case YP_NODE_EMBEDDED_VARIABLE_NODE: {
745
+ case YP_EMBEDDED_VARIABLE_NODE: {
624
746
  yp_serialize_location(parser, &((yp_embedded_variable_node_t *)node)->operator_loc, buffer);
625
747
  yp_serialize_node(parser, (yp_node_t *)((yp_embedded_variable_node_t *)node)->variable, buffer);
626
748
  break;
627
749
  }
628
- case YP_NODE_ENSURE_NODE: {
750
+ case YP_ENSURE_NODE: {
629
751
  yp_serialize_location(parser, &((yp_ensure_node_t *)node)->ensure_keyword_loc, buffer);
630
752
  if (((yp_ensure_node_t *)node)->statements == NULL) {
631
753
  yp_buffer_append_u8(buffer, 0);
@@ -635,10 +757,10 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
635
757
  yp_serialize_location(parser, &((yp_ensure_node_t *)node)->end_keyword_loc, buffer);
636
758
  break;
637
759
  }
638
- case YP_NODE_FALSE_NODE: {
760
+ case YP_FALSE_NODE: {
639
761
  break;
640
762
  }
641
- case YP_NODE_FIND_PATTERN_NODE: {
763
+ case YP_FIND_PATTERN_NODE: {
642
764
  if (((yp_find_pattern_node_t *)node)->constant == NULL) {
643
765
  yp_buffer_append_u8(buffer, 0);
644
766
  } else {
@@ -665,7 +787,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
665
787
  }
666
788
  break;
667
789
  }
668
- case YP_NODE_FLIP_FLOP_NODE: {
790
+ case YP_FLIP_FLOP_NODE: {
669
791
  if (((yp_flip_flop_node_t *)node)->left == NULL) {
670
792
  yp_buffer_append_u8(buffer, 0);
671
793
  } else {
@@ -680,10 +802,10 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
680
802
  yp_buffer_append_u32(buffer, node->flags >> 1);
681
803
  break;
682
804
  }
683
- case YP_NODE_FLOAT_NODE: {
805
+ case YP_FLOAT_NODE: {
684
806
  break;
685
807
  }
686
- case YP_NODE_FOR_NODE: {
808
+ case YP_FOR_NODE: {
687
809
  yp_serialize_node(parser, (yp_node_t *)((yp_for_node_t *)node)->index, buffer);
688
810
  yp_serialize_node(parser, (yp_node_t *)((yp_for_node_t *)node)->collection, buffer);
689
811
  if (((yp_for_node_t *)node)->statements == NULL) {
@@ -702,13 +824,13 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
702
824
  yp_serialize_location(parser, &((yp_for_node_t *)node)->end_keyword_loc, buffer);
703
825
  break;
704
826
  }
705
- case YP_NODE_FORWARDING_ARGUMENTS_NODE: {
827
+ case YP_FORWARDING_ARGUMENTS_NODE: {
706
828
  break;
707
829
  }
708
- case YP_NODE_FORWARDING_PARAMETER_NODE: {
830
+ case YP_FORWARDING_PARAMETER_NODE: {
709
831
  break;
710
832
  }
711
- case YP_NODE_FORWARDING_SUPER_NODE: {
833
+ case YP_FORWARDING_SUPER_NODE: {
712
834
  if (((yp_forwarding_super_node_t *)node)->block == NULL) {
713
835
  yp_buffer_append_u8(buffer, 0);
714
836
  } else {
@@ -716,38 +838,44 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
716
838
  }
717
839
  break;
718
840
  }
719
- case YP_NODE_GLOBAL_VARIABLE_AND_WRITE_NODE: {
841
+ case YP_GLOBAL_VARIABLE_AND_WRITE_NODE: {
842
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_global_variable_and_write_node_t *)node)->name));
720
843
  yp_serialize_location(parser, &((yp_global_variable_and_write_node_t *)node)->name_loc, buffer);
721
844
  yp_serialize_location(parser, &((yp_global_variable_and_write_node_t *)node)->operator_loc, buffer);
722
845
  yp_serialize_node(parser, (yp_node_t *)((yp_global_variable_and_write_node_t *)node)->value, buffer);
723
846
  break;
724
847
  }
725
- case YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
848
+ case YP_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
849
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_global_variable_operator_write_node_t *)node)->name));
726
850
  yp_serialize_location(parser, &((yp_global_variable_operator_write_node_t *)node)->name_loc, buffer);
727
851
  yp_serialize_location(parser, &((yp_global_variable_operator_write_node_t *)node)->operator_loc, buffer);
728
852
  yp_serialize_node(parser, (yp_node_t *)((yp_global_variable_operator_write_node_t *)node)->value, buffer);
729
853
  yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_global_variable_operator_write_node_t *)node)->operator));
730
854
  break;
731
855
  }
732
- case YP_NODE_GLOBAL_VARIABLE_OR_WRITE_NODE: {
856
+ case YP_GLOBAL_VARIABLE_OR_WRITE_NODE: {
857
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_global_variable_or_write_node_t *)node)->name));
733
858
  yp_serialize_location(parser, &((yp_global_variable_or_write_node_t *)node)->name_loc, buffer);
734
859
  yp_serialize_location(parser, &((yp_global_variable_or_write_node_t *)node)->operator_loc, buffer);
735
860
  yp_serialize_node(parser, (yp_node_t *)((yp_global_variable_or_write_node_t *)node)->value, buffer);
736
861
  break;
737
862
  }
738
- case YP_NODE_GLOBAL_VARIABLE_READ_NODE: {
863
+ case YP_GLOBAL_VARIABLE_READ_NODE: {
864
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_global_variable_read_node_t *)node)->name));
739
865
  break;
740
866
  }
741
- case YP_NODE_GLOBAL_VARIABLE_TARGET_NODE: {
867
+ case YP_GLOBAL_VARIABLE_TARGET_NODE: {
868
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_global_variable_target_node_t *)node)->name));
742
869
  break;
743
870
  }
744
- case YP_NODE_GLOBAL_VARIABLE_WRITE_NODE: {
871
+ case YP_GLOBAL_VARIABLE_WRITE_NODE: {
872
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_global_variable_write_node_t *)node)->name));
745
873
  yp_serialize_location(parser, &((yp_global_variable_write_node_t *)node)->name_loc, buffer);
746
- yp_serialize_location(parser, &((yp_global_variable_write_node_t *)node)->operator_loc, buffer);
747
874
  yp_serialize_node(parser, (yp_node_t *)((yp_global_variable_write_node_t *)node)->value, buffer);
875
+ yp_serialize_location(parser, &((yp_global_variable_write_node_t *)node)->operator_loc, buffer);
748
876
  break;
749
877
  }
750
- case YP_NODE_HASH_NODE: {
878
+ case YP_HASH_NODE: {
751
879
  yp_serialize_location(parser, &((yp_hash_node_t *)node)->opening_loc, buffer);
752
880
  uint32_t elements_size = yp_sizet_to_u32(((yp_hash_node_t *)node)->elements.size);
753
881
  yp_buffer_append_u32(buffer, elements_size);
@@ -757,7 +885,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
757
885
  yp_serialize_location(parser, &((yp_hash_node_t *)node)->closing_loc, buffer);
758
886
  break;
759
887
  }
760
- case YP_NODE_HASH_PATTERN_NODE: {
888
+ case YP_HASH_PATTERN_NODE: {
761
889
  if (((yp_hash_pattern_node_t *)node)->constant == NULL) {
762
890
  yp_buffer_append_u8(buffer, 0);
763
891
  } else {
@@ -787,7 +915,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
787
915
  }
788
916
  break;
789
917
  }
790
- case YP_NODE_IF_NODE: {
918
+ case YP_IF_NODE: {
791
919
  if (((yp_if_node_t *)node)->if_keyword_loc.start == NULL) {
792
920
  yp_buffer_append_u8(buffer, 0);
793
921
  } else {
@@ -813,11 +941,11 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
813
941
  }
814
942
  break;
815
943
  }
816
- case YP_NODE_IMAGINARY_NODE: {
944
+ case YP_IMAGINARY_NODE: {
817
945
  yp_serialize_node(parser, (yp_node_t *)((yp_imaginary_node_t *)node)->numeric, buffer);
818
946
  break;
819
947
  }
820
- case YP_NODE_IN_NODE: {
948
+ case YP_IN_NODE: {
821
949
  yp_serialize_node(parser, (yp_node_t *)((yp_in_node_t *)node)->pattern, buffer);
822
950
  if (((yp_in_node_t *)node)->statements == NULL) {
823
951
  yp_buffer_append_u8(buffer, 0);
@@ -833,41 +961,47 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
833
961
  }
834
962
  break;
835
963
  }
836
- case YP_NODE_INSTANCE_VARIABLE_AND_WRITE_NODE: {
964
+ case YP_INSTANCE_VARIABLE_AND_WRITE_NODE: {
965
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_instance_variable_and_write_node_t *)node)->name));
837
966
  yp_serialize_location(parser, &((yp_instance_variable_and_write_node_t *)node)->name_loc, buffer);
838
967
  yp_serialize_location(parser, &((yp_instance_variable_and_write_node_t *)node)->operator_loc, buffer);
839
968
  yp_serialize_node(parser, (yp_node_t *)((yp_instance_variable_and_write_node_t *)node)->value, buffer);
840
969
  break;
841
970
  }
842
- case YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
971
+ case YP_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
972
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_instance_variable_operator_write_node_t *)node)->name));
843
973
  yp_serialize_location(parser, &((yp_instance_variable_operator_write_node_t *)node)->name_loc, buffer);
844
974
  yp_serialize_location(parser, &((yp_instance_variable_operator_write_node_t *)node)->operator_loc, buffer);
845
975
  yp_serialize_node(parser, (yp_node_t *)((yp_instance_variable_operator_write_node_t *)node)->value, buffer);
846
976
  yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_instance_variable_operator_write_node_t *)node)->operator));
847
977
  break;
848
978
  }
849
- case YP_NODE_INSTANCE_VARIABLE_OR_WRITE_NODE: {
979
+ case YP_INSTANCE_VARIABLE_OR_WRITE_NODE: {
980
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_instance_variable_or_write_node_t *)node)->name));
850
981
  yp_serialize_location(parser, &((yp_instance_variable_or_write_node_t *)node)->name_loc, buffer);
851
982
  yp_serialize_location(parser, &((yp_instance_variable_or_write_node_t *)node)->operator_loc, buffer);
852
983
  yp_serialize_node(parser, (yp_node_t *)((yp_instance_variable_or_write_node_t *)node)->value, buffer);
853
984
  break;
854
985
  }
855
- case YP_NODE_INSTANCE_VARIABLE_READ_NODE: {
986
+ case YP_INSTANCE_VARIABLE_READ_NODE: {
987
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_instance_variable_read_node_t *)node)->name));
856
988
  break;
857
989
  }
858
- case YP_NODE_INSTANCE_VARIABLE_TARGET_NODE: {
990
+ case YP_INSTANCE_VARIABLE_TARGET_NODE: {
991
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_instance_variable_target_node_t *)node)->name));
859
992
  break;
860
993
  }
861
- case YP_NODE_INSTANCE_VARIABLE_WRITE_NODE: {
994
+ case YP_INSTANCE_VARIABLE_WRITE_NODE: {
995
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_instance_variable_write_node_t *)node)->name));
862
996
  yp_serialize_location(parser, &((yp_instance_variable_write_node_t *)node)->name_loc, buffer);
863
997
  yp_serialize_node(parser, (yp_node_t *)((yp_instance_variable_write_node_t *)node)->value, buffer);
864
998
  yp_serialize_location(parser, &((yp_instance_variable_write_node_t *)node)->operator_loc, buffer);
865
999
  break;
866
1000
  }
867
- case YP_NODE_INTEGER_NODE: {
1001
+ case YP_INTEGER_NODE: {
868
1002
  break;
869
1003
  }
870
- case YP_NODE_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
1004
+ case YP_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
871
1005
  yp_serialize_location(parser, &((yp_interpolated_regular_expression_node_t *)node)->opening_loc, buffer);
872
1006
  uint32_t parts_size = yp_sizet_to_u32(((yp_interpolated_regular_expression_node_t *)node)->parts.size);
873
1007
  yp_buffer_append_u32(buffer, parts_size);
@@ -878,7 +1012,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
878
1012
  yp_buffer_append_u32(buffer, node->flags >> 1);
879
1013
  break;
880
1014
  }
881
- case YP_NODE_INTERPOLATED_STRING_NODE: {
1015
+ case YP_INTERPOLATED_STRING_NODE: {
882
1016
  if (((yp_interpolated_string_node_t *)node)->opening_loc.start == NULL) {
883
1017
  yp_buffer_append_u8(buffer, 0);
884
1018
  } else {
@@ -898,7 +1032,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
898
1032
  }
899
1033
  break;
900
1034
  }
901
- case YP_NODE_INTERPOLATED_SYMBOL_NODE: {
1035
+ case YP_INTERPOLATED_SYMBOL_NODE: {
902
1036
  if (((yp_interpolated_symbol_node_t *)node)->opening_loc.start == NULL) {
903
1037
  yp_buffer_append_u8(buffer, 0);
904
1038
  } else {
@@ -918,7 +1052,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
918
1052
  }
919
1053
  break;
920
1054
  }
921
- case YP_NODE_INTERPOLATED_X_STRING_NODE: {
1055
+ case YP_INTERPOLATED_X_STRING_NODE: {
922
1056
  yp_serialize_location(parser, &((yp_interpolated_x_string_node_t *)node)->opening_loc, buffer);
923
1057
  uint32_t parts_size = yp_sizet_to_u32(((yp_interpolated_x_string_node_t *)node)->parts.size);
924
1058
  yp_buffer_append_u32(buffer, parts_size);
@@ -928,7 +1062,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
928
1062
  yp_serialize_location(parser, &((yp_interpolated_x_string_node_t *)node)->closing_loc, buffer);
929
1063
  break;
930
1064
  }
931
- case YP_NODE_KEYWORD_HASH_NODE: {
1065
+ case YP_KEYWORD_HASH_NODE: {
932
1066
  uint32_t elements_size = yp_sizet_to_u32(((yp_keyword_hash_node_t *)node)->elements.size);
933
1067
  yp_buffer_append_u32(buffer, elements_size);
934
1068
  for (uint32_t index = 0; index < elements_size; index++) {
@@ -936,7 +1070,8 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
936
1070
  }
937
1071
  break;
938
1072
  }
939
- case YP_NODE_KEYWORD_PARAMETER_NODE: {
1073
+ case YP_KEYWORD_PARAMETER_NODE: {
1074
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_keyword_parameter_node_t *)node)->name));
940
1075
  yp_serialize_location(parser, &((yp_keyword_parameter_node_t *)node)->name_loc, buffer);
941
1076
  if (((yp_keyword_parameter_node_t *)node)->value == NULL) {
942
1077
  yp_buffer_append_u8(buffer, 0);
@@ -945,17 +1080,18 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
945
1080
  }
946
1081
  break;
947
1082
  }
948
- case YP_NODE_KEYWORD_REST_PARAMETER_NODE: {
949
- yp_serialize_location(parser, &((yp_keyword_rest_parameter_node_t *)node)->operator_loc, buffer);
1083
+ case YP_KEYWORD_REST_PARAMETER_NODE: {
1084
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_keyword_rest_parameter_node_t *)node)->name));
950
1085
  if (((yp_keyword_rest_parameter_node_t *)node)->name_loc.start == NULL) {
951
1086
  yp_buffer_append_u8(buffer, 0);
952
1087
  } else {
953
1088
  yp_buffer_append_u8(buffer, 1);
954
1089
  yp_serialize_location(parser, &((yp_keyword_rest_parameter_node_t *)node)->name_loc, buffer);
955
1090
  }
1091
+ yp_serialize_location(parser, &((yp_keyword_rest_parameter_node_t *)node)->operator_loc, buffer);
956
1092
  break;
957
1093
  }
958
- case YP_NODE_LAMBDA_NODE: {
1094
+ case YP_LAMBDA_NODE: {
959
1095
  uint32_t locals_size = yp_sizet_to_u32(((yp_lambda_node_t *)node)->locals.size);
960
1096
  yp_buffer_append_u32(buffer, locals_size);
961
1097
  for (uint32_t index = 0; index < locals_size; index++) {
@@ -976,65 +1112,65 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
976
1112
  }
977
1113
  break;
978
1114
  }
979
- case YP_NODE_LOCAL_VARIABLE_AND_WRITE_NODE: {
1115
+ case YP_LOCAL_VARIABLE_AND_WRITE_NODE: {
980
1116
  yp_serialize_location(parser, &((yp_local_variable_and_write_node_t *)node)->name_loc, buffer);
981
1117
  yp_serialize_location(parser, &((yp_local_variable_and_write_node_t *)node)->operator_loc, buffer);
982
1118
  yp_serialize_node(parser, (yp_node_t *)((yp_local_variable_and_write_node_t *)node)->value, buffer);
983
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_and_write_node_t *)node)->constant_id));
1119
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_and_write_node_t *)node)->name));
984
1120
  yp_buffer_append_u32(buffer, ((yp_local_variable_and_write_node_t *)node)->depth);
985
1121
  break;
986
1122
  }
987
- case YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
1123
+ case YP_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
988
1124
  yp_serialize_location(parser, &((yp_local_variable_operator_write_node_t *)node)->name_loc, buffer);
989
1125
  yp_serialize_location(parser, &((yp_local_variable_operator_write_node_t *)node)->operator_loc, buffer);
990
1126
  yp_serialize_node(parser, (yp_node_t *)((yp_local_variable_operator_write_node_t *)node)->value, buffer);
991
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_operator_write_node_t *)node)->constant_id));
992
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_operator_write_node_t *)node)->operator_id));
1127
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_operator_write_node_t *)node)->name));
1128
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_operator_write_node_t *)node)->operator));
993
1129
  yp_buffer_append_u32(buffer, ((yp_local_variable_operator_write_node_t *)node)->depth);
994
1130
  break;
995
1131
  }
996
- case YP_NODE_LOCAL_VARIABLE_OR_WRITE_NODE: {
1132
+ case YP_LOCAL_VARIABLE_OR_WRITE_NODE: {
997
1133
  yp_serialize_location(parser, &((yp_local_variable_or_write_node_t *)node)->name_loc, buffer);
998
1134
  yp_serialize_location(parser, &((yp_local_variable_or_write_node_t *)node)->operator_loc, buffer);
999
1135
  yp_serialize_node(parser, (yp_node_t *)((yp_local_variable_or_write_node_t *)node)->value, buffer);
1000
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_or_write_node_t *)node)->constant_id));
1136
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_or_write_node_t *)node)->name));
1001
1137
  yp_buffer_append_u32(buffer, ((yp_local_variable_or_write_node_t *)node)->depth);
1002
1138
  break;
1003
1139
  }
1004
- case YP_NODE_LOCAL_VARIABLE_READ_NODE: {
1005
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_read_node_t *)node)->constant_id));
1140
+ case YP_LOCAL_VARIABLE_READ_NODE: {
1141
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_read_node_t *)node)->name));
1006
1142
  yp_buffer_append_u32(buffer, ((yp_local_variable_read_node_t *)node)->depth);
1007
1143
  break;
1008
1144
  }
1009
- case YP_NODE_LOCAL_VARIABLE_TARGET_NODE: {
1010
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_target_node_t *)node)->constant_id));
1145
+ case YP_LOCAL_VARIABLE_TARGET_NODE: {
1146
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_target_node_t *)node)->name));
1011
1147
  yp_buffer_append_u32(buffer, ((yp_local_variable_target_node_t *)node)->depth);
1012
1148
  break;
1013
1149
  }
1014
- case YP_NODE_LOCAL_VARIABLE_WRITE_NODE: {
1015
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_write_node_t *)node)->constant_id));
1150
+ case YP_LOCAL_VARIABLE_WRITE_NODE: {
1151
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_local_variable_write_node_t *)node)->name));
1016
1152
  yp_buffer_append_u32(buffer, ((yp_local_variable_write_node_t *)node)->depth);
1017
- yp_serialize_node(parser, (yp_node_t *)((yp_local_variable_write_node_t *)node)->value, buffer);
1018
1153
  yp_serialize_location(parser, &((yp_local_variable_write_node_t *)node)->name_loc, buffer);
1154
+ yp_serialize_node(parser, (yp_node_t *)((yp_local_variable_write_node_t *)node)->value, buffer);
1019
1155
  yp_serialize_location(parser, &((yp_local_variable_write_node_t *)node)->operator_loc, buffer);
1020
1156
  break;
1021
1157
  }
1022
- case YP_NODE_MATCH_PREDICATE_NODE: {
1158
+ case YP_MATCH_PREDICATE_NODE: {
1023
1159
  yp_serialize_node(parser, (yp_node_t *)((yp_match_predicate_node_t *)node)->value, buffer);
1024
1160
  yp_serialize_node(parser, (yp_node_t *)((yp_match_predicate_node_t *)node)->pattern, buffer);
1025
1161
  yp_serialize_location(parser, &((yp_match_predicate_node_t *)node)->operator_loc, buffer);
1026
1162
  break;
1027
1163
  }
1028
- case YP_NODE_MATCH_REQUIRED_NODE: {
1164
+ case YP_MATCH_REQUIRED_NODE: {
1029
1165
  yp_serialize_node(parser, (yp_node_t *)((yp_match_required_node_t *)node)->value, buffer);
1030
1166
  yp_serialize_node(parser, (yp_node_t *)((yp_match_required_node_t *)node)->pattern, buffer);
1031
1167
  yp_serialize_location(parser, &((yp_match_required_node_t *)node)->operator_loc, buffer);
1032
1168
  break;
1033
1169
  }
1034
- case YP_NODE_MISSING_NODE: {
1170
+ case YP_MISSING_NODE: {
1035
1171
  break;
1036
1172
  }
1037
- case YP_NODE_MODULE_NODE: {
1173
+ case YP_MODULE_NODE: {
1038
1174
  uint32_t locals_size = yp_sizet_to_u32(((yp_module_node_t *)node)->locals.size);
1039
1175
  yp_buffer_append_u32(buffer, locals_size);
1040
1176
  for (uint32_t index = 0; index < locals_size; index++) {
@@ -1048,25 +1184,34 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1048
1184
  yp_serialize_node(parser, (yp_node_t *)((yp_module_node_t *)node)->body, buffer);
1049
1185
  }
1050
1186
  yp_serialize_location(parser, &((yp_module_node_t *)node)->end_keyword_loc, buffer);
1051
- yp_serialize_string(parser, &((yp_module_node_t *)node)->name, buffer);
1187
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_module_node_t *)node)->name));
1052
1188
  break;
1053
1189
  }
1054
- case YP_NODE_MULTI_WRITE_NODE: {
1055
- uint32_t targets_size = yp_sizet_to_u32(((yp_multi_write_node_t *)node)->targets.size);
1190
+ case YP_MULTI_TARGET_NODE: {
1191
+ uint32_t targets_size = yp_sizet_to_u32(((yp_multi_target_node_t *)node)->targets.size);
1056
1192
  yp_buffer_append_u32(buffer, targets_size);
1057
1193
  for (uint32_t index = 0; index < targets_size; index++) {
1058
- yp_serialize_node(parser, (yp_node_t *) ((yp_multi_write_node_t *)node)->targets.nodes[index], buffer);
1194
+ yp_serialize_node(parser, (yp_node_t *) ((yp_multi_target_node_t *)node)->targets.nodes[index], buffer);
1059
1195
  }
1060
- if (((yp_multi_write_node_t *)node)->operator_loc.start == NULL) {
1196
+ if (((yp_multi_target_node_t *)node)->lparen_loc.start == NULL) {
1061
1197
  yp_buffer_append_u8(buffer, 0);
1062
1198
  } else {
1063
1199
  yp_buffer_append_u8(buffer, 1);
1064
- yp_serialize_location(parser, &((yp_multi_write_node_t *)node)->operator_loc, buffer);
1200
+ yp_serialize_location(parser, &((yp_multi_target_node_t *)node)->lparen_loc, buffer);
1065
1201
  }
1066
- if (((yp_multi_write_node_t *)node)->value == NULL) {
1202
+ if (((yp_multi_target_node_t *)node)->rparen_loc.start == NULL) {
1067
1203
  yp_buffer_append_u8(buffer, 0);
1068
1204
  } else {
1069
- yp_serialize_node(parser, (yp_node_t *)((yp_multi_write_node_t *)node)->value, buffer);
1205
+ yp_buffer_append_u8(buffer, 1);
1206
+ yp_serialize_location(parser, &((yp_multi_target_node_t *)node)->rparen_loc, buffer);
1207
+ }
1208
+ break;
1209
+ }
1210
+ case YP_MULTI_WRITE_NODE: {
1211
+ uint32_t targets_size = yp_sizet_to_u32(((yp_multi_write_node_t *)node)->targets.size);
1212
+ yp_buffer_append_u32(buffer, targets_size);
1213
+ for (uint32_t index = 0; index < targets_size; index++) {
1214
+ yp_serialize_node(parser, (yp_node_t *) ((yp_multi_write_node_t *)node)->targets.nodes[index], buffer);
1070
1215
  }
1071
1216
  if (((yp_multi_write_node_t *)node)->lparen_loc.start == NULL) {
1072
1217
  yp_buffer_append_u8(buffer, 0);
@@ -1080,9 +1225,11 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1080
1225
  yp_buffer_append_u8(buffer, 1);
1081
1226
  yp_serialize_location(parser, &((yp_multi_write_node_t *)node)->rparen_loc, buffer);
1082
1227
  }
1228
+ yp_serialize_location(parser, &((yp_multi_write_node_t *)node)->operator_loc, buffer);
1229
+ yp_serialize_node(parser, (yp_node_t *)((yp_multi_write_node_t *)node)->value, buffer);
1083
1230
  break;
1084
1231
  }
1085
- case YP_NODE_NEXT_NODE: {
1232
+ case YP_NEXT_NODE: {
1086
1233
  if (((yp_next_node_t *)node)->arguments == NULL) {
1087
1234
  yp_buffer_append_u8(buffer, 0);
1088
1235
  } else {
@@ -1091,31 +1238,32 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1091
1238
  yp_serialize_location(parser, &((yp_next_node_t *)node)->keyword_loc, buffer);
1092
1239
  break;
1093
1240
  }
1094
- case YP_NODE_NIL_NODE: {
1241
+ case YP_NIL_NODE: {
1095
1242
  break;
1096
1243
  }
1097
- case YP_NODE_NO_KEYWORDS_PARAMETER_NODE: {
1244
+ case YP_NO_KEYWORDS_PARAMETER_NODE: {
1098
1245
  yp_serialize_location(parser, &((yp_no_keywords_parameter_node_t *)node)->operator_loc, buffer);
1099
1246
  yp_serialize_location(parser, &((yp_no_keywords_parameter_node_t *)node)->keyword_loc, buffer);
1100
1247
  break;
1101
1248
  }
1102
- case YP_NODE_NUMBERED_REFERENCE_READ_NODE: {
1249
+ case YP_NUMBERED_REFERENCE_READ_NODE: {
1250
+ yp_buffer_append_u32(buffer, ((yp_numbered_reference_read_node_t *)node)->number);
1103
1251
  break;
1104
1252
  }
1105
- case YP_NODE_OPTIONAL_PARAMETER_NODE: {
1106
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_optional_parameter_node_t *)node)->constant_id));
1253
+ case YP_OPTIONAL_PARAMETER_NODE: {
1254
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_optional_parameter_node_t *)node)->name));
1107
1255
  yp_serialize_location(parser, &((yp_optional_parameter_node_t *)node)->name_loc, buffer);
1108
1256
  yp_serialize_location(parser, &((yp_optional_parameter_node_t *)node)->operator_loc, buffer);
1109
1257
  yp_serialize_node(parser, (yp_node_t *)((yp_optional_parameter_node_t *)node)->value, buffer);
1110
1258
  break;
1111
1259
  }
1112
- case YP_NODE_OR_NODE: {
1260
+ case YP_OR_NODE: {
1113
1261
  yp_serialize_node(parser, (yp_node_t *)((yp_or_node_t *)node)->left, buffer);
1114
1262
  yp_serialize_node(parser, (yp_node_t *)((yp_or_node_t *)node)->right, buffer);
1115
1263
  yp_serialize_location(parser, &((yp_or_node_t *)node)->operator_loc, buffer);
1116
1264
  break;
1117
1265
  }
1118
- case YP_NODE_PARAMETERS_NODE: {
1266
+ case YP_PARAMETERS_NODE: {
1119
1267
  uint32_t requireds_size = yp_sizet_to_u32(((yp_parameters_node_t *)node)->requireds.size);
1120
1268
  yp_buffer_append_u32(buffer, requireds_size);
1121
1269
  for (uint32_t index = 0; index < requireds_size; index++) {
@@ -1153,7 +1301,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1153
1301
  }
1154
1302
  break;
1155
1303
  }
1156
- case YP_NODE_PARENTHESES_NODE: {
1304
+ case YP_PARENTHESES_NODE: {
1157
1305
  if (((yp_parentheses_node_t *)node)->body == NULL) {
1158
1306
  yp_buffer_append_u8(buffer, 0);
1159
1307
  } else {
@@ -1163,19 +1311,19 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1163
1311
  yp_serialize_location(parser, &((yp_parentheses_node_t *)node)->closing_loc, buffer);
1164
1312
  break;
1165
1313
  }
1166
- case YP_NODE_PINNED_EXPRESSION_NODE: {
1314
+ case YP_PINNED_EXPRESSION_NODE: {
1167
1315
  yp_serialize_node(parser, (yp_node_t *)((yp_pinned_expression_node_t *)node)->expression, buffer);
1168
1316
  yp_serialize_location(parser, &((yp_pinned_expression_node_t *)node)->operator_loc, buffer);
1169
1317
  yp_serialize_location(parser, &((yp_pinned_expression_node_t *)node)->lparen_loc, buffer);
1170
1318
  yp_serialize_location(parser, &((yp_pinned_expression_node_t *)node)->rparen_loc, buffer);
1171
1319
  break;
1172
1320
  }
1173
- case YP_NODE_PINNED_VARIABLE_NODE: {
1321
+ case YP_PINNED_VARIABLE_NODE: {
1174
1322
  yp_serialize_node(parser, (yp_node_t *)((yp_pinned_variable_node_t *)node)->variable, buffer);
1175
1323
  yp_serialize_location(parser, &((yp_pinned_variable_node_t *)node)->operator_loc, buffer);
1176
1324
  break;
1177
1325
  }
1178
- case YP_NODE_POST_EXECUTION_NODE: {
1326
+ case YP_POST_EXECUTION_NODE: {
1179
1327
  if (((yp_post_execution_node_t *)node)->statements == NULL) {
1180
1328
  yp_buffer_append_u8(buffer, 0);
1181
1329
  } else {
@@ -1186,7 +1334,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1186
1334
  yp_serialize_location(parser, &((yp_post_execution_node_t *)node)->closing_loc, buffer);
1187
1335
  break;
1188
1336
  }
1189
- case YP_NODE_PRE_EXECUTION_NODE: {
1337
+ case YP_PRE_EXECUTION_NODE: {
1190
1338
  if (((yp_pre_execution_node_t *)node)->statements == NULL) {
1191
1339
  yp_buffer_append_u8(buffer, 0);
1192
1340
  } else {
@@ -1197,7 +1345,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1197
1345
  yp_serialize_location(parser, &((yp_pre_execution_node_t *)node)->closing_loc, buffer);
1198
1346
  break;
1199
1347
  }
1200
- case YP_NODE_PROGRAM_NODE: {
1348
+ case YP_PROGRAM_NODE: {
1201
1349
  uint32_t locals_size = yp_sizet_to_u32(((yp_program_node_t *)node)->locals.size);
1202
1350
  yp_buffer_append_u32(buffer, locals_size);
1203
1351
  for (uint32_t index = 0; index < locals_size; index++) {
@@ -1206,7 +1354,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1206
1354
  yp_serialize_node(parser, (yp_node_t *)((yp_program_node_t *)node)->statements, buffer);
1207
1355
  break;
1208
1356
  }
1209
- case YP_NODE_RANGE_NODE: {
1357
+ case YP_RANGE_NODE: {
1210
1358
  if (((yp_range_node_t *)node)->left == NULL) {
1211
1359
  yp_buffer_append_u8(buffer, 0);
1212
1360
  } else {
@@ -1221,14 +1369,14 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1221
1369
  yp_buffer_append_u32(buffer, node->flags >> 1);
1222
1370
  break;
1223
1371
  }
1224
- case YP_NODE_RATIONAL_NODE: {
1372
+ case YP_RATIONAL_NODE: {
1225
1373
  yp_serialize_node(parser, (yp_node_t *)((yp_rational_node_t *)node)->numeric, buffer);
1226
1374
  break;
1227
1375
  }
1228
- case YP_NODE_REDO_NODE: {
1376
+ case YP_REDO_NODE: {
1229
1377
  break;
1230
1378
  }
1231
- case YP_NODE_REGULAR_EXPRESSION_NODE: {
1379
+ case YP_REGULAR_EXPRESSION_NODE: {
1232
1380
  yp_serialize_location(parser, &((yp_regular_expression_node_t *)node)->opening_loc, buffer);
1233
1381
  yp_serialize_location(parser, &((yp_regular_expression_node_t *)node)->content_loc, buffer);
1234
1382
  yp_serialize_location(parser, &((yp_regular_expression_node_t *)node)->closing_loc, buffer);
@@ -1236,7 +1384,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1236
1384
  yp_buffer_append_u32(buffer, node->flags >> 1);
1237
1385
  break;
1238
1386
  }
1239
- case YP_NODE_REQUIRED_DESTRUCTURED_PARAMETER_NODE: {
1387
+ case YP_REQUIRED_DESTRUCTURED_PARAMETER_NODE: {
1240
1388
  uint32_t parameters_size = yp_sizet_to_u32(((yp_required_destructured_parameter_node_t *)node)->parameters.size);
1241
1389
  yp_buffer_append_u32(buffer, parameters_size);
1242
1390
  for (uint32_t index = 0; index < parameters_size; index++) {
@@ -1246,17 +1394,17 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1246
1394
  yp_serialize_location(parser, &((yp_required_destructured_parameter_node_t *)node)->closing_loc, buffer);
1247
1395
  break;
1248
1396
  }
1249
- case YP_NODE_REQUIRED_PARAMETER_NODE: {
1250
- yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_required_parameter_node_t *)node)->constant_id));
1397
+ case YP_REQUIRED_PARAMETER_NODE: {
1398
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_required_parameter_node_t *)node)->name));
1251
1399
  break;
1252
1400
  }
1253
- case YP_NODE_RESCUE_MODIFIER_NODE: {
1401
+ case YP_RESCUE_MODIFIER_NODE: {
1254
1402
  yp_serialize_node(parser, (yp_node_t *)((yp_rescue_modifier_node_t *)node)->expression, buffer);
1255
1403
  yp_serialize_location(parser, &((yp_rescue_modifier_node_t *)node)->keyword_loc, buffer);
1256
1404
  yp_serialize_node(parser, (yp_node_t *)((yp_rescue_modifier_node_t *)node)->rescue_expression, buffer);
1257
1405
  break;
1258
1406
  }
1259
- case YP_NODE_RESCUE_NODE: {
1407
+ case YP_RESCUE_NODE: {
1260
1408
  yp_serialize_location(parser, &((yp_rescue_node_t *)node)->keyword_loc, buffer);
1261
1409
  uint32_t exceptions_size = yp_sizet_to_u32(((yp_rescue_node_t *)node)->exceptions.size);
1262
1410
  yp_buffer_append_u32(buffer, exceptions_size);
@@ -1286,20 +1434,21 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1286
1434
  }
1287
1435
  break;
1288
1436
  }
1289
- case YP_NODE_REST_PARAMETER_NODE: {
1290
- yp_serialize_location(parser, &((yp_rest_parameter_node_t *)node)->operator_loc, buffer);
1437
+ case YP_REST_PARAMETER_NODE: {
1438
+ yp_buffer_append_u32(buffer, yp_sizet_to_u32(((yp_rest_parameter_node_t *)node)->name));
1291
1439
  if (((yp_rest_parameter_node_t *)node)->name_loc.start == NULL) {
1292
1440
  yp_buffer_append_u8(buffer, 0);
1293
1441
  } else {
1294
1442
  yp_buffer_append_u8(buffer, 1);
1295
1443
  yp_serialize_location(parser, &((yp_rest_parameter_node_t *)node)->name_loc, buffer);
1296
1444
  }
1445
+ yp_serialize_location(parser, &((yp_rest_parameter_node_t *)node)->operator_loc, buffer);
1297
1446
  break;
1298
1447
  }
1299
- case YP_NODE_RETRY_NODE: {
1448
+ case YP_RETRY_NODE: {
1300
1449
  break;
1301
1450
  }
1302
- case YP_NODE_RETURN_NODE: {
1451
+ case YP_RETURN_NODE: {
1303
1452
  yp_serialize_location(parser, &((yp_return_node_t *)node)->keyword_loc, buffer);
1304
1453
  if (((yp_return_node_t *)node)->arguments == NULL) {
1305
1454
  yp_buffer_append_u8(buffer, 0);
@@ -1308,10 +1457,10 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1308
1457
  }
1309
1458
  break;
1310
1459
  }
1311
- case YP_NODE_SELF_NODE: {
1460
+ case YP_SELF_NODE: {
1312
1461
  break;
1313
1462
  }
1314
- case YP_NODE_SINGLETON_CLASS_NODE: {
1463
+ case YP_SINGLETON_CLASS_NODE: {
1315
1464
  uint32_t locals_size = yp_sizet_to_u32(((yp_singleton_class_node_t *)node)->locals.size);
1316
1465
  yp_buffer_append_u32(buffer, locals_size);
1317
1466
  for (uint32_t index = 0; index < locals_size; index++) {
@@ -1328,17 +1477,17 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1328
1477
  yp_serialize_location(parser, &((yp_singleton_class_node_t *)node)->end_keyword_loc, buffer);
1329
1478
  break;
1330
1479
  }
1331
- case YP_NODE_SOURCE_ENCODING_NODE: {
1480
+ case YP_SOURCE_ENCODING_NODE: {
1332
1481
  break;
1333
1482
  }
1334
- case YP_NODE_SOURCE_FILE_NODE: {
1483
+ case YP_SOURCE_FILE_NODE: {
1335
1484
  yp_serialize_string(parser, &((yp_source_file_node_t *)node)->filepath, buffer);
1336
1485
  break;
1337
1486
  }
1338
- case YP_NODE_SOURCE_LINE_NODE: {
1487
+ case YP_SOURCE_LINE_NODE: {
1339
1488
  break;
1340
1489
  }
1341
- case YP_NODE_SPLAT_NODE: {
1490
+ case YP_SPLAT_NODE: {
1342
1491
  yp_serialize_location(parser, &((yp_splat_node_t *)node)->operator_loc, buffer);
1343
1492
  if (((yp_splat_node_t *)node)->expression == NULL) {
1344
1493
  yp_buffer_append_u8(buffer, 0);
@@ -1347,7 +1496,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1347
1496
  }
1348
1497
  break;
1349
1498
  }
1350
- case YP_NODE_STATEMENTS_NODE: {
1499
+ case YP_STATEMENTS_NODE: {
1351
1500
  uint32_t body_size = yp_sizet_to_u32(((yp_statements_node_t *)node)->body.size);
1352
1501
  yp_buffer_append_u32(buffer, body_size);
1353
1502
  for (uint32_t index = 0; index < body_size; index++) {
@@ -1355,12 +1504,12 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1355
1504
  }
1356
1505
  break;
1357
1506
  }
1358
- case YP_NODE_STRING_CONCAT_NODE: {
1507
+ case YP_STRING_CONCAT_NODE: {
1359
1508
  yp_serialize_node(parser, (yp_node_t *)((yp_string_concat_node_t *)node)->left, buffer);
1360
1509
  yp_serialize_node(parser, (yp_node_t *)((yp_string_concat_node_t *)node)->right, buffer);
1361
1510
  break;
1362
1511
  }
1363
- case YP_NODE_STRING_NODE: {
1512
+ case YP_STRING_NODE: {
1364
1513
  if (((yp_string_node_t *)node)->opening_loc.start == NULL) {
1365
1514
  yp_buffer_append_u8(buffer, 0);
1366
1515
  } else {
@@ -1377,7 +1526,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1377
1526
  yp_serialize_string(parser, &((yp_string_node_t *)node)->unescaped, buffer);
1378
1527
  break;
1379
1528
  }
1380
- case YP_NODE_SUPER_NODE: {
1529
+ case YP_SUPER_NODE: {
1381
1530
  yp_serialize_location(parser, &((yp_super_node_t *)node)->keyword_loc, buffer);
1382
1531
  if (((yp_super_node_t *)node)->lparen_loc.start == NULL) {
1383
1532
  yp_buffer_append_u8(buffer, 0);
@@ -1403,7 +1552,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1403
1552
  }
1404
1553
  break;
1405
1554
  }
1406
- case YP_NODE_SYMBOL_NODE: {
1555
+ case YP_SYMBOL_NODE: {
1407
1556
  if (((yp_symbol_node_t *)node)->opening_loc.start == NULL) {
1408
1557
  yp_buffer_append_u8(buffer, 0);
1409
1558
  } else {
@@ -1425,10 +1574,10 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1425
1574
  yp_serialize_string(parser, &((yp_symbol_node_t *)node)->unescaped, buffer);
1426
1575
  break;
1427
1576
  }
1428
- case YP_NODE_TRUE_NODE: {
1577
+ case YP_TRUE_NODE: {
1429
1578
  break;
1430
1579
  }
1431
- case YP_NODE_UNDEF_NODE: {
1580
+ case YP_UNDEF_NODE: {
1432
1581
  uint32_t names_size = yp_sizet_to_u32(((yp_undef_node_t *)node)->names.size);
1433
1582
  yp_buffer_append_u32(buffer, names_size);
1434
1583
  for (uint32_t index = 0; index < names_size; index++) {
@@ -1437,7 +1586,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1437
1586
  yp_serialize_location(parser, &((yp_undef_node_t *)node)->keyword_loc, buffer);
1438
1587
  break;
1439
1588
  }
1440
- case YP_NODE_UNLESS_NODE: {
1589
+ case YP_UNLESS_NODE: {
1441
1590
  yp_serialize_location(parser, &((yp_unless_node_t *)node)->keyword_loc, buffer);
1442
1591
  yp_serialize_node(parser, (yp_node_t *)((yp_unless_node_t *)node)->predicate, buffer);
1443
1592
  if (((yp_unless_node_t *)node)->statements == NULL) {
@@ -1458,7 +1607,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1458
1607
  }
1459
1608
  break;
1460
1609
  }
1461
- case YP_NODE_UNTIL_NODE: {
1610
+ case YP_UNTIL_NODE: {
1462
1611
  yp_serialize_location(parser, &((yp_until_node_t *)node)->keyword_loc, buffer);
1463
1612
  if (((yp_until_node_t *)node)->closing_loc.start == NULL) {
1464
1613
  yp_buffer_append_u8(buffer, 0);
@@ -1475,7 +1624,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1475
1624
  yp_buffer_append_u32(buffer, node->flags >> 1);
1476
1625
  break;
1477
1626
  }
1478
- case YP_NODE_WHEN_NODE: {
1627
+ case YP_WHEN_NODE: {
1479
1628
  yp_serialize_location(parser, &((yp_when_node_t *)node)->keyword_loc, buffer);
1480
1629
  uint32_t conditions_size = yp_sizet_to_u32(((yp_when_node_t *)node)->conditions.size);
1481
1630
  yp_buffer_append_u32(buffer, conditions_size);
@@ -1489,7 +1638,7 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1489
1638
  }
1490
1639
  break;
1491
1640
  }
1492
- case YP_NODE_WHILE_NODE: {
1641
+ case YP_WHILE_NODE: {
1493
1642
  yp_serialize_location(parser, &((yp_while_node_t *)node)->keyword_loc, buffer);
1494
1643
  if (((yp_while_node_t *)node)->closing_loc.start == NULL) {
1495
1644
  yp_buffer_append_u8(buffer, 0);
@@ -1506,14 +1655,14 @@ yp_serialize_node(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1506
1655
  yp_buffer_append_u32(buffer, node->flags >> 1);
1507
1656
  break;
1508
1657
  }
1509
- case YP_NODE_X_STRING_NODE: {
1658
+ case YP_X_STRING_NODE: {
1510
1659
  yp_serialize_location(parser, &((yp_x_string_node_t *)node)->opening_loc, buffer);
1511
1660
  yp_serialize_location(parser, &((yp_x_string_node_t *)node)->content_loc, buffer);
1512
1661
  yp_serialize_location(parser, &((yp_x_string_node_t *)node)->closing_loc, buffer);
1513
1662
  yp_serialize_string(parser, &((yp_x_string_node_t *)node)->unescaped, buffer);
1514
1663
  break;
1515
1664
  }
1516
- case YP_NODE_YIELD_NODE: {
1665
+ case YP_YIELD_NODE: {
1517
1666
  yp_serialize_location(parser, &((yp_yield_node_t *)node)->keyword_loc, buffer);
1518
1667
  if (((yp_yield_node_t *)node)->lparen_loc.start == NULL) {
1519
1668
  yp_buffer_append_u8(buffer, 0);
@@ -1586,7 +1735,7 @@ yp_serialize_encoding(yp_encoding_t *encoding, yp_buffer_t *buffer) {
1586
1735
  yp_buffer_append_str(buffer, encoding->name, encoding_length);
1587
1736
  }
1588
1737
 
1589
- #line 181 "serialize.c.erb"
1738
+ #line 175 "serialize.c.erb"
1590
1739
  void
1591
1740
  yp_serialize_content(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer) {
1592
1741
  yp_serialize_encoding(&parser->encoding, buffer);
@@ -1621,12 +1770,31 @@ yp_serialize_content(yp_parser_t *parser, yp_node_t *node, yp_buffer_t *buffer)
1621
1770
  // If we find a constant at this index, serialize it at the correct
1622
1771
  // index in the buffer.
1623
1772
  if (constant->id != 0) {
1624
- size_t buffer_offset = offset + ((constant->id - 1) * 8);
1773
+ size_t buffer_offset = offset + ((((size_t) constant->id) - 1) * 8);
1625
1774
 
1626
- uint32_t source_offset = yp_ptrdifft_to_u32(constant->start - parser->start);
1627
- uint32_t constant_length = yp_sizet_to_u32(constant->length);
1775
+ if (constant->owned) {
1776
+ // Since this is an owned constant, we are going to write its
1777
+ // contents into the buffer after the constant pool. So
1778
+ // effectively in place of the source offset, we have a buffer
1779
+ // offset. We will add a leading 1 to indicate that this is a
1780
+ // buffer offset.
1781
+ uint32_t content_offset = yp_sizet_to_u32(buffer->length);
1782
+ uint32_t owned_mask = (uint32_t) (1 << 31);
1783
+
1784
+ assert(content_offset < owned_mask);
1785
+ content_offset |= owned_mask;
1786
+
1787
+ memcpy(buffer->value + buffer_offset, &content_offset, 4);
1788
+ yp_buffer_append_bytes(buffer, constant->start, constant->length);
1789
+ } else {
1790
+ // Since this is a shared constant, we are going to write its
1791
+ // source offset directly into the buffer.
1792
+ uint32_t source_offset = yp_ptrdifft_to_u32(constant->start - parser->start);
1793
+ memcpy(buffer->value + buffer_offset, &source_offset, 4);
1794
+ }
1628
1795
 
1629
- memcpy(buffer->value + buffer_offset, &source_offset, 4);
1796
+ // Now we can write the length of the constant into the buffer.
1797
+ uint32_t constant_length = yp_sizet_to_u32(constant->length);
1630
1798
  memcpy(buffer->value + buffer_offset + 4, &constant_length, 4);
1631
1799
  }
1632
1800
  }
@@ -1643,7 +1811,7 @@ serialize_token(void *data, yp_parser_t *parser, yp_token_t *token) {
1643
1811
  }
1644
1812
 
1645
1813
  YP_EXPORTED_FUNCTION void
1646
- yp_lex_serialize(const char *source, size_t size, const char *filepath, yp_buffer_t *buffer) {
1814
+ yp_lex_serialize(const uint8_t *source, size_t size, const char *filepath, yp_buffer_t *buffer) {
1647
1815
  yp_parser_t parser;
1648
1816
  yp_parser_init(&parser, source, size, filepath);
1649
1817
 
@@ -1670,7 +1838,7 @@ yp_lex_serialize(const char *source, size_t size, const char *filepath, yp_buffe
1670
1838
  // Parse and serialize both the AST and the tokens represented by the given
1671
1839
  // source to the given buffer.
1672
1840
  YP_EXPORTED_FUNCTION void
1673
- yp_parse_lex_serialize(const char *source, size_t size, yp_buffer_t *buffer, const char *metadata) {
1841
+ yp_parse_lex_serialize(const uint8_t *source, size_t size, yp_buffer_t *buffer, const char *metadata) {
1674
1842
  yp_parser_t parser;
1675
1843
  yp_parser_init(&parser, source, size, NULL);
1676
1844
  if (metadata) yp_parser_metadata(&parser, metadata);