yarp 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/CODE_OF_CONDUCT.md +76 -0
  3. data/CONTRIBUTING.md +51 -0
  4. data/LICENSE.md +7 -0
  5. data/Makefile.in +79 -0
  6. data/README.md +86 -0
  7. data/config.h.in +25 -0
  8. data/config.yml +2147 -0
  9. data/configure +4487 -0
  10. data/docs/build_system.md +85 -0
  11. data/docs/building.md +26 -0
  12. data/docs/configuration.md +56 -0
  13. data/docs/design.md +53 -0
  14. data/docs/encoding.md +116 -0
  15. data/docs/extension.md +20 -0
  16. data/docs/fuzzing.md +93 -0
  17. data/docs/heredocs.md +36 -0
  18. data/docs/mapping.md +117 -0
  19. data/docs/ripper.md +36 -0
  20. data/docs/serialization.md +130 -0
  21. data/docs/testing.md +55 -0
  22. data/ext/yarp/api_node.c +3680 -0
  23. data/ext/yarp/api_pack.c +256 -0
  24. data/ext/yarp/extconf.rb +131 -0
  25. data/ext/yarp/extension.c +547 -0
  26. data/ext/yarp/extension.h +18 -0
  27. data/include/yarp/ast.h +1412 -0
  28. data/include/yarp/defines.h +54 -0
  29. data/include/yarp/diagnostic.h +24 -0
  30. data/include/yarp/enc/yp_encoding.h +94 -0
  31. data/include/yarp/node.h +36 -0
  32. data/include/yarp/pack.h +141 -0
  33. data/include/yarp/parser.h +389 -0
  34. data/include/yarp/regexp.h +19 -0
  35. data/include/yarp/unescape.h +42 -0
  36. data/include/yarp/util/yp_buffer.h +39 -0
  37. data/include/yarp/util/yp_char.h +75 -0
  38. data/include/yarp/util/yp_constant_pool.h +64 -0
  39. data/include/yarp/util/yp_list.h +67 -0
  40. data/include/yarp/util/yp_memchr.h +14 -0
  41. data/include/yarp/util/yp_newline_list.h +54 -0
  42. data/include/yarp/util/yp_state_stack.h +24 -0
  43. data/include/yarp/util/yp_string.h +57 -0
  44. data/include/yarp/util/yp_string_list.h +28 -0
  45. data/include/yarp/util/yp_strpbrk.h +29 -0
  46. data/include/yarp/version.h +5 -0
  47. data/include/yarp.h +69 -0
  48. data/lib/yarp/lex_compat.rb +759 -0
  49. data/lib/yarp/node.rb +7428 -0
  50. data/lib/yarp/pack.rb +185 -0
  51. data/lib/yarp/ripper_compat.rb +174 -0
  52. data/lib/yarp/serialize.rb +389 -0
  53. data/lib/yarp.rb +330 -0
  54. data/src/diagnostic.c +25 -0
  55. data/src/enc/yp_big5.c +79 -0
  56. data/src/enc/yp_euc_jp.c +85 -0
  57. data/src/enc/yp_gbk.c +88 -0
  58. data/src/enc/yp_shift_jis.c +83 -0
  59. data/src/enc/yp_tables.c +509 -0
  60. data/src/enc/yp_unicode.c +2320 -0
  61. data/src/enc/yp_windows_31j.c +83 -0
  62. data/src/node.c +2011 -0
  63. data/src/pack.c +493 -0
  64. data/src/prettyprint.c +1782 -0
  65. data/src/regexp.c +580 -0
  66. data/src/serialize.c +1576 -0
  67. data/src/token_type.c +347 -0
  68. data/src/unescape.c +576 -0
  69. data/src/util/yp_buffer.c +78 -0
  70. data/src/util/yp_char.c +229 -0
  71. data/src/util/yp_constant_pool.c +147 -0
  72. data/src/util/yp_list.c +50 -0
  73. data/src/util/yp_memchr.c +31 -0
  74. data/src/util/yp_newline_list.c +119 -0
  75. data/src/util/yp_state_stack.c +25 -0
  76. data/src/util/yp_string.c +207 -0
  77. data/src/util/yp_string_list.c +32 -0
  78. data/src/util/yp_strncasecmp.c +20 -0
  79. data/src/util/yp_strpbrk.c +66 -0
  80. data/src/yarp.c +13211 -0
  81. data/yarp.gemspec +100 -0
  82. metadata +125 -0
