graphql-c_parser 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/graphql_c_parser_ext/extconf.rb +4 -0
- data/ext/graphql_c_parser_ext/graphql_c_parser_ext.c +22 -0
- data/ext/graphql_c_parser_ext/graphql_c_parser_ext.h +7 -0
- data/ext/graphql_c_parser_ext/lexer.c +2020 -0
- data/ext/graphql_c_parser_ext/lexer.h +6 -0
- data/ext/graphql_c_parser_ext/lexer.rl +403 -0
- data/ext/graphql_c_parser_ext/parser.c +3311 -0
- data/ext/graphql_c_parser_ext/parser.h +5 -0
- data/ext/graphql_c_parser_ext/parser.y +942 -0
- data/lib/graphql/c_parser/version.rb +7 -0
- data/lib/graphql/c_parser.rb +89 -0
- data/lib/graphql-c_parser.rb +2 -0
- metadata +75 -0
@@ -0,0 +1,942 @@
|
|
1
|
+
%require "3.8"
|
2
|
+
%define api.pure full
|
3
|
+
%define parse.error detailed
|
4
|
+
|
5
|
+
%{
|
6
|
+
// C Declarations
|
7
|
+
#include <ruby.h>
|
8
|
+
#define YYSTYPE VALUE
|
9
|
+
int yylex(YYSTYPE *, VALUE, VALUE);
|
10
|
+
void yyerror(VALUE, VALUE, const char*);
|
11
|
+
|
12
|
+
static VALUE GraphQL_Language_Nodes_NONE;
|
13
|
+
static VALUE r_string_query;
|
14
|
+
|
15
|
+
#define MAKE_AST_NODE(node_class_name, nargs, ...) rb_funcall(GraphQL_Language_Nodes_##node_class_name, rb_intern("from_a"), nargs + 1, filename,__VA_ARGS__)
|
16
|
+
|
17
|
+
#define SETUP_NODE_CLASS_VARIABLE(node_class_name) static VALUE GraphQL_Language_Nodes_##node_class_name;
|
18
|
+
|
19
|
+
SETUP_NODE_CLASS_VARIABLE(Argument)
|
20
|
+
SETUP_NODE_CLASS_VARIABLE(Directive)
|
21
|
+
SETUP_NODE_CLASS_VARIABLE(Document)
|
22
|
+
SETUP_NODE_CLASS_VARIABLE(Enum)
|
23
|
+
SETUP_NODE_CLASS_VARIABLE(Field)
|
24
|
+
SETUP_NODE_CLASS_VARIABLE(FragmentDefinition)
|
25
|
+
SETUP_NODE_CLASS_VARIABLE(FragmentSpread)
|
26
|
+
SETUP_NODE_CLASS_VARIABLE(InlineFragment)
|
27
|
+
SETUP_NODE_CLASS_VARIABLE(InputObject)
|
28
|
+
SETUP_NODE_CLASS_VARIABLE(ListType)
|
29
|
+
SETUP_NODE_CLASS_VARIABLE(NonNullType)
|
30
|
+
SETUP_NODE_CLASS_VARIABLE(NullValue)
|
31
|
+
SETUP_NODE_CLASS_VARIABLE(OperationDefinition)
|
32
|
+
SETUP_NODE_CLASS_VARIABLE(TypeName)
|
33
|
+
SETUP_NODE_CLASS_VARIABLE(VariableDefinition)
|
34
|
+
SETUP_NODE_CLASS_VARIABLE(VariableIdentifier)
|
35
|
+
|
36
|
+
SETUP_NODE_CLASS_VARIABLE(ScalarTypeDefinition)
|
37
|
+
SETUP_NODE_CLASS_VARIABLE(ObjectTypeDefinition)
|
38
|
+
SETUP_NODE_CLASS_VARIABLE(InterfaceTypeDefinition)
|
39
|
+
SETUP_NODE_CLASS_VARIABLE(UnionTypeDefinition)
|
40
|
+
SETUP_NODE_CLASS_VARIABLE(EnumTypeDefinition)
|
41
|
+
SETUP_NODE_CLASS_VARIABLE(InputObjectTypeDefinition)
|
42
|
+
SETUP_NODE_CLASS_VARIABLE(EnumValueDefinition)
|
43
|
+
SETUP_NODE_CLASS_VARIABLE(DirectiveDefinition)
|
44
|
+
SETUP_NODE_CLASS_VARIABLE(DirectiveLocation)
|
45
|
+
SETUP_NODE_CLASS_VARIABLE(FieldDefinition)
|
46
|
+
SETUP_NODE_CLASS_VARIABLE(InputValueDefinition)
|
47
|
+
SETUP_NODE_CLASS_VARIABLE(SchemaDefinition)
|
48
|
+
|
49
|
+
SETUP_NODE_CLASS_VARIABLE(ScalarTypeExtension)
|
50
|
+
SETUP_NODE_CLASS_VARIABLE(ObjectTypeExtension)
|
51
|
+
SETUP_NODE_CLASS_VARIABLE(InterfaceTypeExtension)
|
52
|
+
SETUP_NODE_CLASS_VARIABLE(UnionTypeExtension)
|
53
|
+
SETUP_NODE_CLASS_VARIABLE(EnumTypeExtension)
|
54
|
+
SETUP_NODE_CLASS_VARIABLE(InputObjectTypeExtension)
|
55
|
+
SETUP_NODE_CLASS_VARIABLE(SchemaExtension)
|
56
|
+
%}
|
57
|
+
|
58
|
+
%param {VALUE parser}
|
59
|
+
%param {VALUE filename}
|
60
|
+
|
61
|
+
// YACC Declarations
|
62
|
+
%token AMP 200
|
63
|
+
%token BANG 201
|
64
|
+
%token COLON 202
|
65
|
+
%token DIRECTIVE 203
|
66
|
+
%token DIR_SIGN 204
|
67
|
+
%token ENUM 205
|
68
|
+
%token ELLIPSIS 206
|
69
|
+
%token EQUALS 207
|
70
|
+
%token EXTEND 208
|
71
|
+
%token FALSE_LITERAL 209
|
72
|
+
%token FLOAT 210
|
73
|
+
%token FRAGMENT 211
|
74
|
+
%token IDENTIFIER 212
|
75
|
+
%token INPUT 213
|
76
|
+
%token IMPLEMENTS 214
|
77
|
+
%token INT 215
|
78
|
+
%token INTERFACE 216
|
79
|
+
%token LBRACKET 217
|
80
|
+
%token LCURLY 218
|
81
|
+
%token LPAREN 219
|
82
|
+
%token MUTATION 220
|
83
|
+
%token NULL_LITERAL 221
|
84
|
+
%token ON 222
|
85
|
+
%token PIPE 223
|
86
|
+
%token QUERY 224
|
87
|
+
%token RBRACKET 225
|
88
|
+
%token RCURLY 226
|
89
|
+
%token REPEATABLE 227
|
90
|
+
%token RPAREN 228
|
91
|
+
%token SCALAR 229
|
92
|
+
%token SCHEMA 230
|
93
|
+
%token STRING 231
|
94
|
+
%token SUBSCRIPTION 232
|
95
|
+
%token TRUE_LITERAL 233
|
96
|
+
%token TYPE_LITERAL 234
|
97
|
+
%token UNION 235
|
98
|
+
%token VAR_SIGN 236
|
99
|
+
|
100
|
+
%%
|
101
|
+
|
102
|
+
// YACC Rules
|
103
|
+
start: document { rb_ivar_set(parser, rb_intern("@result"), $1); }
|
104
|
+
|
105
|
+
document: definitions_list {
|
106
|
+
VALUE position_source = rb_ary_entry($1, 0);
|
107
|
+
VALUE line, col;
|
108
|
+
if (RB_TEST(position_source)) {
|
109
|
+
line = rb_funcall(position_source, rb_intern("line"), 0);
|
110
|
+
col = rb_funcall(position_source, rb_intern("col"), 0);
|
111
|
+
} else {
|
112
|
+
line = INT2FIX(1);
|
113
|
+
col = INT2FIX(1);
|
114
|
+
}
|
115
|
+
$$ = MAKE_AST_NODE(Document, 3, line, col, $1);
|
116
|
+
}
|
117
|
+
|
118
|
+
definitions_list:
|
119
|
+
definition { $$ = rb_ary_new_from_args(1, $1); }
|
120
|
+
| definitions_list definition { rb_ary_push($$, $2); }
|
121
|
+
|
122
|
+
definition:
|
123
|
+
executable_definition
|
124
|
+
| type_system_definition
|
125
|
+
| type_system_extension
|
126
|
+
|
127
|
+
executable_definition:
|
128
|
+
operation_definition
|
129
|
+
| fragment_definition
|
130
|
+
|
131
|
+
operation_definition:
|
132
|
+
operation_type operation_name_opt variable_definitions_opt directives_list_opt selection_set {
|
133
|
+
$$ = MAKE_AST_NODE(OperationDefinition, 7,
|
134
|
+
rb_ary_entry($1, 1),
|
135
|
+
rb_ary_entry($1, 2),
|
136
|
+
rb_ary_entry($1, 3),
|
137
|
+
(RB_TEST($2) ? rb_ary_entry($2, 3) : Qnil),
|
138
|
+
$3,
|
139
|
+
$4,
|
140
|
+
$5
|
141
|
+
);
|
142
|
+
}
|
143
|
+
| LCURLY selection_list RCURLY {
|
144
|
+
$$ = MAKE_AST_NODE(OperationDefinition, 7,
|
145
|
+
rb_ary_entry($1, 1),
|
146
|
+
rb_ary_entry($1, 2),
|
147
|
+
r_string_query,
|
148
|
+
Qnil,
|
149
|
+
GraphQL_Language_Nodes_NONE,
|
150
|
+
GraphQL_Language_Nodes_NONE,
|
151
|
+
$2
|
152
|
+
);
|
153
|
+
}
|
154
|
+
| LCURLY RCURLY {
|
155
|
+
$$ = MAKE_AST_NODE(OperationDefinition, 7,
|
156
|
+
rb_ary_entry($1, 1),
|
157
|
+
rb_ary_entry($1, 2),
|
158
|
+
r_string_query,
|
159
|
+
Qnil,
|
160
|
+
GraphQL_Language_Nodes_NONE,
|
161
|
+
GraphQL_Language_Nodes_NONE,
|
162
|
+
GraphQL_Language_Nodes_NONE
|
163
|
+
);
|
164
|
+
}
|
165
|
+
|
166
|
+
operation_type:
|
167
|
+
QUERY
|
168
|
+
| MUTATION
|
169
|
+
| SUBSCRIPTION
|
170
|
+
|
171
|
+
operation_name_opt:
|
172
|
+
/* none */ { $$ = Qnil; }
|
173
|
+
| name
|
174
|
+
|
175
|
+
variable_definitions_opt:
|
176
|
+
/* none */ { $$ = GraphQL_Language_Nodes_NONE; }
|
177
|
+
| LPAREN variable_definitions_list RPAREN { $$ = $2; }
|
178
|
+
|
179
|
+
variable_definitions_list:
|
180
|
+
variable_definition { $$ = rb_ary_new_from_args(1, $1); }
|
181
|
+
| variable_definitions_list variable_definition { rb_ary_push($$, $2); }
|
182
|
+
|
183
|
+
variable_definition:
|
184
|
+
VAR_SIGN name COLON type default_value_opt {
|
185
|
+
$$ = MAKE_AST_NODE(VariableDefinition, 5,
|
186
|
+
rb_ary_entry($1, 1),
|
187
|
+
rb_ary_entry($1, 2),
|
188
|
+
rb_ary_entry($2, 3),
|
189
|
+
$4,
|
190
|
+
$5
|
191
|
+
);
|
192
|
+
}
|
193
|
+
|
194
|
+
default_value_opt:
|
195
|
+
/* none */ { $$ = Qnil; }
|
196
|
+
| EQUALS literal_value { $$ = $2; }
|
197
|
+
|
198
|
+
selection_list:
|
199
|
+
selection { $$ = rb_ary_new_from_args(1, $1); }
|
200
|
+
| selection_list selection { rb_ary_push($$, $2); }
|
201
|
+
|
202
|
+
selection:
|
203
|
+
field
|
204
|
+
| fragment_spread
|
205
|
+
| inline_fragment
|
206
|
+
|
207
|
+
selection_set:
|
208
|
+
LCURLY selection_list RCURLY { $$ = $2; }
|
209
|
+
|
210
|
+
selection_set_opt:
|
211
|
+
/* none */ { $$ = rb_ary_new(); }
|
212
|
+
| selection_set
|
213
|
+
|
214
|
+
field:
|
215
|
+
name COLON name arguments_opt directives_list_opt selection_set_opt {
|
216
|
+
$$ = MAKE_AST_NODE(Field, 7,
|
217
|
+
rb_ary_entry($1, 1),
|
218
|
+
rb_ary_entry($1, 2),
|
219
|
+
rb_ary_entry($1, 3), // alias
|
220
|
+
rb_ary_entry($3, 3), // name
|
221
|
+
$4, // args
|
222
|
+
$5, // directives
|
223
|
+
$6 // subselections
|
224
|
+
);
|
225
|
+
}
|
226
|
+
| name arguments_opt directives_list_opt selection_set_opt {
|
227
|
+
$$ = MAKE_AST_NODE(Field, 7,
|
228
|
+
rb_ary_entry($1, 1),
|
229
|
+
rb_ary_entry($1, 2),
|
230
|
+
Qnil, // alias
|
231
|
+
rb_ary_entry($1, 3), // name
|
232
|
+
$2, // args
|
233
|
+
$3, // directives
|
234
|
+
$4 // subselections
|
235
|
+
);
|
236
|
+
}
|
237
|
+
|
238
|
+
arguments_opt:
|
239
|
+
/* none */ { $$ = GraphQL_Language_Nodes_NONE; }
|
240
|
+
| LPAREN arguments_list RPAREN { $$ = $2; }
|
241
|
+
|
242
|
+
arguments_list:
|
243
|
+
argument { $$ = rb_ary_new_from_args(1, $1); }
|
244
|
+
| arguments_list argument { rb_ary_push($$, $2); }
|
245
|
+
|
246
|
+
argument:
|
247
|
+
name COLON input_value {
|
248
|
+
$$ = MAKE_AST_NODE(Argument, 4,
|
249
|
+
rb_ary_entry($1, 1),
|
250
|
+
rb_ary_entry($1, 2),
|
251
|
+
rb_ary_entry($1, 3),
|
252
|
+
$3
|
253
|
+
);
|
254
|
+
}
|
255
|
+
|
256
|
+
literal_value:
|
257
|
+
FLOAT { $$ = rb_funcall(rb_ary_entry($1, 3), rb_intern("to_f"), 0); }
|
258
|
+
| INT { $$ = rb_funcall(rb_ary_entry($1, 3), rb_intern("to_i"), 0); }
|
259
|
+
| STRING { $$ = rb_ary_entry($1, 3); }
|
260
|
+
| TRUE_LITERAL { $$ = Qtrue; }
|
261
|
+
| FALSE_LITERAL { $$ = Qfalse; }
|
262
|
+
| null_value
|
263
|
+
| enum_value
|
264
|
+
| list_value
|
265
|
+
| object_literal_value
|
266
|
+
|
267
|
+
input_value:
|
268
|
+
literal_value
|
269
|
+
| variable
|
270
|
+
| object_value
|
271
|
+
|
272
|
+
null_value: NULL_LITERAL {
|
273
|
+
$$ = MAKE_AST_NODE(NullValue, 3,
|
274
|
+
rb_ary_entry($1, 1),
|
275
|
+
rb_ary_entry($1, 2),
|
276
|
+
rb_ary_entry($1, 3)
|
277
|
+
);
|
278
|
+
}
|
279
|
+
|
280
|
+
variable: VAR_SIGN name {
|
281
|
+
$$ = MAKE_AST_NODE(VariableIdentifier, 3,
|
282
|
+
rb_ary_entry($1, 1),
|
283
|
+
rb_ary_entry($1, 2),
|
284
|
+
rb_ary_entry($2, 3)
|
285
|
+
);
|
286
|
+
}
|
287
|
+
|
288
|
+
list_value:
|
289
|
+
LBRACKET RBRACKET { $$ = GraphQL_Language_Nodes_NONE; }
|
290
|
+
| LBRACKET list_value_list RBRACKET { $$ = $2; }
|
291
|
+
|
292
|
+
list_value_list:
|
293
|
+
input_value { $$ = rb_ary_new_from_args(1, $1); }
|
294
|
+
| list_value_list input_value { rb_ary_push($$, $2); }
|
295
|
+
|
296
|
+
enum_name: /* any identifier, but not "true", "false" or "null" */
|
297
|
+
IDENTIFIER
|
298
|
+
| FRAGMENT
|
299
|
+
| REPEATABLE
|
300
|
+
| ON
|
301
|
+
| operation_type
|
302
|
+
| schema_keyword
|
303
|
+
|
304
|
+
enum_value: enum_name {
|
305
|
+
$$ = MAKE_AST_NODE(Enum, 3,
|
306
|
+
rb_ary_entry($1, 1),
|
307
|
+
rb_ary_entry($1, 2),
|
308
|
+
rb_ary_entry($1, 3)
|
309
|
+
);
|
310
|
+
}
|
311
|
+
|
312
|
+
object_value:
|
313
|
+
LCURLY object_value_list_opt RCURLY {
|
314
|
+
$$ = MAKE_AST_NODE(InputObject, 3,
|
315
|
+
rb_ary_entry($1, 1),
|
316
|
+
rb_ary_entry($1, 2),
|
317
|
+
$2
|
318
|
+
);
|
319
|
+
}
|
320
|
+
|
321
|
+
object_value_list_opt:
|
322
|
+
/* nothing */ { $$ = GraphQL_Language_Nodes_NONE; }
|
323
|
+
| object_value_list
|
324
|
+
|
325
|
+
object_value_list:
|
326
|
+
object_value_field { $$ = rb_ary_new_from_args(1, $1); }
|
327
|
+
| object_value_list object_value_field { rb_ary_push($$, $2); }
|
328
|
+
|
329
|
+
object_value_field:
|
330
|
+
name COLON input_value {
|
331
|
+
$$ = MAKE_AST_NODE(Argument, 4,
|
332
|
+
rb_ary_entry($1, 1),
|
333
|
+
rb_ary_entry($1, 2),
|
334
|
+
rb_ary_entry($1, 3),
|
335
|
+
$3
|
336
|
+
);
|
337
|
+
}
|
338
|
+
|
339
|
+
/* like the previous, but with literals only: */
|
340
|
+
object_literal_value:
|
341
|
+
LCURLY object_literal_value_list_opt RCURLY {
|
342
|
+
$$ = MAKE_AST_NODE(InputObject, 3,
|
343
|
+
rb_ary_entry($1, 1),
|
344
|
+
rb_ary_entry($1, 2),
|
345
|
+
$2
|
346
|
+
);
|
347
|
+
}
|
348
|
+
|
349
|
+
object_literal_value_list_opt:
|
350
|
+
/* nothing */ { $$ = GraphQL_Language_Nodes_NONE; }
|
351
|
+
| object_literal_value_list
|
352
|
+
|
353
|
+
object_literal_value_list:
|
354
|
+
object_literal_value_field { $$ = rb_ary_new_from_args(1, $1); }
|
355
|
+
| object_literal_value_list object_literal_value_field { rb_ary_push($$, $2); }
|
356
|
+
|
357
|
+
object_literal_value_field:
|
358
|
+
name COLON literal_value {
|
359
|
+
$$ = MAKE_AST_NODE(Argument, 4,
|
360
|
+
rb_ary_entry($1, 1),
|
361
|
+
rb_ary_entry($1, 2),
|
362
|
+
rb_ary_entry($1, 3),
|
363
|
+
$3
|
364
|
+
);
|
365
|
+
}
|
366
|
+
|
367
|
+
|
368
|
+
directives_list_opt:
|
369
|
+
/* none */ { $$ = GraphQL_Language_Nodes_NONE; }
|
370
|
+
| directives_list
|
371
|
+
|
372
|
+
directives_list:
|
373
|
+
directive { $$ = rb_ary_new_from_args(1, $1); }
|
374
|
+
| directives_list directive { rb_ary_push($$, $2); }
|
375
|
+
|
376
|
+
directive: DIR_SIGN name arguments_opt {
|
377
|
+
$$ = MAKE_AST_NODE(Directive, 4,
|
378
|
+
rb_ary_entry($1, 1),
|
379
|
+
rb_ary_entry($1, 2),
|
380
|
+
rb_ary_entry($2, 3),
|
381
|
+
$3
|
382
|
+
);
|
383
|
+
}
|
384
|
+
|
385
|
+
name:
|
386
|
+
name_without_on
|
387
|
+
| ON
|
388
|
+
|
389
|
+
schema_keyword:
|
390
|
+
SCHEMA
|
391
|
+
| SCALAR
|
392
|
+
| TYPE_LITERAL
|
393
|
+
| IMPLEMENTS
|
394
|
+
| INTERFACE
|
395
|
+
| UNION
|
396
|
+
| ENUM
|
397
|
+
| INPUT
|
398
|
+
| DIRECTIVE
|
399
|
+
|
400
|
+
name_without_on:
|
401
|
+
IDENTIFIER
|
402
|
+
| FRAGMENT
|
403
|
+
| REPEATABLE
|
404
|
+
| TRUE_LITERAL
|
405
|
+
| FALSE_LITERAL
|
406
|
+
| operation_type
|
407
|
+
| schema_keyword
|
408
|
+
|
409
|
+
|
410
|
+
fragment_spread:
|
411
|
+
ELLIPSIS name_without_on directives_list_opt {
|
412
|
+
$$ = MAKE_AST_NODE(FragmentSpread, 4,
|
413
|
+
rb_ary_entry($1, 1),
|
414
|
+
rb_ary_entry($1, 2),
|
415
|
+
rb_ary_entry($2, 3),
|
416
|
+
$3
|
417
|
+
);
|
418
|
+
}
|
419
|
+
|
420
|
+
inline_fragment:
|
421
|
+
ELLIPSIS ON type directives_list_opt selection_set {
|
422
|
+
$$ = MAKE_AST_NODE(InlineFragment, 5,
|
423
|
+
rb_ary_entry($1, 1),
|
424
|
+
rb_ary_entry($1, 2),
|
425
|
+
$3,
|
426
|
+
$4,
|
427
|
+
$5
|
428
|
+
);
|
429
|
+
}
|
430
|
+
| ELLIPSIS directives_list_opt selection_set {
|
431
|
+
$$ = MAKE_AST_NODE(InlineFragment, 5,
|
432
|
+
rb_ary_entry($1, 1),
|
433
|
+
rb_ary_entry($1, 2),
|
434
|
+
Qnil,
|
435
|
+
$2,
|
436
|
+
$3
|
437
|
+
);
|
438
|
+
}
|
439
|
+
|
440
|
+
fragment_definition:
|
441
|
+
FRAGMENT fragment_name_opt ON type directives_list_opt selection_set {
|
442
|
+
$$ = MAKE_AST_NODE(FragmentDefinition, 6,
|
443
|
+
rb_ary_entry($1, 1),
|
444
|
+
rb_ary_entry($1, 2),
|
445
|
+
$2,
|
446
|
+
$4,
|
447
|
+
$5,
|
448
|
+
$6
|
449
|
+
);
|
450
|
+
}
|
451
|
+
|
452
|
+
fragment_name_opt:
|
453
|
+
/* none */ { $$ = Qnil; }
|
454
|
+
| name_without_on { $$ = rb_ary_entry($1, 3); }
|
455
|
+
|
456
|
+
type:
|
457
|
+
nullable_type
|
458
|
+
| nullable_type BANG { $$ = MAKE_AST_NODE(NonNullType, 3, rb_funcall($1, rb_intern("line"), 0), rb_funcall($1, rb_intern("col"), 0), $1); }
|
459
|
+
|
460
|
+
nullable_type:
|
461
|
+
name {
|
462
|
+
$$ = MAKE_AST_NODE(TypeName, 3,
|
463
|
+
rb_ary_entry($1, 1),
|
464
|
+
rb_ary_entry($1, 2),
|
465
|
+
rb_ary_entry($1, 3)
|
466
|
+
);
|
467
|
+
}
|
468
|
+
| LBRACKET type RBRACKET {
|
469
|
+
$$ = MAKE_AST_NODE(ListType, 3,
|
470
|
+
rb_funcall($2, rb_intern("line"), 0),
|
471
|
+
rb_funcall($2, rb_intern("col"), 0),
|
472
|
+
$2
|
473
|
+
);
|
474
|
+
}
|
475
|
+
|
476
|
+
type_system_definition:
|
477
|
+
schema_definition
|
478
|
+
| type_definition
|
479
|
+
| directive_definition
|
480
|
+
|
481
|
+
schema_definition:
|
482
|
+
SCHEMA directives_list_opt operation_type_definition_list_opt {
|
483
|
+
$$ = MAKE_AST_NODE(SchemaDefinition, 6,
|
484
|
+
rb_ary_entry($1, 1),
|
485
|
+
rb_ary_entry($1, 2),
|
486
|
+
// TODO use static strings:
|
487
|
+
rb_hash_aref($3, rb_str_new_cstr("query")),
|
488
|
+
rb_hash_aref($3, rb_str_new_cstr("mutation")),
|
489
|
+
rb_hash_aref($3, rb_str_new_cstr("subscription")),
|
490
|
+
$2
|
491
|
+
);
|
492
|
+
}
|
493
|
+
|
494
|
+
operation_type_definition_list_opt:
|
495
|
+
/* none */ { $$ = rb_hash_new(); }
|
496
|
+
| LCURLY operation_type_definition_list RCURLY { $$ = $2; }
|
497
|
+
|
498
|
+
operation_type_definition_list:
|
499
|
+
operation_type_definition {
|
500
|
+
$$ = rb_hash_new();
|
501
|
+
rb_hash_aset($$, rb_ary_entry($1, 0), rb_ary_entry($1, 1));
|
502
|
+
}
|
503
|
+
| operation_type_definition_list operation_type_definition {
|
504
|
+
rb_hash_aset($$, rb_ary_entry($2, 0), rb_ary_entry($2, 1));
|
505
|
+
}
|
506
|
+
|
507
|
+
operation_type_definition:
|
508
|
+
operation_type COLON name {
|
509
|
+
$$ = rb_ary_new_from_args(2, rb_ary_entry($1, 3), rb_ary_entry($3, 3));
|
510
|
+
}
|
511
|
+
|
512
|
+
type_definition:
|
513
|
+
scalar_type_definition
|
514
|
+
| object_type_definition
|
515
|
+
| interface_type_definition
|
516
|
+
| union_type_definition
|
517
|
+
| enum_type_definition
|
518
|
+
| input_object_type_definition
|
519
|
+
|
520
|
+
description: STRING
|
521
|
+
|
522
|
+
description_opt:
|
523
|
+
/* none */ { $$ = Qnil; }
|
524
|
+
| description
|
525
|
+
|
526
|
+
scalar_type_definition:
|
527
|
+
description_opt SCALAR name directives_list_opt {
|
528
|
+
$$ = MAKE_AST_NODE(ScalarTypeDefinition, 5,
|
529
|
+
rb_ary_entry($2, 1),
|
530
|
+
rb_ary_entry($2, 2),
|
531
|
+
rb_ary_entry($3, 3),
|
532
|
+
// TODO see get_description for reading a description from comments
|
533
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
534
|
+
$4
|
535
|
+
);
|
536
|
+
}
|
537
|
+
|
538
|
+
object_type_definition:
|
539
|
+
description_opt TYPE_LITERAL name implements_opt directives_list_opt field_definition_list_opt {
|
540
|
+
$$ = MAKE_AST_NODE(ObjectTypeDefinition, 7,
|
541
|
+
rb_ary_entry($2, 1),
|
542
|
+
rb_ary_entry($2, 2),
|
543
|
+
rb_ary_entry($3, 3),
|
544
|
+
$4, // implements
|
545
|
+
// TODO see get_description for reading a description from comments
|
546
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
547
|
+
$5,
|
548
|
+
$6
|
549
|
+
);
|
550
|
+
}
|
551
|
+
|
552
|
+
implements_opt:
|
553
|
+
/* none */ { $$ = GraphQL_Language_Nodes_NONE; }
|
554
|
+
| IMPLEMENTS AMP interfaces_list { $$ = $3; }
|
555
|
+
| IMPLEMENTS interfaces_list { $$ = $2; }
|
556
|
+
| IMPLEMENTS legacy_interfaces_list { $$ = $2; }
|
557
|
+
|
558
|
+
interfaces_list:
|
559
|
+
name {
|
560
|
+
VALUE new_name = MAKE_AST_NODE(TypeName, 3,
|
561
|
+
rb_ary_entry($1, 1),
|
562
|
+
rb_ary_entry($1, 2),
|
563
|
+
rb_ary_entry($1, 3)
|
564
|
+
);
|
565
|
+
$$ = rb_ary_new_from_args(1, new_name);
|
566
|
+
}
|
567
|
+
| interfaces_list AMP name {
|
568
|
+
VALUE new_name = MAKE_AST_NODE(TypeName, 3, rb_ary_entry($3, 1), rb_ary_entry($3, 2), rb_ary_entry($3, 3));
|
569
|
+
rb_ary_push($$, new_name);
|
570
|
+
}
|
571
|
+
|
572
|
+
legacy_interfaces_list:
|
573
|
+
name {
|
574
|
+
VALUE new_name = MAKE_AST_NODE(TypeName, 3,
|
575
|
+
rb_ary_entry($1, 1),
|
576
|
+
rb_ary_entry($1, 2),
|
577
|
+
rb_ary_entry($1, 3)
|
578
|
+
);
|
579
|
+
$$ = rb_ary_new_from_args(1, new_name);
|
580
|
+
}
|
581
|
+
| legacy_interfaces_list name {
|
582
|
+
rb_ary_push($$, MAKE_AST_NODE(TypeName, 3, rb_ary_entry($2, 1), rb_ary_entry($2, 2), rb_ary_entry($2, 3)));
|
583
|
+
}
|
584
|
+
|
585
|
+
input_value_definition:
|
586
|
+
description_opt name COLON type default_value_opt directives_list_opt {
|
587
|
+
$$ = MAKE_AST_NODE(InputValueDefinition, 7,
|
588
|
+
rb_ary_entry($2, 1),
|
589
|
+
rb_ary_entry($2, 2),
|
590
|
+
rb_ary_entry($2, 3),
|
591
|
+
$4,
|
592
|
+
$5,
|
593
|
+
// TODO see get_description for reading a description from comments
|
594
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
595
|
+
$6
|
596
|
+
);
|
597
|
+
}
|
598
|
+
|
599
|
+
input_value_definition_list:
|
600
|
+
input_value_definition { $$ = rb_ary_new_from_args(1, $1); }
|
601
|
+
| input_value_definition_list input_value_definition { rb_ary_push($$, $2); }
|
602
|
+
|
603
|
+
arguments_definitions_opt:
|
604
|
+
/* none */ { $$ = GraphQL_Language_Nodes_NONE; }
|
605
|
+
| LPAREN input_value_definition_list RPAREN { $$ = $2; }
|
606
|
+
|
607
|
+
field_definition:
|
608
|
+
description_opt name arguments_definitions_opt COLON type directives_list_opt {
|
609
|
+
$$ = MAKE_AST_NODE(FieldDefinition, 7,
|
610
|
+
rb_ary_entry($2, 1),
|
611
|
+
rb_ary_entry($2, 2),
|
612
|
+
rb_ary_entry($2, 3),
|
613
|
+
$5,
|
614
|
+
// TODO see get_description for reading a description from comments
|
615
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
616
|
+
$3,
|
617
|
+
$6
|
618
|
+
);
|
619
|
+
}
|
620
|
+
|
621
|
+
field_definition_list_opt:
|
622
|
+
/* none */ { $$ = GraphQL_Language_Nodes_NONE; }
|
623
|
+
| LCURLY field_definition_list RCURLY { $$ = $2; }
|
624
|
+
|
625
|
+
field_definition_list:
|
626
|
+
/* none - this is not actually valid but graphql-ruby used to print this */ { $$ = GraphQL_Language_Nodes_NONE; }
|
627
|
+
| field_definition { $$ = rb_ary_new_from_args(1, $1); }
|
628
|
+
| field_definition_list field_definition { rb_ary_push($$, $2); }
|
629
|
+
|
630
|
+
interface_type_definition:
|
631
|
+
description_opt INTERFACE name implements_opt directives_list_opt field_definition_list_opt {
|
632
|
+
$$ = MAKE_AST_NODE(InterfaceTypeDefinition, 7,
|
633
|
+
rb_ary_entry($2, 1),
|
634
|
+
rb_ary_entry($2, 2),
|
635
|
+
rb_ary_entry($3, 3),
|
636
|
+
// TODO see get_description for reading a description from comments
|
637
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
638
|
+
$4,
|
639
|
+
$5,
|
640
|
+
$6
|
641
|
+
);
|
642
|
+
}
|
643
|
+
|
644
|
+
union_members:
|
645
|
+
name {
|
646
|
+
VALUE new_member = MAKE_AST_NODE(TypeName, 3,
|
647
|
+
rb_ary_entry($1, 1),
|
648
|
+
rb_ary_entry($1, 2),
|
649
|
+
rb_ary_entry($1, 3)
|
650
|
+
);
|
651
|
+
$$ = rb_ary_new_from_args(1, new_member);
|
652
|
+
}
|
653
|
+
| union_members PIPE name {
|
654
|
+
rb_ary_push($$, MAKE_AST_NODE(TypeName, 3, rb_ary_entry($3, 1), rb_ary_entry($3, 2), rb_ary_entry($3, 3)));
|
655
|
+
}
|
656
|
+
|
657
|
+
union_type_definition:
|
658
|
+
description_opt UNION name directives_list_opt EQUALS union_members {
|
659
|
+
$$ = MAKE_AST_NODE(UnionTypeDefinition, 6,
|
660
|
+
rb_ary_entry($2, 1),
|
661
|
+
rb_ary_entry($2, 2),
|
662
|
+
rb_ary_entry($3, 3),
|
663
|
+
$6, // types
|
664
|
+
// TODO see get_description for reading a description from comments
|
665
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
666
|
+
$4
|
667
|
+
);
|
668
|
+
}
|
669
|
+
|
670
|
+
enum_type_definition:
|
671
|
+
description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
672
|
+
$$ = MAKE_AST_NODE(EnumTypeDefinition, 6,
|
673
|
+
rb_ary_entry($2, 1),
|
674
|
+
rb_ary_entry($2, 2),
|
675
|
+
rb_ary_entry($3, 3),
|
676
|
+
// TODO see get_description for reading a description from comments
|
677
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
678
|
+
$4,
|
679
|
+
$6
|
680
|
+
);
|
681
|
+
}
|
682
|
+
|
683
|
+
enum_value_definition:
|
684
|
+
description_opt enum_name directives_list_opt {
|
685
|
+
$$ = MAKE_AST_NODE(EnumValueDefinition, 5,
|
686
|
+
rb_ary_entry($2, 1),
|
687
|
+
rb_ary_entry($2, 2),
|
688
|
+
rb_ary_entry($2, 3),
|
689
|
+
// TODO see get_description for reading a description from comments
|
690
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
691
|
+
$3
|
692
|
+
);
|
693
|
+
}
|
694
|
+
|
695
|
+
enum_value_definitions:
|
696
|
+
enum_value_definition { $$ = rb_ary_new_from_args(1, $1); }
|
697
|
+
| enum_value_definitions enum_value_definition { rb_ary_push($$, $2); }
|
698
|
+
|
699
|
+
input_object_type_definition:
|
700
|
+
description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
701
|
+
$$ = MAKE_AST_NODE(InputObjectTypeDefinition, 6,
|
702
|
+
rb_ary_entry($2, 1),
|
703
|
+
rb_ary_entry($2, 2),
|
704
|
+
rb_ary_entry($3, 3),
|
705
|
+
// TODO see get_description for reading a description from comments
|
706
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
707
|
+
$4,
|
708
|
+
$6
|
709
|
+
);
|
710
|
+
}
|
711
|
+
|
712
|
+
directive_definition:
|
713
|
+
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt directive_repeatable_opt ON directive_locations {
|
714
|
+
$$ = MAKE_AST_NODE(DirectiveDefinition, 7,
|
715
|
+
rb_ary_entry($2, 1),
|
716
|
+
rb_ary_entry($2, 2),
|
717
|
+
rb_ary_entry($4, 3),
|
718
|
+
(RB_TEST($6) ? Qtrue : Qfalse), // repeatable
|
719
|
+
// TODO see get_description for reading a description from comments
|
720
|
+
(RB_TEST($1) ? rb_ary_entry($1, 3) : Qnil),
|
721
|
+
$5,
|
722
|
+
$8
|
723
|
+
);
|
724
|
+
}
|
725
|
+
|
726
|
+
directive_repeatable_opt:
|
727
|
+
/* nothing */ { $$ = Qnil; }
|
728
|
+
| REPEATABLE { $$ = Qtrue; }
|
729
|
+
|
730
|
+
directive_locations:
|
731
|
+
name { $$ = rb_ary_new_from_args(1, MAKE_AST_NODE(DirectiveLocation, 3, rb_ary_entry($1, 1), rb_ary_entry($1, 2), rb_ary_entry($1, 3))); }
|
732
|
+
| directive_locations PIPE name { rb_ary_push($$, MAKE_AST_NODE(DirectiveLocation, 3, rb_ary_entry($3, 1), rb_ary_entry($3, 2), rb_ary_entry($3, 3))); }
|
733
|
+
|
734
|
+
|
735
|
+
type_system_extension:
|
736
|
+
schema_extension
|
737
|
+
| type_extension
|
738
|
+
|
739
|
+
schema_extension:
|
740
|
+
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY {
|
741
|
+
$$ = MAKE_AST_NODE(SchemaExtension, 6,
|
742
|
+
rb_ary_entry($1, 1),
|
743
|
+
rb_ary_entry($1, 2),
|
744
|
+
// TODO use static strings:
|
745
|
+
rb_hash_aref($5, rb_str_new_cstr("query")),
|
746
|
+
rb_hash_aref($5, rb_str_new_cstr("mutation")),
|
747
|
+
rb_hash_aref($5, rb_str_new_cstr("subscription")),
|
748
|
+
$3
|
749
|
+
);
|
750
|
+
}
|
751
|
+
| EXTEND SCHEMA directives_list {
|
752
|
+
$$ = MAKE_AST_NODE(SchemaExtension, 6,
|
753
|
+
rb_ary_entry($1, 1),
|
754
|
+
rb_ary_entry($1, 2),
|
755
|
+
Qnil,
|
756
|
+
Qnil,
|
757
|
+
Qnil,
|
758
|
+
$3
|
759
|
+
);
|
760
|
+
}
|
761
|
+
|
762
|
+
type_extension:
|
763
|
+
scalar_type_extension
|
764
|
+
| object_type_extension
|
765
|
+
| interface_type_extension
|
766
|
+
| union_type_extension
|
767
|
+
| enum_type_extension
|
768
|
+
| input_object_type_extension
|
769
|
+
|
770
|
+
scalar_type_extension: EXTEND SCALAR name directives_list {
|
771
|
+
$$ = MAKE_AST_NODE(ScalarTypeExtension, 4,
|
772
|
+
rb_ary_entry($1, 1),
|
773
|
+
rb_ary_entry($1, 2),
|
774
|
+
rb_ary_entry($3, 3),
|
775
|
+
$4
|
776
|
+
);
|
777
|
+
}
|
778
|
+
|
779
|
+
object_type_extension:
|
780
|
+
EXTEND TYPE_LITERAL name implements_opt directives_list_opt field_definition_list_opt {
|
781
|
+
$$ = MAKE_AST_NODE(ObjectTypeExtension, 6,
|
782
|
+
rb_ary_entry($1, 1),
|
783
|
+
rb_ary_entry($1, 2),
|
784
|
+
rb_ary_entry($3, 3),
|
785
|
+
$4, // implements
|
786
|
+
$5,
|
787
|
+
$6
|
788
|
+
);
|
789
|
+
}
|
790
|
+
|
791
|
+
interface_type_extension:
|
792
|
+
EXTEND INTERFACE name implements_opt directives_list_opt field_definition_list_opt {
|
793
|
+
$$ = MAKE_AST_NODE(InterfaceTypeExtension, 6,
|
794
|
+
rb_ary_entry($1, 1),
|
795
|
+
rb_ary_entry($1, 2),
|
796
|
+
rb_ary_entry($3, 3),
|
797
|
+
$4,
|
798
|
+
$5,
|
799
|
+
$6
|
800
|
+
);
|
801
|
+
}
|
802
|
+
|
803
|
+
union_type_extension:
|
804
|
+
EXTEND UNION name directives_list_opt EQUALS union_members {
|
805
|
+
$$ = MAKE_AST_NODE(UnionTypeExtension, 5,
|
806
|
+
rb_ary_entry($1, 1),
|
807
|
+
rb_ary_entry($1, 2),
|
808
|
+
rb_ary_entry($3, 3),
|
809
|
+
$6, // types
|
810
|
+
$4
|
811
|
+
);
|
812
|
+
}
|
813
|
+
| EXTEND UNION name directives_list {
|
814
|
+
$$ = MAKE_AST_NODE(UnionTypeExtension, 5,
|
815
|
+
rb_ary_entry($1, 1),
|
816
|
+
rb_ary_entry($1, 2),
|
817
|
+
rb_ary_entry($3, 3),
|
818
|
+
GraphQL_Language_Nodes_NONE, // types
|
819
|
+
$4
|
820
|
+
);
|
821
|
+
}
|
822
|
+
|
823
|
+
enum_type_extension:
|
824
|
+
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
825
|
+
$$ = MAKE_AST_NODE(EnumTypeExtension, 5,
|
826
|
+
rb_ary_entry($1, 1),
|
827
|
+
rb_ary_entry($1, 2),
|
828
|
+
rb_ary_entry($3, 3),
|
829
|
+
$4,
|
830
|
+
$6
|
831
|
+
);
|
832
|
+
}
|
833
|
+
| EXTEND ENUM name directives_list {
|
834
|
+
$$ = MAKE_AST_NODE(EnumTypeExtension, 5,
|
835
|
+
rb_ary_entry($1, 1),
|
836
|
+
rb_ary_entry($1, 2),
|
837
|
+
rb_ary_entry($3, 3),
|
838
|
+
$4,
|
839
|
+
GraphQL_Language_Nodes_NONE
|
840
|
+
);
|
841
|
+
}
|
842
|
+
|
843
|
+
input_object_type_extension:
|
844
|
+
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
845
|
+
$$ = MAKE_AST_NODE(InputObjectTypeExtension, 5,
|
846
|
+
rb_ary_entry($1, 1),
|
847
|
+
rb_ary_entry($1, 2),
|
848
|
+
rb_ary_entry($3, 3),
|
849
|
+
$4,
|
850
|
+
$6
|
851
|
+
);
|
852
|
+
}
|
853
|
+
| EXTEND INPUT name directives_list {
|
854
|
+
$$ = MAKE_AST_NODE(InputObjectTypeExtension, 5,
|
855
|
+
rb_ary_entry($1, 1),
|
856
|
+
rb_ary_entry($1, 2),
|
857
|
+
rb_ary_entry($3, 3),
|
858
|
+
$4,
|
859
|
+
GraphQL_Language_Nodes_NONE
|
860
|
+
);
|
861
|
+
}
|
862
|
+
|
863
|
+
%%
|
864
|
+
|
865
|
+
// Custom functions
|
866
|
+
int yylex (YYSTYPE *lvalp, VALUE parser, VALUE filename) {
|
867
|
+
int next_token_idx = FIX2INT(rb_ivar_get(parser, rb_intern("@next_token_index")));
|
868
|
+
VALUE tokens = rb_ivar_get(parser, rb_intern("@tokens"));
|
869
|
+
VALUE next_token = rb_ary_entry(tokens, next_token_idx);
|
870
|
+
|
871
|
+
if (!RB_TEST(next_token)) {
|
872
|
+
return YYEOF;
|
873
|
+
}
|
874
|
+
rb_ivar_set(parser, rb_intern("@next_token_index"), INT2FIX(next_token_idx + 1));
|
875
|
+
VALUE token_type_rb_int = rb_ary_entry(next_token, 5);
|
876
|
+
int next_token_type = FIX2INT(token_type_rb_int);
|
877
|
+
|
878
|
+
*lvalp = next_token;
|
879
|
+
return next_token_type;
|
880
|
+
}
|
881
|
+
|
882
|
+
void yyerror(VALUE parser, VALUE filename, const char *msg) {
|
883
|
+
VALUE mGraphQL = rb_const_get_at(rb_cObject, rb_intern("GraphQL"));
|
884
|
+
VALUE mCParser = rb_const_get_at(mGraphQL, rb_intern("CParser"));
|
885
|
+
VALUE rb_message = rb_str_new_cstr(msg);
|
886
|
+
VALUE exception = rb_funcall(
|
887
|
+
mCParser, rb_intern("prepare_parse_error"), 2,
|
888
|
+
rb_message,
|
889
|
+
parser
|
890
|
+
);
|
891
|
+
rb_exc_raise(exception);
|
892
|
+
}
|
893
|
+
|
894
|
+
#define INITIALIZE_NODE_CLASS_VARIABLE(node_class_name) GraphQL_Language_Nodes_##node_class_name = rb_const_get_at(mGraphQLLanguageNodes, rb_intern(#node_class_name));
|
895
|
+
|
896
|
+
void initialize_node_class_variables() {
|
897
|
+
VALUE mGraphQL = rb_const_get_at(rb_cObject, rb_intern("GraphQL"));
|
898
|
+
VALUE mGraphQLLanguage = rb_const_get_at(mGraphQL, rb_intern("Language"));
|
899
|
+
VALUE mGraphQLLanguageNodes = rb_const_get_at(mGraphQLLanguage, rb_intern("Nodes"));
|
900
|
+
GraphQL_Language_Nodes_NONE = rb_const_get_at(mGraphQLLanguageNodes, rb_intern("NONE"));
|
901
|
+
r_string_query = rb_str_new_cstr("query");
|
902
|
+
rb_global_variable(&r_string_query);
|
903
|
+
rb_str_freeze(r_string_query);
|
904
|
+
|
905
|
+
INITIALIZE_NODE_CLASS_VARIABLE(Argument)
|
906
|
+
INITIALIZE_NODE_CLASS_VARIABLE(Directive)
|
907
|
+
INITIALIZE_NODE_CLASS_VARIABLE(Document)
|
908
|
+
INITIALIZE_NODE_CLASS_VARIABLE(Enum)
|
909
|
+
INITIALIZE_NODE_CLASS_VARIABLE(Field)
|
910
|
+
INITIALIZE_NODE_CLASS_VARIABLE(FragmentDefinition)
|
911
|
+
INITIALIZE_NODE_CLASS_VARIABLE(FragmentSpread)
|
912
|
+
INITIALIZE_NODE_CLASS_VARIABLE(InlineFragment)
|
913
|
+
INITIALIZE_NODE_CLASS_VARIABLE(InputObject)
|
914
|
+
INITIALIZE_NODE_CLASS_VARIABLE(ListType)
|
915
|
+
INITIALIZE_NODE_CLASS_VARIABLE(NonNullType)
|
916
|
+
INITIALIZE_NODE_CLASS_VARIABLE(NullValue)
|
917
|
+
INITIALIZE_NODE_CLASS_VARIABLE(OperationDefinition)
|
918
|
+
INITIALIZE_NODE_CLASS_VARIABLE(TypeName)
|
919
|
+
INITIALIZE_NODE_CLASS_VARIABLE(VariableDefinition)
|
920
|
+
INITIALIZE_NODE_CLASS_VARIABLE(VariableIdentifier)
|
921
|
+
|
922
|
+
INITIALIZE_NODE_CLASS_VARIABLE(ScalarTypeDefinition)
|
923
|
+
INITIALIZE_NODE_CLASS_VARIABLE(ObjectTypeDefinition)
|
924
|
+
INITIALIZE_NODE_CLASS_VARIABLE(InterfaceTypeDefinition)
|
925
|
+
INITIALIZE_NODE_CLASS_VARIABLE(UnionTypeDefinition)
|
926
|
+
INITIALIZE_NODE_CLASS_VARIABLE(EnumTypeDefinition)
|
927
|
+
INITIALIZE_NODE_CLASS_VARIABLE(InputObjectTypeDefinition)
|
928
|
+
INITIALIZE_NODE_CLASS_VARIABLE(EnumValueDefinition)
|
929
|
+
INITIALIZE_NODE_CLASS_VARIABLE(DirectiveDefinition)
|
930
|
+
INITIALIZE_NODE_CLASS_VARIABLE(DirectiveLocation)
|
931
|
+
INITIALIZE_NODE_CLASS_VARIABLE(FieldDefinition)
|
932
|
+
INITIALIZE_NODE_CLASS_VARIABLE(InputValueDefinition)
|
933
|
+
INITIALIZE_NODE_CLASS_VARIABLE(SchemaDefinition)
|
934
|
+
|
935
|
+
INITIALIZE_NODE_CLASS_VARIABLE(ScalarTypeExtension)
|
936
|
+
INITIALIZE_NODE_CLASS_VARIABLE(ObjectTypeExtension)
|
937
|
+
INITIALIZE_NODE_CLASS_VARIABLE(InterfaceTypeExtension)
|
938
|
+
INITIALIZE_NODE_CLASS_VARIABLE(UnionTypeExtension)
|
939
|
+
INITIALIZE_NODE_CLASS_VARIABLE(EnumTypeExtension)
|
940
|
+
INITIALIZE_NODE_CLASS_VARIABLE(InputObjectTypeExtension)
|
941
|
+
INITIALIZE_NODE_CLASS_VARIABLE(SchemaExtension)
|
942
|
+
}
|