prism 0.13.0 → 0.15.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.
@@ -39,9 +39,21 @@ size_t pm_constant_id_list_memsize(pm_constant_id_list_t *list);
39
39
  // Free the memory associated with a list of constant ids.
40
40
  void pm_constant_id_list_free(pm_constant_id_list_t *list);
41
41
 
42
+ // Constant pool buckets can have a couple of different types.
43
+ typedef unsigned int pm_constant_pool_bucket_type_t;
44
+
45
+ // By default, each constant is a slice of the source.
46
+ static const pm_constant_pool_bucket_type_t PM_CONSTANT_POOL_BUCKET_DEFAULT = 0;
47
+
48
+ // An owned constant is one for which memory has been allocated.
49
+ static const pm_constant_pool_bucket_type_t PM_CONSTANT_POOL_BUCKET_OWNED = 1;
50
+
51
+ // A constant constant is known at compile time.
52
+ static const pm_constant_pool_bucket_type_t PM_CONSTANT_POOL_BUCKET_CONSTANT = 2;
53
+
42
54
  typedef struct {
43
- unsigned int id: 31;
44
- bool owned: 1;
55
+ unsigned int id: 30;
56
+ pm_constant_pool_bucket_type_t type: 2;
45
57
  uint32_t hash;
46
58
  } pm_constant_pool_bucket_t;
47
59
 