@@ -0,0 +1,1412 @@
1
+ /******************************************************************************/
2
+ /* This file is generated by the bin/template script and should not be */
3
+ /* modified manually. See */
4
+ /* templates/include/yarp/ast.h.erb */
5
+ /* if you are looking to modify the */
6
+ /* template */
7
+ /******************************************************************************/
8
+ #ifndef YARP_AST_H
9
+ #define YARP_AST_H
10
+
11
+ #include "yarp/defines.h"
12
+ #include "yarp/util/yp_constant_pool.h"
13
+ #include "yarp/util/yp_string.h"
14
+
15
+ #include <assert.h>
16
+ #include <stddef.h>
17
+ #include <stdint.h>
18
+
19
+ // This enum represents every type of token in the Ruby source.
20
+ typedef enum yp_token_type {
21
+ YP_TOKEN_EOF = 1, // final token in the file
22
+ YP_TOKEN_MISSING, // a token that was expected but not found
23
+ YP_TOKEN_NOT_PROVIDED, // a token that was not present but it is okay
24
+ YP_TOKEN_AMPERSAND, // &
25
+ YP_TOKEN_AMPERSAND_AMPERSAND, // &&
26
+ YP_TOKEN_AMPERSAND_AMPERSAND_EQUAL, // &&=
27
+ YP_TOKEN_AMPERSAND_DOT, // &.
28
+ YP_TOKEN_AMPERSAND_EQUAL, // &=
29
+ YP_TOKEN_BACKTICK, // `
30
+ YP_TOKEN_BACK_REFERENCE, // a back reference
31
+ YP_TOKEN_BANG, // ! or !@
32
+ YP_TOKEN_BANG_EQUAL, // !=
33
+ YP_TOKEN_BANG_TILDE, // !~
34
+ YP_TOKEN_BRACE_LEFT, // {
35
+ YP_TOKEN_BRACE_RIGHT, // }
36
+ YP_TOKEN_BRACKET_LEFT, // [
37
+ YP_TOKEN_BRACKET_LEFT_ARRAY, // [ for the beginning of an array
38
+ YP_TOKEN_BRACKET_LEFT_RIGHT, // []
39
+ YP_TOKEN_BRACKET_LEFT_RIGHT_EQUAL, // []=
40
+ YP_TOKEN_BRACKET_RIGHT, // ]
41
+ YP_TOKEN_CARET, // ^
42
+ YP_TOKEN_CARET_EQUAL, // ^=
43
+ YP_TOKEN_CHARACTER_LITERAL, // a character literal
44
+ YP_TOKEN_CLASS_VARIABLE, // a class variable
45
+ YP_TOKEN_COLON, // :
46
+ YP_TOKEN_COLON_COLON, // ::
47
+ YP_TOKEN_COMMA, // ,
48
+ YP_TOKEN_COMMENT, // a comment
49
+ YP_TOKEN_CONSTANT, // a constant
50
+ YP_TOKEN_DOT, // .
51
+ YP_TOKEN_DOT_DOT, // ..
52
+ YP_TOKEN_DOT_DOT_DOT, // ...
53
+ YP_TOKEN_EMBDOC_BEGIN, // =begin
54
+ YP_TOKEN_EMBDOC_END, // =end
55
+ YP_TOKEN_EMBDOC_LINE, // a line inside of embedded documentation
56
+ YP_TOKEN_EMBEXPR_BEGIN, // #{
57
+ YP_TOKEN_EMBEXPR_END, // }
58
+ YP_TOKEN_EMBVAR, // #
59
+ YP_TOKEN_EQUAL, // =
60
+ YP_TOKEN_EQUAL_EQUAL, // ==
61
+ YP_TOKEN_EQUAL_EQUAL_EQUAL, // ===
62
+ YP_TOKEN_EQUAL_GREATER, // =>
63
+ YP_TOKEN_EQUAL_TILDE, // =~
64
+ YP_TOKEN_FLOAT, // a floating point number
65
+ YP_TOKEN_FLOAT_IMAGINARY, // a floating pointer number with an imaginary suffix
66
+ YP_TOKEN_FLOAT_RATIONAL, // a floating pointer number with a rational suffix
67
+ YP_TOKEN_FLOAT_RATIONAL_IMAGINARY, // a floating pointer number with a rational and imaginary suffix
68
+ YP_TOKEN_GLOBAL_VARIABLE, // a global variable
69
+ YP_TOKEN_GREATER, // >
70
+ YP_TOKEN_GREATER_EQUAL, // >=
71
+ YP_TOKEN_GREATER_GREATER, // >>
72
+ YP_TOKEN_GREATER_GREATER_EQUAL, // >>=
73
+ YP_TOKEN_HEREDOC_END, // the end of a heredoc
74
+ YP_TOKEN_HEREDOC_START, // the start of a heredoc
75
+ YP_TOKEN_IDENTIFIER, // an identifier
76
+ YP_TOKEN_IGNORED_NEWLINE, // an ignored newline
77
+ YP_TOKEN_INSTANCE_VARIABLE, // an instance variable
78
+ YP_TOKEN_INTEGER, // an integer (any base)
79
+ YP_TOKEN_INTEGER_IMAGINARY, // an integer with an imaginary suffix
80
+ YP_TOKEN_INTEGER_RATIONAL, // an integer with a rational suffix
81
+ YP_TOKEN_INTEGER_RATIONAL_IMAGINARY, // an integer with a rational and imaginary suffix
82
+ YP_TOKEN_KEYWORD_ALIAS, // alias
83
+ YP_TOKEN_KEYWORD_AND, // and
84
+ YP_TOKEN_KEYWORD_BEGIN, // begin
85
+ YP_TOKEN_KEYWORD_BEGIN_UPCASE, // BEGIN
86
+ YP_TOKEN_KEYWORD_BREAK, // break
87
+ YP_TOKEN_KEYWORD_CASE, // case
88
+ YP_TOKEN_KEYWORD_CLASS, // class
89
+ YP_TOKEN_KEYWORD_DEF, // def
90
+ YP_TOKEN_KEYWORD_DEFINED, // defined?
91
+ YP_TOKEN_KEYWORD_DO, // do
92
+ YP_TOKEN_KEYWORD_DO_LOOP, // do keyword for a predicate in a while, until, or for loop
93
+ YP_TOKEN_KEYWORD_ELSE, // else
94
+ YP_TOKEN_KEYWORD_ELSIF, // elsif
95
+ YP_TOKEN_KEYWORD_END, // end
96
+ YP_TOKEN_KEYWORD_END_UPCASE, // END
97
+ YP_TOKEN_KEYWORD_ENSURE, // ensure
98
+ YP_TOKEN_KEYWORD_FALSE, // false
99
+ YP_TOKEN_KEYWORD_FOR, // for
100
+ YP_TOKEN_KEYWORD_IF, // if
101
+ YP_TOKEN_KEYWORD_IF_MODIFIER, // if in the modifier form
102
+ YP_TOKEN_KEYWORD_IN, // in
103
+ YP_TOKEN_KEYWORD_MODULE, // module
104
+ YP_TOKEN_KEYWORD_NEXT, // next
105
+ YP_TOKEN_KEYWORD_NIL, // nil
106
+ YP_TOKEN_KEYWORD_NOT, // not
107
+ YP_TOKEN_KEYWORD_OR, // or
108
+ YP_TOKEN_KEYWORD_REDO, // redo
109
+ YP_TOKEN_KEYWORD_RESCUE, // rescue
110
+ YP_TOKEN_KEYWORD_RESCUE_MODIFIER, // rescue in the modifier form
111
+ YP_TOKEN_KEYWORD_RETRY, // retry
112
+ YP_TOKEN_KEYWORD_RETURN, // return
113
+ YP_TOKEN_KEYWORD_SELF, // self
114
+ YP_TOKEN_KEYWORD_SUPER, // super
115
+ YP_TOKEN_KEYWORD_THEN, // then
116
+ YP_TOKEN_KEYWORD_TRUE, // true
117
+ YP_TOKEN_KEYWORD_UNDEF, // undef
118
+ YP_TOKEN_KEYWORD_UNLESS, // unless
119
+ YP_TOKEN_KEYWORD_UNLESS_MODIFIER, // unless in the modifier form
120
+ YP_TOKEN_KEYWORD_UNTIL, // until
121
+ YP_TOKEN_KEYWORD_UNTIL_MODIFIER, // until in the modifier form
122
+ YP_TOKEN_KEYWORD_WHEN, // when
123
+ YP_TOKEN_KEYWORD_WHILE, // while
124
+ YP_TOKEN_KEYWORD_WHILE_MODIFIER, // while in the modifier form
125
+ YP_TOKEN_KEYWORD_YIELD, // yield
126
+ YP_TOKEN_KEYWORD___ENCODING__, // __ENCODING__
127
+ YP_TOKEN_KEYWORD___FILE__, // __FILE__
128
+ YP_TOKEN_KEYWORD___LINE__, // __LINE__
129
+ YP_TOKEN_LABEL, // a label
130
+ YP_TOKEN_LABEL_END, // the end of a label
131
+ YP_TOKEN_LAMBDA_BEGIN, // {
132
+ YP_TOKEN_LESS, // <
133
+ YP_TOKEN_LESS_EQUAL, // <=
134
+ YP_TOKEN_LESS_EQUAL_GREATER, // <=>
135
+ YP_TOKEN_LESS_LESS, // <<
136
+ YP_TOKEN_LESS_LESS_EQUAL, // <<=
137
+ YP_TOKEN_MINUS, // -
138
+ YP_TOKEN_MINUS_EQUAL, // -=
139
+ YP_TOKEN_MINUS_GREATER, // ->
140
+ YP_TOKEN_NEWLINE, // a newline character outside of other tokens
141
+ YP_TOKEN_NUMBERED_REFERENCE, // a numbered reference to a capture group in the previous regular expression match
142
+ YP_TOKEN_PARENTHESIS_LEFT, // (
143
+ YP_TOKEN_PARENTHESIS_LEFT_PARENTHESES, // ( for a parentheses node
144
+ YP_TOKEN_PARENTHESIS_RIGHT, // )
145
+ YP_TOKEN_PERCENT, // %
146
+ YP_TOKEN_PERCENT_EQUAL, // %=
147
+ YP_TOKEN_PERCENT_LOWER_I, // %i
148
+ YP_TOKEN_PERCENT_LOWER_W, // %w
149
+ YP_TOKEN_PERCENT_LOWER_X, // %x
150
+ YP_TOKEN_PERCENT_UPPER_I, // %I
151
+ YP_TOKEN_PERCENT_UPPER_W, // %W
152
+ YP_TOKEN_PIPE, // |
153
+ YP_TOKEN_PIPE_EQUAL, // |=
154
+ YP_TOKEN_PIPE_PIPE, // ||
155
+ YP_TOKEN_PIPE_PIPE_EQUAL, // ||=
156
+ YP_TOKEN_PLUS, // +
157
+ YP_TOKEN_PLUS_EQUAL, // +=
158
+ YP_TOKEN_QUESTION_MARK, // ?
159
+ YP_TOKEN_REGEXP_BEGIN, // the beginning of a regular expression
160
+ YP_TOKEN_REGEXP_END, // the end of a regular expression
161
+ YP_TOKEN_SEMICOLON, // ;
162
+ YP_TOKEN_SLASH, // /
163
+ YP_TOKEN_SLASH_EQUAL, // /=
164
+ YP_TOKEN_STAR, // *
165
+ YP_TOKEN_STAR_EQUAL, // *=
166
+ YP_TOKEN_STAR_STAR, // **
167
+ YP_TOKEN_STAR_STAR_EQUAL, // **=
168
+ YP_TOKEN_STRING_BEGIN, // the beginning of a string
169
+ YP_TOKEN_STRING_CONTENT, // the contents of a string
170
+ YP_TOKEN_STRING_END, // the end of a string
171
+ YP_TOKEN_SYMBOL_BEGIN, // the beginning of a symbol
172
+ YP_TOKEN_TILDE, // ~ or ~@
173
+ YP_TOKEN_UAMPERSAND, // unary &
174
+ YP_TOKEN_UCOLON_COLON, // unary ::
175
+ YP_TOKEN_UDOT_DOT, // unary ..
176
+ YP_TOKEN_UDOT_DOT_DOT, // unary ...
177
+ YP_TOKEN_UMINUS, // -@
178
+ YP_TOKEN_UMINUS_NUM, // -@ for a number
179
+ YP_TOKEN_UPLUS, // +@
180
+ YP_TOKEN_USTAR, // unary *
181
+ YP_TOKEN_USTAR_STAR, // unary **
182
+ YP_TOKEN_WORDS_SEP, // a separator between words in a list
183
+ YP_TOKEN___END__, // marker for the point in the file at which the parser should stop
184
+ YP_TOKEN_MAXIMUM, // the maximum token value
185
+ } yp_token_type_t;
186
+
187
+ // This struct represents a token in the Ruby source. We use it to track both
188
+ // type and location information.
189
+ typedef struct {
190
+ yp_token_type_t type;
191
+ const char *start;
192
+ const char *end;
193
+ } yp_token_t;
194
+
195
+ // This represents a range of bytes in the source string to which a node or
196
+ // token corresponds.
197
+ typedef struct {
198
+ const char *start;
199
+ const char *end;
200
+ } yp_location_t;
201
+
202
+ typedef struct {
203
+ yp_location_t *locations;
204
+ size_t size;
205
+ size_t capacity;
206
+ } yp_location_list_t;
207
+
208
+ struct yp_node;
209
+
210
+ typedef struct yp_node_list {
211
+ struct yp_node **nodes;
212
+ size_t size;
213
+ size_t capacity;
214
+ } yp_node_list_t;
215
+
216
+ enum yp_node_type {
217
+ YP_NODE_ALIAS_NODE = 1,
218
+ YP_NODE_ALTERNATION_PATTERN_NODE = 2,
219
+ YP_NODE_AND_NODE = 3,
220
+ YP_NODE_ARGUMENTS_NODE = 4,
221
+ YP_NODE_ARRAY_NODE = 5,
222
+ YP_NODE_ARRAY_PATTERN_NODE = 6,
223
+ YP_NODE_ASSOC_NODE = 7,
224
+ YP_NODE_ASSOC_SPLAT_NODE = 8,
225
+ YP_NODE_BACK_REFERENCE_READ_NODE = 9,
226
+ YP_NODE_BEGIN_NODE = 10,
227
+ YP_NODE_BLOCK_ARGUMENT_NODE = 11,
228
+ YP_NODE_BLOCK_NODE = 12,
229
+ YP_NODE_BLOCK_PARAMETER_NODE = 13,
230
+ YP_NODE_BLOCK_PARAMETERS_NODE = 14,
231
+ YP_NODE_BREAK_NODE = 15,
232
+ YP_NODE_CALL_NODE = 16,
233
+ YP_NODE_CALL_OPERATOR_AND_WRITE_NODE = 17,
234
+ YP_NODE_CALL_OPERATOR_OR_WRITE_NODE = 18,
235
+ YP_NODE_CALL_OPERATOR_WRITE_NODE = 19,
236
+ YP_NODE_CAPTURE_PATTERN_NODE = 20,
237
+ YP_NODE_CASE_NODE = 21,
238
+ YP_NODE_CLASS_NODE = 22,
239
+ YP_NODE_CLASS_VARIABLE_OPERATOR_AND_WRITE_NODE = 23,
240
+ YP_NODE_CLASS_VARIABLE_OPERATOR_OR_WRITE_NODE = 24,
241
+ YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE = 25,
242
+ YP_NODE_CLASS_VARIABLE_READ_NODE = 26,
243
+ YP_NODE_CLASS_VARIABLE_WRITE_NODE = 27,
244
+ YP_NODE_CONSTANT_OPERATOR_AND_WRITE_NODE = 28,
245
+ YP_NODE_CONSTANT_OPERATOR_OR_WRITE_NODE = 29,
246
+ YP_NODE_CONSTANT_OPERATOR_WRITE_NODE = 30,
247
+ YP_NODE_CONSTANT_PATH_NODE = 31,
248
+ YP_NODE_CONSTANT_PATH_OPERATOR_AND_WRITE_NODE = 32,
249
+ YP_NODE_CONSTANT_PATH_OPERATOR_OR_WRITE_NODE = 33,
250
+ YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE = 34,
251
+ YP_NODE_CONSTANT_PATH_WRITE_NODE = 35,
252
+ YP_NODE_CONSTANT_READ_NODE = 36,
253
+ YP_NODE_CONSTANT_WRITE_NODE = 37,
254
+ YP_NODE_DEF_NODE = 38,
255
+ YP_NODE_DEFINED_NODE = 39,
256
+ YP_NODE_ELSE_NODE = 40,
257
+ YP_NODE_EMBEDDED_STATEMENTS_NODE = 41,
258
+ YP_NODE_EMBEDDED_VARIABLE_NODE = 42,
259
+ YP_NODE_ENSURE_NODE = 43,
260
+ YP_NODE_FALSE_NODE = 44,
261
+ YP_NODE_FIND_PATTERN_NODE = 45,
262
+ YP_NODE_FLOAT_NODE = 46,
263
+ YP_NODE_FOR_NODE = 47,
264
+ YP_NODE_FORWARDING_ARGUMENTS_NODE = 48,
265
+ YP_NODE_FORWARDING_PARAMETER_NODE = 49,
266
+ YP_NODE_FORWARDING_SUPER_NODE = 50,
267
+ YP_NODE_GLOBAL_VARIABLE_OPERATOR_AND_WRITE_NODE = 51,
268
+ YP_NODE_GLOBAL_VARIABLE_OPERATOR_OR_WRITE_NODE = 52,
269
+ YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE = 53,
270
+ YP_NODE_GLOBAL_VARIABLE_READ_NODE = 54,
271
+ YP_NODE_GLOBAL_VARIABLE_WRITE_NODE = 55,
272
+ YP_NODE_HASH_NODE = 56,
273
+ YP_NODE_HASH_PATTERN_NODE = 57,
274
+ YP_NODE_IF_NODE = 58,
275
+ YP_NODE_IMAGINARY_NODE = 59,
276
+ YP_NODE_IN_NODE = 60,
277
+ YP_NODE_INSTANCE_VARIABLE_OPERATOR_AND_WRITE_NODE = 61,
278
+ YP_NODE_INSTANCE_VARIABLE_OPERATOR_OR_WRITE_NODE = 62,
279
+ YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 63,
280
+ YP_NODE_INSTANCE_VARIABLE_READ_NODE = 64,
281
+ YP_NODE_INSTANCE_VARIABLE_WRITE_NODE = 65,
282
+ YP_NODE_INTEGER_NODE = 66,
283
+ YP_NODE_INTERPOLATED_REGULAR_EXPRESSION_NODE = 67,
284
+ YP_NODE_INTERPOLATED_STRING_NODE = 68,
285
+ YP_NODE_INTERPOLATED_SYMBOL_NODE = 69,
286
+ YP_NODE_INTERPOLATED_X_STRING_NODE = 70,
287
+ YP_NODE_KEYWORD_HASH_NODE = 71,
288
+ YP_NODE_KEYWORD_PARAMETER_NODE = 72,
289
+ YP_NODE_KEYWORD_REST_PARAMETER_NODE = 73,
290
+ YP_NODE_LAMBDA_NODE = 74,
291
+ YP_NODE_LOCAL_VARIABLE_OPERATOR_AND_WRITE_NODE = 75,
292
+ YP_NODE_LOCAL_VARIABLE_OPERATOR_OR_WRITE_NODE = 76,
293
+ YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 77,
294
+ YP_NODE_LOCAL_VARIABLE_READ_NODE = 78,
295
+ YP_NODE_LOCAL_VARIABLE_WRITE_NODE = 79,
296
+ YP_NODE_MATCH_PREDICATE_NODE = 80,
297
+ YP_NODE_MATCH_REQUIRED_NODE = 81,
298
+ YP_NODE_MISSING_NODE = 82,
299
+ YP_NODE_MODULE_NODE = 83,
300
+ YP_NODE_MULTI_WRITE_NODE = 84,
301
+ YP_NODE_NEXT_NODE = 85,
302
+ YP_NODE_NIL_NODE = 86,
303
+ YP_NODE_NO_KEYWORDS_PARAMETER_NODE = 87,
304
+ YP_NODE_NUMBERED_REFERENCE_READ_NODE = 88,
305
+ YP_NODE_OPTIONAL_PARAMETER_NODE = 89,
306
+ YP_NODE_OR_NODE = 90,
307
+ YP_NODE_PARAMETERS_NODE = 91,
308
+ YP_NODE_PARENTHESES_NODE = 92,
309
+ YP_NODE_PINNED_EXPRESSION_NODE = 93,
310
+ YP_NODE_PINNED_VARIABLE_NODE = 94,
311
+ YP_NODE_POST_EXECUTION_NODE = 95,
312
+ YP_NODE_PRE_EXECUTION_NODE = 96,
313
+ YP_NODE_PROGRAM_NODE = 97,
314
+ YP_NODE_RANGE_NODE = 98,
315
+ YP_NODE_RATIONAL_NODE = 99,
316
+ YP_NODE_REDO_NODE = 100,
317
+ YP_NODE_REGULAR_EXPRESSION_NODE = 101,
318
+ YP_NODE_REQUIRED_DESTRUCTURED_PARAMETER_NODE = 102,
319
+ YP_NODE_REQUIRED_PARAMETER_NODE = 103,
320
+ YP_NODE_RESCUE_MODIFIER_NODE = 104,
321
+ YP_NODE_RESCUE_NODE = 105,
322
+ YP_NODE_REST_PARAMETER_NODE = 106,
323
+ YP_NODE_RETRY_NODE = 107,
324
+ YP_NODE_RETURN_NODE = 108,
325
+ YP_NODE_SELF_NODE = 109,
326
+ YP_NODE_SINGLETON_CLASS_NODE = 110,
327
+ YP_NODE_SOURCE_ENCODING_NODE = 111,
328
+ YP_NODE_SOURCE_FILE_NODE = 112,
329
+ YP_NODE_SOURCE_LINE_NODE = 113,
330
+ YP_NODE_SPLAT_NODE = 114,
331
+ YP_NODE_STATEMENTS_NODE = 115,
332
+ YP_NODE_STRING_CONCAT_NODE = 116,
333
+ YP_NODE_STRING_NODE = 117,
334
+ YP_NODE_SUPER_NODE = 118,
335
+ YP_NODE_SYMBOL_NODE = 119,
336
+ YP_NODE_TRUE_NODE = 120,
337
+ YP_NODE_UNDEF_NODE = 121,
338
+ YP_NODE_UNLESS_NODE = 122,
339
+ YP_NODE_UNTIL_NODE = 123,
340
+ YP_NODE_WHEN_NODE = 124,
341
+ YP_NODE_WHILE_NODE = 125,
342
+ YP_NODE_X_STRING_NODE = 126,
343
+ YP_NODE_YIELD_NODE = 127,
344
+ };
345
+
346
+ typedef uint16_t yp_node_type_t;
347
+ typedef uint16_t yp_node_flags_t;
348
+
349
+ // We store the flags enum in every node in the tree
350
+ static const uint16_t YP_NODE_FLAG_NEWLINE = 0x1;
351
+
352
+ // For easy access, we define some macros to check node type
353
+ #define YP_NODE_TYPE(node) ((enum yp_node_type)node->type)
354
+ #define YP_NODE_TYPE_P(node, type) (YP_NODE_TYPE(node) == (type))
355
+
356
+ // This is the overall tagged union representing a node in the syntax tree.
357
+ typedef struct yp_node {
358
+ // This represents the type of the node. It somewhat maps to the nodes that
359
+ // existed in the original grammar and ripper, but it's not a 1:1 mapping.
360
+ yp_node_type_t type;
361
+
362
+ // This represents any flags on the node. Currently, this is only a newline
363
+ // flag
364
+ yp_node_flags_t flags;
365
+
366
+ // This is the location of the node in the source. It's a range of bytes
367
+ // containing a start and an end.
368
+ yp_location_t location;
369
+ } yp_node_t;
370
+
371
+ // AliasNode
372
+ typedef struct yp_alias_node {
373
+ yp_node_t base;
374
+ struct yp_node *new_name;
375
+ struct yp_node *old_name;
376
+ yp_location_t keyword_loc;
377
+ } yp_alias_node_t;
378
+
379
+ // AlternationPatternNode
380
+ typedef struct yp_alternation_pattern_node {
381
+ yp_node_t base;
382
+ struct yp_node *left;
383
+ struct yp_node *right;
384
+ yp_location_t operator_loc;
385
+ } yp_alternation_pattern_node_t;
386
+
387
+ // AndNode
388
+ typedef struct yp_and_node {
389
+ yp_node_t base;
390
+ struct yp_node *left;
391
+ struct yp_node *right;
392
+ yp_location_t operator_loc;
393
+ } yp_and_node_t;
394
+
395
+ // ArgumentsNode
396
+ typedef struct yp_arguments_node {
397
+ yp_node_t base;
398
+ struct yp_node_list arguments;
399
+ } yp_arguments_node_t;
400
+
401
+ // ArrayNode
402
+ typedef struct yp_array_node {
403
+ yp_node_t base;
404
+ struct yp_node_list elements;
405
+ yp_location_t opening_loc;
406
+ yp_location_t closing_loc;
407
+ } yp_array_node_t;
408
+
409
+ // ArrayPatternNode
410
+ typedef struct yp_array_pattern_node {
411
+ yp_node_t base;
412
+ struct yp_node *constant;
413
+ struct yp_node_list requireds;
414
+ struct yp_node *rest;
415
+ struct yp_node_list posts;
416
+ yp_location_t opening_loc;
417
+ yp_location_t closing_loc;
418
+ } yp_array_pattern_node_t;
419
+
420
+ // AssocNode
421
+ typedef struct yp_assoc_node {
422
+ yp_node_t base;
423
+ struct yp_node *key;
424
+ struct yp_node *value;
425
+ yp_location_t operator_loc;
426
+ } yp_assoc_node_t;
427
+
428
+ // AssocSplatNode
429
+ typedef struct yp_assoc_splat_node {
430
+ yp_node_t base;
431
+ struct yp_node *value;
432
+ yp_location_t operator_loc;
433
+ } yp_assoc_splat_node_t;
434
+
435
+ // BackReferenceReadNode
436
+ typedef struct yp_back_reference_read_node {
437
+ yp_node_t base;
438
+ } yp_back_reference_read_node_t;
439
+
440
+ // BeginNode
441
+ typedef struct yp_begin_node {
442
+ yp_node_t base;
443
+ yp_location_t begin_keyword_loc;
444
+ struct yp_statements_node *statements;
445
+ struct yp_rescue_node *rescue_clause;
446
+ struct yp_else_node *else_clause;
447
+ struct yp_ensure_node *ensure_clause;
448
+ yp_location_t end_keyword_loc;
449
+ } yp_begin_node_t;
450
+
451
+ // BlockArgumentNode
452
+ typedef struct yp_block_argument_node {
453
+ yp_node_t base;
454
+ struct yp_node *expression;
455
+ yp_location_t operator_loc;
456
+ } yp_block_argument_node_t;
457
+
458
+ // BlockNode
459
+ typedef struct yp_block_node {
460
+ yp_node_t base;
461
+ yp_constant_id_list_t locals;
462
+ struct yp_block_parameters_node *parameters;
463
+ struct yp_node *statements;
464
+ yp_location_t opening_loc;
465
+ yp_location_t closing_loc;
466
+ } yp_block_node_t;
467
+
468
+ // BlockParameterNode
469
+ typedef struct yp_block_parameter_node {
470
+ yp_node_t base;
471
+ yp_location_t name_loc;
472
+ yp_location_t operator_loc;
473
+ } yp_block_parameter_node_t;
474
+
475
+ // BlockParametersNode
476
+ typedef struct yp_block_parameters_node {
477
+ yp_node_t base;
478
+ struct yp_parameters_node *parameters;
479
+ yp_location_list_t locals;
480
+ yp_location_t opening_loc;
481
+ yp_location_t closing_loc;
482
+ } yp_block_parameters_node_t;
483
+
484
+ // BreakNode
485
+ typedef struct yp_break_node {
486
+ yp_node_t base;
487
+ struct yp_arguments_node *arguments;
488
+ yp_location_t keyword_loc;
489
+ } yp_break_node_t;
490
+
491
+ // CallNode
492
+ typedef struct yp_call_node {
493
+ yp_node_t base;
494
+ struct yp_node *receiver;
495
+ yp_location_t operator_loc;
496
+ yp_location_t message_loc;
497
+ yp_location_t opening_loc;
498
+ struct yp_arguments_node *arguments;
499
+ yp_location_t closing_loc;
500
+ struct yp_block_node *block;
501
+ uint32_t flags;
502
+ yp_string_t name;
503
+ } yp_call_node_t;
504
+
505
+ // CallOperatorAndWriteNode
506
+ typedef struct yp_call_operator_and_write_node {
507
+ yp_node_t base;
508
+ struct yp_call_node *target;
509
+ yp_location_t operator_loc;
510
+ struct yp_node *value;
511
+ } yp_call_operator_and_write_node_t;
512
+
513
+ // CallOperatorOrWriteNode
514
+ typedef struct yp_call_operator_or_write_node {
515
+ yp_node_t base;
516
+ struct yp_call_node *target;
517
+ struct yp_node *value;
518
+ yp_location_t operator_loc;
519
+ } yp_call_operator_or_write_node_t;
520
+
521
+ // CallOperatorWriteNode
522
+ typedef struct yp_call_operator_write_node {
523
+ yp_node_t base;
524
+ struct yp_call_node *target;
525
+ yp_location_t operator_loc;
526
+ struct yp_node *value;
527
+ yp_constant_id_t operator_id;
528
+ } yp_call_operator_write_node_t;
529
+
530
+ // CapturePatternNode
531
+ typedef struct yp_capture_pattern_node {
532
+ yp_node_t base;
533
+ struct yp_node *value;
534
+ struct yp_node *target;
535
+ yp_location_t operator_loc;
536
+ } yp_capture_pattern_node_t;
537
+
538
+ // CaseNode
539
+ typedef struct yp_case_node {
540
+ yp_node_t base;
541
+ struct yp_node *predicate;
542
+ struct yp_node_list conditions;
543
+ struct yp_else_node *consequent;
544
+ yp_location_t case_keyword_loc;
545
+ yp_location_t end_keyword_loc;
546
+ } yp_case_node_t;
547
+
548
+ // ClassNode
549
+ typedef struct yp_class_node {
550
+ yp_node_t base;
551
+ yp_constant_id_list_t locals;
552
+ yp_location_t class_keyword_loc;
553
+ struct yp_node *constant_path;
554
+ yp_location_t inheritance_operator_loc;
555
+ struct yp_node *superclass;
556
+ struct yp_node *statements;
557
+ yp_location_t end_keyword_loc;
558
+ } yp_class_node_t;
559
+
560
+ // ClassVariableOperatorAndWriteNode
561
+ typedef struct yp_class_variable_operator_and_write_node {
562
+ yp_node_t base;
563
+ yp_location_t name_loc;
564
+ yp_location_t operator_loc;
565
+ struct yp_node *value;
566
+ } yp_class_variable_operator_and_write_node_t;
567
+
568
+ // ClassVariableOperatorOrWriteNode
569
+ typedef struct yp_class_variable_operator_or_write_node {
570
+ yp_node_t base;
571
+ yp_location_t name_loc;
572
+ yp_location_t operator_loc;
573
+ struct yp_node *value;
574
+ } yp_class_variable_operator_or_write_node_t;
575
+
576
+ // ClassVariableOperatorWriteNode
577
+ typedef struct yp_class_variable_operator_write_node {
578
+ yp_node_t base;
579
+ yp_location_t name_loc;
580
+ yp_location_t operator_loc;
581
+ struct yp_node *value;
582
+ yp_constant_id_t operator;
583
+ } yp_class_variable_operator_write_node_t;
584
+
585
+ // ClassVariableReadNode
586
+ typedef struct yp_class_variable_read_node {
587
+ yp_node_t base;
588
+ } yp_class_variable_read_node_t;
589
+
590
+ // ClassVariableWriteNode
591
+ typedef struct yp_class_variable_write_node {
592
+ yp_node_t base;
593
+ yp_location_t name_loc;
594
+ struct yp_node *value;
595
+ yp_location_t operator_loc;
596
+ } yp_class_variable_write_node_t;
597
+
598
+ // ConstantOperatorAndWriteNode
599
+ typedef struct yp_constant_operator_and_write_node {
600
+ yp_node_t base;
601
+ yp_location_t name_loc;
602
+ yp_location_t operator_loc;
603
+ struct yp_node *value;
604
+ } yp_constant_operator_and_write_node_t;
605
+
606
+ // ConstantOperatorOrWriteNode
607
+ typedef struct yp_constant_operator_or_write_node {
608
+ yp_node_t base;
609
+ yp_location_t name_loc;
610
+ yp_location_t operator_loc;
611
+ struct yp_node *value;
612
+ } yp_constant_operator_or_write_node_t;
613
+
614
+ // ConstantOperatorWriteNode
615
+ typedef struct yp_constant_operator_write_node {
616
+ yp_node_t base;
617
+ yp_location_t name_loc;
618
+ yp_location_t operator_loc;
619
+ struct yp_node *value;
620
+ yp_constant_id_t operator;
621
+ } yp_constant_operator_write_node_t;
622
+
623
+ // ConstantPathNode
624
+ typedef struct yp_constant_path_node {
625
+ yp_node_t base;
626
+ struct yp_node *parent;
627
+ struct yp_node *child;
628
+ yp_location_t delimiter_loc;
629
+ } yp_constant_path_node_t;
630
+
631
+ // ConstantPathOperatorAndWriteNode
632
+ typedef struct yp_constant_path_operator_and_write_node {
633
+ yp_node_t base;
634
+ struct yp_constant_path_node *target;
635
+ yp_location_t operator_loc;
636
+ struct yp_node *value;
637
+ } yp_constant_path_operator_and_write_node_t;
638
+
639
+ // ConstantPathOperatorOrWriteNode
640
+ typedef struct yp_constant_path_operator_or_write_node {
641
+ yp_node_t base;
642
+ struct yp_constant_path_node *target;
643
+ yp_location_t operator_loc;
644
+ struct yp_node *value;
645
+ } yp_constant_path_operator_or_write_node_t;
646
+
647
+ // ConstantPathOperatorWriteNode
648
+ typedef struct yp_constant_path_operator_write_node {
649
+ yp_node_t base;
650
+ struct yp_constant_path_node *target;
651
+ yp_location_t operator_loc;
652
+ struct yp_node *value;
653
+ yp_constant_id_t operator;
654
+ } yp_constant_path_operator_write_node_t;
655
+
656
+ // ConstantPathWriteNode
657
+ typedef struct yp_constant_path_write_node {
658
+ yp_node_t base;
659
+ struct yp_constant_path_node *target;
660
+ yp_location_t operator_loc;
661
+ struct yp_node *value;
662
+ } yp_constant_path_write_node_t;
663
+
664
+ // ConstantReadNode
665
+ typedef struct yp_constant_read_node {
666
+ yp_node_t base;
667
+ } yp_constant_read_node_t;
668
+
669
+ // ConstantWriteNode
670
+ typedef struct yp_constant_write_node {
671
+ yp_node_t base;
672
+ yp_location_t name_loc;
673
+ struct yp_node *value;
674
+ yp_location_t operator_loc;
675
+ } yp_constant_write_node_t;
676
+
677
+ // DefNode
678
+ typedef struct yp_def_node {
679
+ yp_node_t base;
680
+ yp_location_t name_loc;
681
+ struct yp_node *receiver;
682
+ struct yp_parameters_node *parameters;
683
+ struct yp_node *statements;
684
+ yp_constant_id_list_t locals;
685
+ yp_location_t def_keyword_loc;
686
+ yp_location_t operator_loc;
687
+ yp_location_t lparen_loc;
688
+ yp_location_t rparen_loc;
689
+ yp_location_t equal_loc;
690
+ yp_location_t end_keyword_loc;
691
+ } yp_def_node_t;
692
+
693
+ // DefinedNode
694
+ typedef struct yp_defined_node {
695
+ yp_node_t base;
696
+ yp_location_t lparen_loc;
697
+ struct yp_node *value;
698
+ yp_location_t rparen_loc;
699
+ yp_location_t keyword_loc;
700
+ } yp_defined_node_t;
701
+
702
+ // ElseNode
703
+ typedef struct yp_else_node {
704
+ yp_node_t base;
705
+ yp_location_t else_keyword_loc;
706
+ struct yp_statements_node *statements;
707
+ yp_location_t end_keyword_loc;
708
+ } yp_else_node_t;
709
+
710
+ // EmbeddedStatementsNode
711
+ typedef struct yp_embedded_statements_node {
712
+ yp_node_t base;
713
+ yp_location_t opening_loc;
714
+ struct yp_statements_node *statements;
715
+ yp_location_t closing_loc;
716
+ } yp_embedded_statements_node_t;
717
+
718
+ // EmbeddedVariableNode
719
+ typedef struct yp_embedded_variable_node {
720
+ yp_node_t base;
721
+ yp_location_t operator_loc;
722
+ struct yp_node *variable;
723
+ } yp_embedded_variable_node_t;
724
+
725
+ // EnsureNode
726
+ typedef struct yp_ensure_node {
727
+ yp_node_t base;
728
+ yp_location_t ensure_keyword_loc;
729
+ struct yp_statements_node *statements;
730
+ yp_location_t end_keyword_loc;
731
+ } yp_ensure_node_t;
732
+
733
+ // FalseNode
734
+ typedef struct yp_false_node {
735
+ yp_node_t base;
736
+ } yp_false_node_t;
737
+
738
+ // FindPatternNode
739
+ typedef struct yp_find_pattern_node {
740
+ yp_node_t base;
741
+ struct yp_node *constant;
742
+ struct yp_node *left;
743
+ struct yp_node_list requireds;
744
+ struct yp_node *right;
745
+ yp_location_t opening_loc;
746
+ yp_location_t closing_loc;
747
+ } yp_find_pattern_node_t;
748
+
749
+ // FloatNode
750
+ typedef struct yp_float_node {
751
+ yp_node_t base;
752
+ } yp_float_node_t;
753
+
754
+ // ForNode
755
+ typedef struct yp_for_node {
756
+ yp_node_t base;
757
+ struct yp_node *index;
758
+ struct yp_node *collection;
759
+ struct yp_statements_node *statements;
760
+ yp_location_t for_keyword_loc;
761
+ yp_location_t in_keyword_loc;
762
+ yp_location_t do_keyword_loc;
763
+ yp_location_t end_keyword_loc;
764
+ } yp_for_node_t;
765
+
766
+ // ForwardingArgumentsNode
767
+ typedef struct yp_forwarding_arguments_node {
768
+ yp_node_t base;
769
+ } yp_forwarding_arguments_node_t;
770
+
771
+ // ForwardingParameterNode
772
+ typedef struct yp_forwarding_parameter_node {
773
+ yp_node_t base;
774
+ } yp_forwarding_parameter_node_t;
775
+
776
+ // ForwardingSuperNode
777
+ typedef struct yp_forwarding_super_node {
778
+ yp_node_t base;
779
+ struct yp_block_node *block;
780
+ } yp_forwarding_super_node_t;
781
+
782
+ // GlobalVariableOperatorAndWriteNode
783
+ typedef struct yp_global_variable_operator_and_write_node {
784
+ yp_node_t base;
785
+ yp_location_t name_loc;
786
+ yp_location_t operator_loc;
787
+ struct yp_node *value;
788
+ } yp_global_variable_operator_and_write_node_t;
789
+
790
+ // GlobalVariableOperatorOrWriteNode
791
+ typedef struct yp_global_variable_operator_or_write_node {
792
+ yp_node_t base;
793
+ yp_location_t name_loc;
794
+ yp_location_t operator_loc;
795
+ struct yp_node *value;
796
+ } yp_global_variable_operator_or_write_node_t;
797
+
798
+ // GlobalVariableOperatorWriteNode
799
+ typedef struct yp_global_variable_operator_write_node {
800
+ yp_node_t base;
801
+ yp_location_t name_loc;
802
+ yp_location_t operator_loc;
803
+ struct yp_node *value;
804
+ yp_constant_id_t operator;
805
+ } yp_global_variable_operator_write_node_t;
806
+
807
+ // GlobalVariableReadNode
808
+ typedef struct yp_global_variable_read_node {
809
+ yp_node_t base;
810
+ } yp_global_variable_read_node_t;
811
+
812
+ // GlobalVariableWriteNode
813
+ typedef struct yp_global_variable_write_node {
814
+ yp_node_t base;
815
+ yp_location_t name_loc;
816
+ yp_location_t operator_loc;
817
+ struct yp_node *value;
818
+ } yp_global_variable_write_node_t;
819
+
820
+ // HashNode
821
+ typedef struct yp_hash_node {
822
+ yp_node_t base;
823
+ yp_location_t opening_loc;
824
+ struct yp_node_list elements;
825
+ yp_location_t closing_loc;
826
+ } yp_hash_node_t;
827
+
828
+ // HashPatternNode
829
+ typedef struct yp_hash_pattern_node {
830
+ yp_node_t base;
831
+ struct yp_node *constant;
832
+ struct yp_node_list assocs;
833
+ struct yp_node *kwrest;
834
+ yp_location_t opening_loc;
835
+ yp_location_t closing_loc;
836
+ } yp_hash_pattern_node_t;
837
+
838
+ // IfNode
839
+ typedef struct yp_if_node {
840
+ yp_node_t base;
841
+ yp_location_t if_keyword_loc;
842
+ struct yp_node *predicate;
843
+ struct yp_statements_node *statements;
844
+ struct yp_node *consequent;
845
+ yp_location_t end_keyword_loc;
846
+ } yp_if_node_t;
847
+
848
+ // ImaginaryNode
849
+ typedef struct yp_imaginary_node {
850
+ yp_node_t base;
851
+ struct yp_node *numeric;
852
+ } yp_imaginary_node_t;
853
+
854
+ // InNode
855
+ typedef struct yp_in_node {
856
+ yp_node_t base;
857
+ struct yp_node *pattern;
858
+ struct yp_statements_node *statements;
859
+ yp_location_t in_loc;
860
+ yp_location_t then_loc;
861
+ } yp_in_node_t;
862
+
863
+ // InstanceVariableOperatorAndWriteNode
864
+ typedef struct yp_instance_variable_operator_and_write_node {
865
+ yp_node_t base;
866
+ yp_location_t name_loc;
867
+ yp_location_t operator_loc;
868
+ struct yp_node *value;
869
+ } yp_instance_variable_operator_and_write_node_t;
870
+
871
+ // InstanceVariableOperatorOrWriteNode
872
+ typedef struct yp_instance_variable_operator_or_write_node {
873
+ yp_node_t base;
874
+ yp_location_t name_loc;
875
+ yp_location_t operator_loc;
876
+ struct yp_node *value;
877
+ } yp_instance_variable_operator_or_write_node_t;
878
+
879
+ // InstanceVariableOperatorWriteNode
880
+ typedef struct yp_instance_variable_operator_write_node {
881
+ yp_node_t base;
882
+ yp_location_t name_loc;
883
+ yp_location_t operator_loc;
884
+ struct yp_node *value;
885
+ yp_constant_id_t operator;
886
+ } yp_instance_variable_operator_write_node_t;
887
+
888
+ // InstanceVariableReadNode
889
+ typedef struct yp_instance_variable_read_node {
890
+ yp_node_t base;
891
+ } yp_instance_variable_read_node_t;
892
+
893
+ // InstanceVariableWriteNode
894
+ typedef struct yp_instance_variable_write_node {
895
+ yp_node_t base;
896
+ yp_location_t name_loc;
897
+ struct yp_node *value;
898
+ yp_location_t operator_loc;
899
+ } yp_instance_variable_write_node_t;
900
+
901
+ // IntegerNode
902
+ typedef struct yp_integer_node {
903
+ yp_node_t base;
904
+ } yp_integer_node_t;
905
+
906
+ // InterpolatedRegularExpressionNode
907
+ typedef struct yp_interpolated_regular_expression_node {
908
+ yp_node_t base;
909
+ yp_location_t opening_loc;
910
+ struct yp_node_list parts;
911
+ yp_location_t closing_loc;
912
+ uint32_t flags;
913
+ } yp_interpolated_regular_expression_node_t;
914
+
915
+ // InterpolatedStringNode
916
+ typedef struct yp_interpolated_string_node {
917
+ yp_node_t base;
918
+ yp_location_t opening_loc;
919
+ struct yp_node_list parts;
920
+ yp_location_t closing_loc;
921
+ } yp_interpolated_string_node_t;
922
+
923
+ // InterpolatedSymbolNode
924
+ typedef struct yp_interpolated_symbol_node {
925
+ yp_node_t base;
926
+ yp_location_t opening_loc;
927
+ struct yp_node_list parts;
928
+ yp_location_t closing_loc;
929
+ } yp_interpolated_symbol_node_t;
930
+
931
+ // InterpolatedXStringNode
932
+ typedef struct yp_interpolated_x_string_node {
933
+ yp_node_t base;
934
+ yp_location_t opening_loc;
935
+ struct yp_node_list parts;
936
+ yp_location_t closing_loc;
937
+ } yp_interpolated_x_string_node_t;
938
+
939
+ // KeywordHashNode
940
+ typedef struct yp_keyword_hash_node {
941
+ yp_node_t base;
942
+ struct yp_node_list elements;
943
+ } yp_keyword_hash_node_t;
944
+
945
+ // KeywordParameterNode
946
+ typedef struct yp_keyword_parameter_node {
947
+ yp_node_t base;
948
+ yp_location_t name_loc;
949
+ struct yp_node *value;
950
+ } yp_keyword_parameter_node_t;
951
+
952
+ // KeywordRestParameterNode
953
+ typedef struct yp_keyword_rest_parameter_node {
954
+ yp_node_t base;
955
+ yp_location_t operator_loc;
956
+ yp_location_t name_loc;
957
+ } yp_keyword_rest_parameter_node_t;
958
+
959
+ // LambdaNode
960
+ typedef struct yp_lambda_node {
961
+ yp_node_t base;
962
+ yp_constant_id_list_t locals;
963
+ yp_location_t opening_loc;
964
+ struct yp_block_parameters_node *parameters;
965
+ struct yp_node *statements;
966
+ } yp_lambda_node_t;
967
+
968
+ // LocalVariableOperatorAndWriteNode
969
+ typedef struct yp_local_variable_operator_and_write_node {
970
+ yp_node_t base;
971
+ yp_location_t name_loc;
972
+ yp_location_t operator_loc;
973
+ struct yp_node *value;
974
+ yp_constant_id_t constant_id;
975
+ } yp_local_variable_operator_and_write_node_t;
976
+
977
+ // LocalVariableOperatorOrWriteNode
978
+ typedef struct yp_local_variable_operator_or_write_node {
979
+ yp_node_t base;
980
+ yp_location_t name_loc;
981
+ yp_location_t operator_loc;
982
+ struct yp_node *value;
983
+ yp_constant_id_t constant_id;
984
+ } yp_local_variable_operator_or_write_node_t;
985
+
986
+ // LocalVariableOperatorWriteNode
987
+ typedef struct yp_local_variable_operator_write_node {
988
+ yp_node_t base;
989
+ yp_location_t name_loc;
990
+ yp_location_t operator_loc;
991
+ struct yp_node *value;
992
+ yp_constant_id_t constant_id;
993
+ yp_constant_id_t operator_id;
994
+ } yp_local_variable_operator_write_node_t;
995
+
996
+ // LocalVariableReadNode
997
+ typedef struct yp_local_variable_read_node {
998
+ yp_node_t base;
999
+ yp_constant_id_t constant_id;
1000
+ uint32_t depth;
1001
+ } yp_local_variable_read_node_t;
1002
+
1003
+ // LocalVariableWriteNode
1004
+ typedef struct yp_local_variable_write_node {
1005
+ yp_node_t base;
1006
+ yp_constant_id_t constant_id;
1007
+ uint32_t depth;
1008
+ struct yp_node *value;
1009
+ yp_location_t name_loc;
1010
+ yp_location_t operator_loc;
1011
+ } yp_local_variable_write_node_t;
1012
+
1013
+ // MatchPredicateNode
1014
+ typedef struct yp_match_predicate_node {
1015
+ yp_node_t base;
1016
+ struct yp_node *value;
1017
+ struct yp_node *pattern;
1018
+ yp_location_t operator_loc;
1019
+ } yp_match_predicate_node_t;
1020
+
1021
+ // MatchRequiredNode
1022
+ typedef struct yp_match_required_node {
1023
+ yp_node_t base;
1024
+ struct yp_node *value;
1025
+ struct yp_node *pattern;
1026
+ yp_location_t operator_loc;
1027
+ } yp_match_required_node_t;
1028
+
1029
+ // MissingNode
1030
+ typedef struct yp_missing_node {
1031
+ yp_node_t base;
1032
+ } yp_missing_node_t;
1033
+
1034
+ // ModuleNode
1035
+ typedef struct yp_module_node {
1036
+ yp_node_t base;
1037
+ yp_constant_id_list_t locals;
1038
+ yp_location_t module_keyword_loc;
1039
+ struct yp_node *constant_path;
1040
+ struct yp_node *statements;
1041
+ yp_location_t end_keyword_loc;
1042
+ } yp_module_node_t;
1043
+
1044
+ // MultiWriteNode
1045
+ typedef struct yp_multi_write_node {
1046
+ yp_node_t base;
1047
+ struct yp_node_list targets;
1048
+ yp_location_t operator_loc;
1049
+ struct yp_node *value;
1050
+ yp_location_t lparen_loc;
1051
+ yp_location_t rparen_loc;
1052
+ } yp_multi_write_node_t;
1053
+
1054
+ // NextNode
1055
+ typedef struct yp_next_node {
1056
+ yp_node_t base;
1057
+ struct yp_arguments_node *arguments;
1058
+ yp_location_t keyword_loc;
1059
+ } yp_next_node_t;
1060
+
1061
+ // NilNode
1062
+ typedef struct yp_nil_node {
1063
+ yp_node_t base;
1064
+ } yp_nil_node_t;
1065
+
1066
+ // NoKeywordsParameterNode
1067
+ typedef struct yp_no_keywords_parameter_node {
1068
+ yp_node_t base;
1069
+ yp_location_t operator_loc;
1070
+ yp_location_t keyword_loc;
1071
+ } yp_no_keywords_parameter_node_t;
1072
+
1073
+ // NumberedReferenceReadNode
1074
+ typedef struct yp_numbered_reference_read_node {
1075
+ yp_node_t base;
1076
+ } yp_numbered_reference_read_node_t;
1077
+
1078
+ // OptionalParameterNode
1079
+ typedef struct yp_optional_parameter_node {
1080
+ yp_node_t base;
1081
+ yp_constant_id_t constant_id;
1082
+ yp_location_t name_loc;
1083
+ yp_location_t operator_loc;
1084
+ struct yp_node *value;
1085
+ } yp_optional_parameter_node_t;
1086
+
1087
+ // OrNode
1088
+ typedef struct yp_or_node {
1089
+ yp_node_t base;
1090
+ struct yp_node *left;
1091
+ struct yp_node *right;
1092
+ yp_location_t operator_loc;
1093
+ } yp_or_node_t;
1094
+
1095
+ // ParametersNode
1096
+ typedef struct yp_parameters_node {
1097
+ yp_node_t base;
1098
+ struct yp_node_list requireds;
1099
+ struct yp_node_list optionals;
1100
+ struct yp_node_list posts;
1101
+ struct yp_rest_parameter_node *rest;
1102
+ struct yp_node_list keywords;
1103
+ struct yp_node *keyword_rest;
1104
+ struct yp_block_parameter_node *block;
1105
+ } yp_parameters_node_t;
1106
+
1107
+ // ParenthesesNode
1108
+ typedef struct yp_parentheses_node {
1109
+ yp_node_t base;
1110
+ struct yp_node *statements;
1111
+ yp_location_t opening_loc;
1112
+ yp_location_t closing_loc;
1113
+ } yp_parentheses_node_t;
1114
+
1115
+ // PinnedExpressionNode
1116
+ typedef struct yp_pinned_expression_node {
1117
+ yp_node_t base;
1118
+ struct yp_node *expression;
1119
+ yp_location_t operator_loc;
1120
+ yp_location_t lparen_loc;
1121
+ yp_location_t rparen_loc;
1122
+ } yp_pinned_expression_node_t;
1123
+
1124
+ // PinnedVariableNode
1125
+ typedef struct yp_pinned_variable_node {
1126
+ yp_node_t base;
1127
+ struct yp_node *variable;
1128
+ yp_location_t operator_loc;
1129
+ } yp_pinned_variable_node_t;
1130
+
1131
+ // PostExecutionNode
1132
+ typedef struct yp_post_execution_node {
1133
+ yp_node_t base;
1134
+ struct yp_statements_node *statements;
1135
+ yp_location_t keyword_loc;
1136
+ yp_location_t opening_loc;
1137
+ yp_location_t closing_loc;
1138
+ } yp_post_execution_node_t;
1139
+
1140
+ // PreExecutionNode
1141
+ typedef struct yp_pre_execution_node {
1142
+ yp_node_t base;
1143
+ struct yp_statements_node *statements;
1144
+ yp_location_t keyword_loc;
1145
+ yp_location_t opening_loc;
1146
+ yp_location_t closing_loc;
1147
+ } yp_pre_execution_node_t;
1148
+
1149
+ // ProgramNode
1150
+ typedef struct yp_program_node {
1151
+ yp_node_t base;
1152
+ yp_constant_id_list_t locals;
1153
+ struct yp_statements_node *statements;
1154
+ } yp_program_node_t;
1155
+
1156
+ // RangeNode
1157
+ typedef struct yp_range_node {
1158
+ yp_node_t base;
1159
+ struct yp_node *left;
1160
+ struct yp_node *right;
1161
+ yp_location_t operator_loc;
1162
+ uint32_t flags;
1163
+ } yp_range_node_t;
1164
+
1165
+ // RationalNode
1166
+ typedef struct yp_rational_node {
1167
+ yp_node_t base;
1168
+ struct yp_node *numeric;
1169
+ } yp_rational_node_t;
1170
+
1171
+ // RedoNode
1172
+ typedef struct yp_redo_node {
1173
+ yp_node_t base;
1174
+ } yp_redo_node_t;
1175
+
1176
+ // RegularExpressionNode
1177
+ typedef struct yp_regular_expression_node {
1178
+ yp_node_t base;
1179
+ yp_location_t opening_loc;
1180
+ yp_location_t content_loc;
1181
+ yp_location_t closing_loc;
1182
+ yp_string_t unescaped;
1183
+ uint32_t flags;
1184
+ } yp_regular_expression_node_t;
1185
+
1186
+ // RequiredDestructuredParameterNode
1187
+ typedef struct yp_required_destructured_parameter_node {
1188
+ yp_node_t base;
1189
+ struct yp_node_list parameters;
1190
+ yp_location_t opening_loc;
1191
+ yp_location_t closing_loc;
1192
+ } yp_required_destructured_parameter_node_t;
1193
+
1194
+ // RequiredParameterNode
1195
+ typedef struct yp_required_parameter_node {
1196
+ yp_node_t base;
1197
+ yp_constant_id_t constant_id;
1198
+ } yp_required_parameter_node_t;
1199
+
1200
+ // RescueModifierNode
1201
+ typedef struct yp_rescue_modifier_node {
1202
+ yp_node_t base;
1203
+ struct yp_node *expression;
1204
+ yp_location_t keyword_loc;
1205
+ struct yp_node *rescue_expression;
1206
+ } yp_rescue_modifier_node_t;
1207
+
1208
+ // RescueNode
1209
+ typedef struct yp_rescue_node {
1210
+ yp_node_t base;
1211
+ yp_location_t keyword_loc;
1212
+ struct yp_node_list exceptions;
1213
+ yp_location_t operator_loc;
1214
+ struct yp_node *reference;
1215
+ struct yp_statements_node *statements;
1216
+ struct yp_rescue_node *consequent;
1217
+ } yp_rescue_node_t;
1218
+
1219
+ // RestParameterNode
1220
+ typedef struct yp_rest_parameter_node {
1221
+ yp_node_t base;
1222
+ yp_location_t operator_loc;
1223
+ yp_location_t name_loc;
1224
+ } yp_rest_parameter_node_t;
1225
+
1226
+ // RetryNode
1227
+ typedef struct yp_retry_node {
1228
+ yp_node_t base;
1229
+ } yp_retry_node_t;
1230
+
1231
+ // ReturnNode
1232
+ typedef struct yp_return_node {
1233
+ yp_node_t base;
1234
+ yp_location_t keyword_loc;
1235
+ struct yp_arguments_node *arguments;
1236
+ } yp_return_node_t;
1237
+
1238
+ // SelfNode
1239
+ typedef struct yp_self_node {
1240
+ yp_node_t base;
1241
+ } yp_self_node_t;
1242
+
1243
+ // SingletonClassNode
1244
+ typedef struct yp_singleton_class_node {
1245
+ yp_node_t base;
1246
+ yp_constant_id_list_t locals;
1247
+ yp_location_t class_keyword_loc;
1248
+ yp_location_t operator_loc;
1249
+ struct yp_node *expression;
1250
+ struct yp_node *statements;
1251
+ yp_location_t end_keyword_loc;
1252
+ } yp_singleton_class_node_t;
1253
+
1254
+ // SourceEncodingNode
1255
+ typedef struct yp_source_encoding_node {
1256
+ yp_node_t base;
1257
+ } yp_source_encoding_node_t;
1258
+
1259
+ // SourceFileNode
1260
+ typedef struct yp_source_file_node {
1261
+ yp_node_t base;
1262
+ yp_string_t filepath;
1263
+ } yp_source_file_node_t;
1264
+
1265
+ // SourceLineNode
1266
+ typedef struct yp_source_line_node {
1267
+ yp_node_t base;
1268
+ } yp_source_line_node_t;
1269
+
1270
+ // SplatNode
1271
+ typedef struct yp_splat_node {
1272
+ yp_node_t base;
1273
+ yp_location_t operator_loc;
1274
+ struct yp_node *expression;
1275
+ } yp_splat_node_t;
1276
+
1277
+ // StatementsNode
1278
+ typedef struct yp_statements_node {
1279
+ yp_node_t base;
1280
+ struct yp_node_list body;
1281
+ } yp_statements_node_t;
1282
+
1283
+ // StringConcatNode
1284
+ typedef struct yp_string_concat_node {
1285
+ yp_node_t base;
1286
+ struct yp_node *left;
1287
+ struct yp_node *right;
1288
+ } yp_string_concat_node_t;
1289
+
1290
+ // StringNode
1291
+ typedef struct yp_string_node {
1292
+ yp_node_t base;
1293
+ yp_location_t opening_loc;
1294
+ yp_location_t content_loc;
1295
+ yp_location_t closing_loc;
1296
+ yp_string_t unescaped;
1297
+ } yp_string_node_t;
1298
+
1299
+ // SuperNode
1300
+ typedef struct yp_super_node {
1301
+ yp_node_t base;
1302
+ yp_location_t keyword_loc;
1303
+ yp_location_t lparen_loc;
1304
+ struct yp_arguments_node *arguments;
1305
+ yp_location_t rparen_loc;
1306
+ struct yp_block_node *block;
1307
+ } yp_super_node_t;
1308
+
1309
+ // SymbolNode
1310
+ typedef struct yp_symbol_node {
1311
+ yp_node_t base;
1312
+ yp_location_t opening_loc;
1313
+ yp_location_t value_loc;
1314
+ yp_location_t closing_loc;
1315
+ yp_string_t unescaped;
1316
+ } yp_symbol_node_t;
1317
+
1318
+ // TrueNode
1319
+ typedef struct yp_true_node {
1320
+ yp_node_t base;
1321
+ } yp_true_node_t;
1322
+
1323
+ // UndefNode
1324
+ typedef struct yp_undef_node {
1325
+ yp_node_t base;
1326
+ struct yp_node_list names;
1327
+ yp_location_t keyword_loc;
1328
+ } yp_undef_node_t;
1329
+
1330
+ // UnlessNode
1331
+ typedef struct yp_unless_node {
1332
+ yp_node_t base;
1333
+ yp_location_t keyword_loc;
1334
+ struct yp_node *predicate;
1335
+ struct yp_statements_node *statements;
1336
+ struct yp_else_node *consequent;
1337
+ yp_location_t end_keyword_loc;
1338
+ } yp_unless_node_t;
1339
+
1340
+ // UntilNode
1341
+ typedef struct yp_until_node {
1342
+ yp_node_t base;
1343
+ yp_location_t keyword_loc;
1344
+ struct yp_node *predicate;
1345
+ struct yp_statements_node *statements;
1346
+ uint32_t flags;
1347
+ } yp_until_node_t;
1348
+
1349
+ // WhenNode
1350
+ typedef struct yp_when_node {
1351
+ yp_node_t base;
1352
+ yp_location_t keyword_loc;
1353
+ struct yp_node_list conditions;
1354
+ struct yp_statements_node *statements;
1355
+ } yp_when_node_t;
1356
+
1357
+ // WhileNode
1358
+ typedef struct yp_while_node {
1359
+ yp_node_t base;
1360
+ yp_location_t keyword_loc;
1361
+ struct yp_node *predicate;
1362
+ struct yp_statements_node *statements;
1363
+ uint32_t flags;
1364
+ } yp_while_node_t;
1365
+
1366
+ // XStringNode
1367
+ typedef struct yp_x_string_node {
1368
+ yp_node_t base;
1369
+ yp_location_t opening_loc;
1370
+ yp_location_t content_loc;
1371
+ yp_location_t closing_loc;
1372
+ yp_string_t unescaped;
1373
+ } yp_x_string_node_t;
1374
+
1375
+ // YieldNode
1376
+ typedef struct yp_yield_node {
1377
+ yp_node_t base;
1378
+ yp_location_t keyword_loc;
1379
+ yp_location_t lparen_loc;
1380
+ struct yp_arguments_node *arguments;
1381
+ yp_location_t rparen_loc;
1382
+ } yp_yield_node_t;
1383
+
1384
+ // CallNodeFlags
1385
+ typedef enum {
1386
+ YP_CALL_NODE_FLAGS_SAFE_NAVIGATION = 1 << 0,
1387
+ YP_CALL_NODE_FLAGS_VARIABLE_CALL = 1 << 1,
1388
+ } yp_call_node_flags_t;
1389
+
1390
+ // LoopFlags
1391
+ typedef enum {
1392
+ YP_LOOP_FLAGS_BEGIN_MODIFIER = 1 << 0,
1393
+ } yp_loop_flags_t;
1394
+
1395
+ // RangeNodeFlags
1396
+ typedef enum {
1397
+ YP_RANGE_NODE_FLAGS_EXCLUDE_END = 1 << 0,
1398
+ } yp_range_node_flags_t;
1399
+
1400
+ // RegularExpressionFlags
1401
+ typedef enum {
1402
+ YP_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE = 1 << 0,
1403
+ YP_REGULAR_EXPRESSION_FLAGS_MULTI_LINE = 1 << 1,
1404
+ YP_REGULAR_EXPRESSION_FLAGS_EXTENDED = 1 << 2,
1405
+ YP_REGULAR_EXPRESSION_FLAGS_EUC_JP = 1 << 3,
1406
+ YP_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT = 1 << 4,
1407
+ YP_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J = 1 << 5,
1408
+ YP_REGULAR_EXPRESSION_FLAGS_UTF_8 = 1 << 6,
1409
+ YP_REGULAR_EXPRESSION_FLAGS_ONCE = 1 << 7,
1410
+ } yp_regular_expression_flags_t;
1411
+
1412
+ #endif // YARP_AST_H