@@ -63,6 +75,9 @@ typedef struct {
63
75
  // Initialize a new constant pool with a given capacity.
64
76
  bool pm_constant_pool_init(pm_constant_pool_t *pool, uint32_t capacity);
65
77
 
78
+ // Return a pointer to the constant indicated by the given constant id.
79
+ pm_constant_t * pm_constant_pool_id_to_constant(pm_constant_pool_t *pool, pm_constant_id_t constant_id);
80
+
66
81
  // Insert a constant into a constant pool that is a slice of a source string.
67
82
  // Returns the id of the constant, or 0 if any potential calls to resize fail.
68
83
  pm_constant_id_t pm_constant_pool_insert_shared(pm_constant_pool_t *pool, const uint8_t *start, size_t length);
@@ -72,6 +87,10 @@ pm_constant_id_t pm_constant_pool_insert_shared(pm_constant_pool_t *pool, const
72
87
  // resize fail.
73
88
  pm_constant_id_t pm_constant_pool_insert_owned(pm_constant_pool_t *pool, const uint8_t *start, size_t length);
74
89
 
90
+ // Insert a constant into a constant pool from memory that is constant. Returns
91
+ // the id of the constant, or 0 if any potential calls to resize fail.
92
+ pm_constant_id_t pm_constant_pool_insert_constant(pm_constant_pool_t *pool, const uint8_t *start, size_t length);
93
+
75
94
  // Free the memory associated with a constant pool.
76
95
  void pm_constant_pool_free(pm_constant_pool_t *pool);
77
96
 
@@ -11,9 +11,10 @@
11
11
 
12
12
  // This struct represents a string value.
13
13
  typedef struct {
14
- enum { PM_STRING_SHARED, PM_STRING_OWNED, PM_STRING_CONSTANT, PM_STRING_MAPPED } type;
15
14
  const uint8_t *source;
16
15
  size_t length;
16
+ // This field is not the first one, because otherwise things like .pm_string_t_field = 123/pm_constant_id_t does not warn or error
17
+ enum { PM_STRING_SHARED, PM_STRING_OWNED, PM_STRING_CONSTANT, PM_STRING_MAPPED } type;
17
18
  } pm_string_t;
18
19
 
19
20
  #define PM_EMPTY_STRING ((pm_string_t) { .type = PM_STRING_CONSTANT, .source = NULL, .length = 0 })
@@ -1,4 +1,4 @@
1
1
  #define PRISM_VERSION_MAJOR 0
2
- #define PRISM_VERSION_MINOR 13
2
+ #define PRISM_VERSION_MINOR 15
3
3
  #define PRISM_VERSION_PATCH 0
4
- #define PRISM_VERSION "0.13.0"
4
+ #define PRISM_VERSION "0.15.0"
data/include/prism.h CHANGED
@@ -8,7 +8,6 @@
8
8
  #include "prism/pack.h"
9
9
  #include "prism/parser.h"
10
10
  #include "prism/regexp.h"
11
- #include "prism/unescape.h"
12
11
  #include "prism/util/pm_buffer.h"
13
12
  #include "prism/util/pm_char.h"
14
13
  #include "prism/util/pm_memchr.h"
@@ -35,7 +34,7 @@ void pm_print_node(pm_parser_t *parser, pm_node_t *node);
35
34
  void pm_parser_metadata(pm_parser_t *parser, const char *metadata);
36
35
 
37
36
  // Generate a scope node from the given node.
38
- void pm_scope_node_init(pm_node_t *node, pm_scope_node_t *dest);
37
+ void pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous, pm_parser_t *parser);
39
38
 
40
39
  // The prism version and the serialization format.
41
40
  PRISM_EXPORTED_FUNCTION const char * pm_version(void);
@@ -39,426 +39,435 @@ module Prism
39
39
  node.compact_child_nodes.map { |node| node.accept(self) }
40
40
  end
41
41
 
42
- # Compile a AliasGlobalVariableNode node
42
+ # Compile a AliasGlobalVariableNode node
43
43
  alias visit_alias_global_variable_node visit_child_nodes
44
-
44
+
45
45
  # Compile a AliasMethodNode node
46
46
  alias visit_alias_method_node visit_child_nodes
47
-
47
+
48
48
  # Compile a AlternationPatternNode node
49
49
  alias visit_alternation_pattern_node visit_child_nodes
50
-
50
+
51
51
  # Compile a AndNode node
52
52
  alias visit_and_node visit_child_nodes
53
-
53
+
54
54
  # Compile a ArgumentsNode node
55
55
  alias visit_arguments_node visit_child_nodes
56
-
56
+
57
57
  # Compile a ArrayNode node
58
58
  alias visit_array_node visit_child_nodes
59
-
59
+
60
60
  # Compile a ArrayPatternNode node
61
61
  alias visit_array_pattern_node visit_child_nodes
62
-
62
+
63
63
  # Compile a AssocNode node
64
64
  alias visit_assoc_node visit_child_nodes
65
-
65
+
66
66
  # Compile a AssocSplatNode node
67
67
  alias visit_assoc_splat_node visit_child_nodes
68
-
68
+
69
69
  # Compile a BackReferenceReadNode node
70
70
  alias visit_back_reference_read_node visit_child_nodes
71
-
71
+
72
72
  # Compile a BeginNode node
73
73
  alias visit_begin_node visit_child_nodes
74
-
74
+
75
75
  # Compile a BlockArgumentNode node
76
76
  alias visit_block_argument_node visit_child_nodes
77
-
77
+
78
78
  # Compile a BlockLocalVariableNode node
79
79
  alias visit_block_local_variable_node visit_child_nodes
80
-
80
+
81
81
  # Compile a BlockNode node
82
82
  alias visit_block_node visit_child_nodes
83
-
83
+
84
84
  # Compile a BlockParameterNode node
85
85
  alias visit_block_parameter_node visit_child_nodes
86
-
86
+
87
87
  # Compile a BlockParametersNode node
88
88
  alias visit_block_parameters_node visit_child_nodes
89
-
89
+
90
90
  # Compile a BreakNode node
91
91
  alias visit_break_node visit_child_nodes
92
-
92
+
93
93
  # Compile a CallAndWriteNode node
94
94
  alias visit_call_and_write_node visit_child_nodes
95
-
95
+
96
96
  # Compile a CallNode node
97
97
  alias visit_call_node visit_child_nodes
98
-
98
+
99
99
  # Compile a CallOperatorWriteNode node
100
100
  alias visit_call_operator_write_node visit_child_nodes
101
-
101
+
102
102
  # Compile a CallOrWriteNode node
103
103
  alias visit_call_or_write_node visit_child_nodes
104
-
104
+
105
105
  # Compile a CapturePatternNode node
106
106
  alias visit_capture_pattern_node visit_child_nodes
107
-
107
+
108
108
  # Compile a CaseNode node
109
109
  alias visit_case_node visit_child_nodes
110
-
110
+
111
111
  # Compile a ClassNode node
112
112
  alias visit_class_node visit_child_nodes
113
-
113
+
114
114
  # Compile a ClassVariableAndWriteNode node
115
115
  alias visit_class_variable_and_write_node visit_child_nodes
116
-
116
+
117
117
  # Compile a ClassVariableOperatorWriteNode node
118
118
  alias visit_class_variable_operator_write_node visit_child_nodes
119
-
119
+
120
120
  # Compile a ClassVariableOrWriteNode node
121
121
  alias visit_class_variable_or_write_node visit_child_nodes
122
-
122
+
123
123
  # Compile a ClassVariableReadNode node
124
124
  alias visit_class_variable_read_node visit_child_nodes
125
-
125
+
126
126
  # Compile a ClassVariableTargetNode node
127
127
  alias visit_class_variable_target_node visit_child_nodes
128
-
128
+
129
129
  # Compile a ClassVariableWriteNode node
130
130
  alias visit_class_variable_write_node visit_child_nodes
131
-
131
+
132
132
  # Compile a ConstantAndWriteNode node
133
133
  alias visit_constant_and_write_node visit_child_nodes
134
-
134
+
135
135
  # Compile a ConstantOperatorWriteNode node
136
136
  alias visit_constant_operator_write_node visit_child_nodes
137
-
137
+
138
138
  # Compile a ConstantOrWriteNode node
139
139
  alias visit_constant_or_write_node visit_child_nodes
140
-
140
+
141
141
  # Compile a ConstantPathAndWriteNode node
142
142
  alias visit_constant_path_and_write_node visit_child_nodes
143
-
143
+
144
144
  # Compile a ConstantPathNode node
145
145
  alias visit_constant_path_node visit_child_nodes
146
-
146
+
147
147
  # Compile a ConstantPathOperatorWriteNode node
148
148
  alias visit_constant_path_operator_write_node visit_child_nodes
149
-
149
+
150
150
  # Compile a ConstantPathOrWriteNode node
151
151
  alias visit_constant_path_or_write_node visit_child_nodes
152
-
152
+
153
153
  # Compile a ConstantPathTargetNode node
154
154
  alias visit_constant_path_target_node visit_child_nodes
155
-
155
+
156
156
  # Compile a ConstantPathWriteNode node
157
157
  alias visit_constant_path_write_node visit_child_nodes
158
-
158
+
159
159
  # Compile a ConstantReadNode node
160
160
  alias visit_constant_read_node visit_child_nodes
161
-
161
+
162
162
  # Compile a ConstantTargetNode node
163
163
  alias visit_constant_target_node visit_child_nodes
164
-
164
+
165
165
  # Compile a ConstantWriteNode node
166
166
  alias visit_constant_write_node visit_child_nodes
167
-
167
+
168
168
  # Compile a DefNode node
169
169
  alias visit_def_node visit_child_nodes
170
-
170
+
171
171
  # Compile a DefinedNode node
172
172
  alias visit_defined_node visit_child_nodes
173
-
173
+
174
174
  # Compile a ElseNode node
175
175
  alias visit_else_node visit_child_nodes
176
-
176
+
177
177
  # Compile a EmbeddedStatementsNode node
178
178
  alias visit_embedded_statements_node visit_child_nodes
179
-
179
+
180
180
  # Compile a EmbeddedVariableNode node
181
181
  alias visit_embedded_variable_node visit_child_nodes
182
-
182
+
183
183
  # Compile a EnsureNode node
184
184
  alias visit_ensure_node visit_child_nodes
185
-
185
+
186
186
  # Compile a FalseNode node
187
187
  alias visit_false_node visit_child_nodes
188
-
188
+
189
189
  # Compile a FindPatternNode node
190
190
  alias visit_find_pattern_node visit_child_nodes
191
-
191
+
192
192
  # Compile a FlipFlopNode node
193
193
  alias visit_flip_flop_node visit_child_nodes
194
-
194
+
195
195
  # Compile a FloatNode node
196
196
  alias visit_float_node visit_child_nodes
197
-
197
+
198
198
  # Compile a ForNode node
199
199
  alias visit_for_node visit_child_nodes
200
-
200
+
201
201
  # Compile a ForwardingArgumentsNode node
202
202
  alias visit_forwarding_arguments_node visit_child_nodes
203
-
203
+
204
204
  # Compile a ForwardingParameterNode node
205
205
  alias visit_forwarding_parameter_node visit_child_nodes
206
-
206
+
207
207
  # Compile a ForwardingSuperNode node
208
208
  alias visit_forwarding_super_node visit_child_nodes
209
-
209
+
210
210
  # Compile a GlobalVariableAndWriteNode node
211
211
  alias visit_global_variable_and_write_node visit_child_nodes
212
-
212
+
213
213
  # Compile a GlobalVariableOperatorWriteNode node
214
214
  alias visit_global_variable_operator_write_node visit_child_nodes
215
-
215
+
216
216
  # Compile a GlobalVariableOrWriteNode node
217
217
  alias visit_global_variable_or_write_node visit_child_nodes
218
-
218
+
219
219
  # Compile a GlobalVariableReadNode node
220
220
  alias visit_global_variable_read_node visit_child_nodes
221
-
221
+
222
222
  # Compile a GlobalVariableTargetNode node
223
223
  alias visit_global_variable_target_node visit_child_nodes
224
-
224
+
225
225
  # Compile a GlobalVariableWriteNode node
226
226
  alias visit_global_variable_write_node visit_child_nodes
227
-
227
+
228
228
  # Compile a HashNode node
229
229
  alias visit_hash_node visit_child_nodes
230
-
230
+
231
231
  # Compile a HashPatternNode node
232
232
  alias visit_hash_pattern_node visit_child_nodes
233
-
233
+
234
234
  # Compile a IfNode node
235
235
  alias visit_if_node visit_child_nodes
236
-
236
+
237
237
  # Compile a ImaginaryNode node
238
238
  alias visit_imaginary_node visit_child_nodes
239
-
239
+
240
240
  # Compile a ImplicitNode node
241
241
  alias visit_implicit_node visit_child_nodes
242
-
242
+
243
243
  # Compile a InNode node
244
244
  alias visit_in_node visit_child_nodes
245
-
245
+
246
+ # Compile a IndexAndWriteNode node
247
+ alias visit_index_and_write_node visit_child_nodes
248
+
249
+ # Compile a IndexOperatorWriteNode node
250
+ alias visit_index_operator_write_node visit_child_nodes
251
+
252
+ # Compile a IndexOrWriteNode node
253
+ alias visit_index_or_write_node visit_child_nodes
254
+
246
255
  # Compile a InstanceVariableAndWriteNode node
247
256
  alias visit_instance_variable_and_write_node visit_child_nodes
248
-
257
+
249
258
  # Compile a InstanceVariableOperatorWriteNode node
250
259
  alias visit_instance_variable_operator_write_node visit_child_nodes
251
-
260
+
252
261
  # Compile a InstanceVariableOrWriteNode node
253
262
  alias visit_instance_variable_or_write_node visit_child_nodes
254
-
263
+
255
264
  # Compile a InstanceVariableReadNode node
256
265
  alias visit_instance_variable_read_node visit_child_nodes
257
-
266
+
258
267
  # Compile a InstanceVariableTargetNode node
259
268
  alias visit_instance_variable_target_node visit_child_nodes
260
-
269
+
261
270
  # Compile a InstanceVariableWriteNode node
262
271
  alias visit_instance_variable_write_node visit_child_nodes
263
-
272
+
264
273
  # Compile a IntegerNode node
265
274
  alias visit_integer_node visit_child_nodes
266
-
275
+
267
276
  # Compile a InterpolatedMatchLastLineNode node
268
277
  alias visit_interpolated_match_last_line_node visit_child_nodes
269
-
278
+
270
279
  # Compile a InterpolatedRegularExpressionNode node
271
280
  alias visit_interpolated_regular_expression_node visit_child_nodes
272
-
281
+
273
282
  # Compile a InterpolatedStringNode node
274
283
  alias visit_interpolated_string_node visit_child_nodes
275
-
284
+
276
285
  # Compile a InterpolatedSymbolNode node
277
286
  alias visit_interpolated_symbol_node visit_child_nodes
278
-
287
+
279
288
  # Compile a InterpolatedXStringNode node
280
289
  alias visit_interpolated_x_string_node visit_child_nodes
281
-
290
+
282
291
  # Compile a KeywordHashNode node
283
292
  alias visit_keyword_hash_node visit_child_nodes
284
-
293
+
285
294
  # Compile a KeywordParameterNode node
286
295
  alias visit_keyword_parameter_node visit_child_nodes
287
-
296
+
288
297
  # Compile a KeywordRestParameterNode node
289
298
  alias visit_keyword_rest_parameter_node visit_child_nodes
290
-
299
+
291
300
  # Compile a LambdaNode node
292
301
  alias visit_lambda_node visit_child_nodes
293
-
302
+
294
303
  # Compile a LocalVariableAndWriteNode node
295
304
  alias visit_local_variable_and_write_node visit_child_nodes
296
-
305
+
297
306
  # Compile a LocalVariableOperatorWriteNode node
298
307
  alias visit_local_variable_operator_write_node visit_child_nodes
299
-
308
+
300
309
  # Compile a LocalVariableOrWriteNode node
301
310
  alias visit_local_variable_or_write_node visit_child_nodes
302
-
311
+
303
312
  # Compile a LocalVariableReadNode node
304
313
  alias visit_local_variable_read_node visit_child_nodes
305
-
314
+
306
315
  # Compile a LocalVariableTargetNode node
307
316
  alias visit_local_variable_target_node visit_child_nodes
308
-
317
+
309
318
  # Compile a LocalVariableWriteNode node
310
319
  alias visit_local_variable_write_node visit_child_nodes
311
-
320
+
312
321
  # Compile a MatchLastLineNode node
313
322
  alias visit_match_last_line_node visit_child_nodes
314
-
323
+
315
324
  # Compile a MatchPredicateNode node
316
325
  alias visit_match_predicate_node visit_child_nodes
317
-
326
+
318
327
  # Compile a MatchRequiredNode node
319
328
  alias visit_match_required_node visit_child_nodes
320
-
329
+
321
330
  # Compile a MatchWriteNode node
322
331
  alias visit_match_write_node visit_child_nodes
323
-
332
+
324
333
  # Compile a MissingNode node
325
334
  alias visit_missing_node visit_child_nodes
326
-
335
+
327
336
  # Compile a ModuleNode node
328
337
  alias visit_module_node visit_child_nodes
329
-
338
+
330
339
  # Compile a MultiTargetNode node
331
340
  alias visit_multi_target_node visit_child_nodes
332
-
341
+
333
342
  # Compile a MultiWriteNode node
334
343
  alias visit_multi_write_node visit_child_nodes
335
-
344
+
336
345
  # Compile a NextNode node
337
346
  alias visit_next_node visit_child_nodes
338
-
347
+
339
348
  # Compile a NilNode node
340
349
  alias visit_nil_node visit_child_nodes
341
-
350
+
342
351
  # Compile a NoKeywordsParameterNode node
343
352
  alias visit_no_keywords_parameter_node visit_child_nodes
344
-
353
+
345
354
  # Compile a NumberedReferenceReadNode node
346
355
  alias visit_numbered_reference_read_node visit_child_nodes
347
-
356
+
348
357
  # Compile a OptionalParameterNode node
349
358
  alias visit_optional_parameter_node visit_child_nodes
350
-
359
+
351
360
  # Compile a OrNode node
352
361
  alias visit_or_node visit_child_nodes
353
-
362
+
354
363
  # Compile a ParametersNode node
355
364
  alias visit_parameters_node visit_child_nodes
356
-
365
+
357
366
  # Compile a ParenthesesNode node
358
367
  alias visit_parentheses_node visit_child_nodes
359
-
368
+
360
369
  # Compile a PinnedExpressionNode node
361
370
  alias visit_pinned_expression_node visit_child_nodes
362
-
371
+
363
372
  # Compile a PinnedVariableNode node
364
373
  alias visit_pinned_variable_node visit_child_nodes
365
-
374
+
366
375
  # Compile a PostExecutionNode node
367
376
  alias visit_post_execution_node visit_child_nodes
368
-
377
+
369
378
  # Compile a PreExecutionNode node
370
379
  alias visit_pre_execution_node visit_child_nodes
371
-
380
+
372
381
  # Compile a ProgramNode node
373
382
  alias visit_program_node visit_child_nodes
374
-
383
+
375
384
  # Compile a RangeNode node
376
385
  alias visit_range_node visit_child_nodes
377
-
386
+
378
387
  # Compile a RationalNode node
379
388
  alias visit_rational_node visit_child_nodes
380
-
389
+
381
390
  # Compile a RedoNode node
382
391
  alias visit_redo_node visit_child_nodes
383
-
392
+
384
393
  # Compile a RegularExpressionNode node
385
394
  alias visit_regular_expression_node visit_child_nodes
386
-
395
+
387
396
  # Compile a RequiredDestructuredParameterNode node
388
397
  alias visit_required_destructured_parameter_node visit_child_nodes
389
-
398
+
390
399
  # Compile a RequiredParameterNode node
391
400
  alias visit_required_parameter_node visit_child_nodes
392
-
401
+
393
402
  # Compile a RescueModifierNode node
394
403
  alias visit_rescue_modifier_node visit_child_nodes
395
-
404
+
396
405
  # Compile a RescueNode node
397
406
  alias visit_rescue_node visit_child_nodes
398
-
407
+
399
408
  # Compile a RestParameterNode node
400
409
  alias visit_rest_parameter_node visit_child_nodes
401
-
410
+
402
411
  # Compile a RetryNode node
403
412
  alias visit_retry_node visit_child_nodes
404
-
413
+
405
414
  # Compile a ReturnNode node
406
415
  alias visit_return_node visit_child_nodes
407
-
416
+
408
417
  # Compile a SelfNode node
409
418
  alias visit_self_node visit_child_nodes
410
-
419
+
411
420
  # Compile a SingletonClassNode node
412
421
  alias visit_singleton_class_node visit_child_nodes
413
-
422
+
414
423
  # Compile a SourceEncodingNode node
415
424
  alias visit_source_encoding_node visit_child_nodes
416
-
425
+
417
426
  # Compile a SourceFileNode node
418
427
  alias visit_source_file_node visit_child_nodes
419
-
428
+
420
429
  # Compile a SourceLineNode node
421
430
  alias visit_source_line_node visit_child_nodes
422
-
431
+
423
432
  # Compile a SplatNode node
424
433
  alias visit_splat_node visit_child_nodes
425
-
434
+
426
435
  # Compile a StatementsNode node
427
436
  alias visit_statements_node visit_child_nodes
428
-
437
+
429
438
  # Compile a StringConcatNode node
430
439
  alias visit_string_concat_node visit_child_nodes
431
-
440
+
432
441
  # Compile a StringNode node
433
442
  alias visit_string_node visit_child_nodes
434
-
443
+
435
444
  # Compile a SuperNode node
436
445
  alias visit_super_node visit_child_nodes
437
-
446
+
438
447
  # Compile a SymbolNode node
439
448
  alias visit_symbol_node visit_child_nodes
440
-
449
+
441
450
  # Compile a TrueNode node
442
451
  alias visit_true_node visit_child_nodes
443
-
452
+
444
453
  # Compile a UndefNode node
445
454
  alias visit_undef_node visit_child_nodes
446
-
455
+
447
456
  # Compile a UnlessNode node
448
457
  alias visit_unless_node visit_child_nodes
449
-
458
+
450
459
  # Compile a UntilNode node
451
460
  alias visit_until_node visit_child_nodes
452
-
461
+
453
462
  # Compile a WhenNode node
454
463
  alias visit_when_node visit_child_nodes
455
-
464
+
456
465
  # Compile a WhileNode node
457
466
  alias visit_while_node visit_child_nodes
458
-
467
+
459
468
  # Compile a XStringNode node
460
469
  alias visit_x_string_node visit_child_nodes
461
-
470
+
462
471
  # Compile a YieldNode node
463
472
  alias visit_yield_node visit_child_nodes
464
473
  end