2 * Copyright (c) 2016, Facebook, Inc.
5 * This source code is licensed under the MIT license found in the
6 * LICENSE file in the "hack" directory of this source tree.
14 | AttributeSpecification
16 | ClassBodyDeclaration
21 | ConstructorExpression
29 | Token
(* Special case, since it's so common, synonym of `Just "Token"` *)
31 | Aggregate
of aggregate_type
32 | ZeroOrMore
of child_spec
33 | ZeroOrOne
of child_spec
41 aggregates
: aggregate_type list
;
42 fields
: (string * child_spec
) list
;
45 let schema : schema_node list
=
48 kind_name
= "EndOfFile";
49 type_name
= "end_of_file";
50 func_name
= "end_of_file";
51 description
= "end_of_file";
52 prefix
= "end_of_file";
53 aggregates
= [TopLevelDeclaration
; TODO
];
54 fields
= [("token", Token
)];
60 description
= "script";
63 fields
= [("declarations", ZeroOrMore
(Aggregate TopLevelDeclaration
))];
66 kind_name
= "QualifiedName";
67 type_name
= "qualified_name";
68 func_name
= "qualified_name";
69 description
= "qualified_name";
70 prefix
= "qualified_name";
72 fields
= [("parts", ZeroOrMore Token
)];
75 kind_name
= "SimpleTypeSpecifier";
76 type_name
= "simple_type_specifier";
77 func_name
= "simple_type_specifier";
78 description
= "simple_type_specifier";
79 prefix
= "simple_type";
80 aggregates
= [Specifier
];
81 fields
= [("specifier", Aggregate Name
)];
84 kind_name
= "LiteralExpression";
85 type_name
= "literal_expression";
86 func_name
= "literal_expression";
87 description
= "literal";
89 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
90 fields
= [("expression", ZeroOrMore
(Aggregate Expression
))];
93 kind_name
= "PrefixedStringExpression";
94 type_name
= "prefixed_string_expression";
95 func_name
= "prefixed_string_expression";
96 description
= "prefixed_string";
97 prefix
= "prefixed_string";
98 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
99 fields
= [("name", Token
); ("str", Token
)];
102 kind_name
= "PrefixedCodeExpression";
103 type_name
= "prefixed_code_expression";
104 func_name
= "prefixed_code_expression";
105 description
= "prefixed_code";
106 prefix
= "prefixed_code";
107 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
111 ("left_backtick", Token
);
112 ("expression", Aggregate Expression
);
113 ("right_backtick", Token
);
117 kind_name
= "VariableExpression";
118 type_name
= "variable_expression";
119 func_name
= "variable_expression";
120 description
= "variable";
122 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
123 fields
= [("expression", Token
)];
126 kind_name
= "PipeVariableExpression";
127 type_name
= "pipe_variable_expression";
128 func_name
= "pipe_variable_expression";
129 description
= "pipe_variable";
130 prefix
= "pipe_variable";
131 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
132 fields
= [("expression", Token
)];
135 kind_name
= "FileAttributeSpecification";
136 type_name
= "file_attribute_specification";
137 func_name
= "file_attribute_specification";
138 description
= "file_attribute_specification";
139 prefix
= "file_attribute_specification";
140 aggregates
= [TopLevelDeclaration
];
143 ("left_double_angle", Token
);
146 ("attributes", ZeroOrMore
(Just
"ConstructorCall"));
147 ("right_double_angle", Token
);
150 (* TODO: Make all uses of attribute_spec consistent in the API. *);
152 kind_name
= "EnumDeclaration";
153 type_name
= "enum_declaration";
154 func_name
= "enum_declaration";
155 description
= "enum_declaration";
157 aggregates
= [TopLevelDeclaration
];
160 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
161 ("modifiers", ZeroOrOne Token
);
165 ("base", Aggregate Specifier
);
166 ("type", ZeroOrOne
(Just
"TypeConstraint"));
167 ("left_brace", Token
);
168 ("use_clauses", ZeroOrMore
(Just
"EnumUse"));
169 ("enumerators", ZeroOrMore
(Just
"Enumerator"));
170 ("right_brace", Token
);
174 kind_name
= "EnumUse";
175 type_name
= "enum_use";
176 func_name
= "enum_use";
177 description
= "enum_use";
183 ("names", ZeroOrMore
(Aggregate Specifier
));
184 ("semicolon", Token
);
188 kind_name
= "Enumerator";
189 type_name
= "enumerator";
190 func_name
= "enumerator";
191 description
= "enumerator";
192 prefix
= "enumerator";
198 ("value", Aggregate Expression
);
199 ("semicolon", Token
);
203 kind_name
= "EnumClassDeclaration";
204 type_name
= "enum_class_declaration";
205 func_name
= "enum_class_declaration";
206 description
= "enum_class_declaration";
207 prefix
= "enum_class";
208 aggregates
= [TopLevelDeclaration
];
211 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
212 ("modifiers", ZeroOrOne Token
);
213 ("enum_keyword", Token
);
214 ("class_keyword", Token
);
217 ("base", Aggregate Specifier
);
218 ("extends", ZeroOrOne Token
);
219 ("extends_list", ZeroOrMore
(Aggregate Specifier
));
220 ("left_brace", Token
);
221 ("elements", ZeroOrMore
(Just
"EnumClassEnumerator"));
222 ("right_brace", Token
);
226 kind_name
= "EnumClassEnumerator";
227 type_name
= "enum_class_enumerator";
228 func_name
= "enum_class_enumerator";
229 description
= "enum_class_enumerator";
230 prefix
= "enum_class_enumerator";
234 ("modifiers", ZeroOrOne Token
);
235 ("type", Aggregate Specifier
);
237 ("initializer", ZeroOrOne
(Just
"SimpleInitializer"));
238 ("semicolon", Token
);
242 kind_name
= "AliasDeclaration";
243 type_name
= "alias_declaration";
244 func_name
= "alias_declaration";
245 description
= "alias_declaration";
247 aggregates
= [TopLevelDeclaration
];
250 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
251 ("modifiers", ZeroOrOne Token
);
252 ("module_kw_opt", ZeroOrOne Token
);
254 ("name", ZeroOrOne Token
);
255 ("generic_parameter", ZeroOrOne
(Just
"TypeParameters"));
256 ("constraint", ZeroOrOne
(Just
"TypeConstraint"));
257 ("equal", ZeroOrOne Token
);
258 ("type", Aggregate Specifier
);
259 ("semicolon", Token
);
263 kind_name
= "ContextAliasDeclaration";
264 type_name
= "context_alias_declaration";
265 func_name
= "context_alias_declaration";
266 description
= "context_alias_declaration";
267 prefix
= "ctx_alias";
268 aggregates
= [TopLevelDeclaration
];
271 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
273 ("name", ZeroOrOne Token
);
274 ("generic_parameter", ZeroOrOne
(Just
"TypeParameters"));
275 ("as_constraint", ZeroOrOne
(Just
"ContextConstraint"));
276 ("equal", ZeroOrOne Token
);
277 ("context", Aggregate Specifier
);
278 ("semicolon", Token
);
282 kind_name
= "PropertyDeclaration";
283 type_name
= "property_declaration";
284 func_name
= "property_declaration";
285 description
= "property_declaration";
287 aggregates
= [ClassBodyDeclaration
];
290 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
291 ("modifiers", ZeroOrMore Token
);
292 ("type", ZeroOrOne
(Aggregate Specifier
));
293 ("declarators", ZeroOrMore
(Just
"PropertyDeclarator"));
294 ("semicolon", Token
);
298 kind_name
= "PropertyDeclarator";
299 type_name
= "property_declarator";
300 func_name
= "property_declarator";
301 description
= "property_declarator";
305 [("name", Token
); ("initializer", ZeroOrOne
(Just
"SimpleInitializer"))];
308 kind_name
= "NamespaceDeclaration";
309 type_name
= "namespace_declaration";
310 func_name
= "namespace_declaration";
311 description
= "namespace_declaration";
312 prefix
= "namespace";
313 aggregates
= [TopLevelDeclaration
];
316 ("header", Just
"NamespaceDeclarationHeader");
317 ("body", Aggregate NamespaceInternals
);
321 kind_name
= "NamespaceDeclarationHeader";
322 type_name
= "namespace_declaration_header";
323 func_name
= "namespace_declaration_header";
324 description
= "namespace_declaration_header";
325 prefix
= "namespace";
326 aggregates
= [TopLevelDeclaration
];
327 fields
= [("keyword", Token
); ("name", ZeroOrOne
(Aggregate Name
))];
330 kind_name
= "NamespaceBody";
331 type_name
= "namespace_body";
332 func_name
= "namespace_body";
333 description
= "namespace_body";
334 prefix
= "namespace";
335 aggregates
= [NamespaceInternals
];
338 ("left_brace", Token
);
339 ("declarations", ZeroOrMore
(Aggregate TopLevelDeclaration
));
340 ("right_brace", Token
);
344 kind_name
= "NamespaceEmptyBody";
345 type_name
= "namespace_empty_body";
346 func_name
= "namespace_empty_body";
347 description
= "namespace_empty_body";
348 prefix
= "namespace";
349 aggregates
= [NamespaceInternals
];
350 fields
= [("semicolon", Token
)];
353 kind_name
= "NamespaceUseDeclaration";
354 type_name
= "namespace_use_declaration";
355 func_name
= "namespace_use_declaration";
356 description
= "namespace_use_declaration";
357 prefix
= "namespace_use";
358 aggregates
= [TopLevelDeclaration
];
362 ("kind", ZeroOrOne Token
);
363 ("clauses", ZeroOrMore
(Just
"NamespaceUseClause"));
364 ("semicolon", ZeroOrOne Token
);
368 kind_name
= "NamespaceGroupUseDeclaration";
369 type_name
= "namespace_group_use_declaration";
370 func_name
= "namespace_group_use_declaration";
371 description
= "namespace_group_use_declaration";
372 prefix
= "namespace_group_use";
373 aggregates
= [TopLevelDeclaration
];
377 ("kind", ZeroOrOne Token
);
378 ("prefix", Aggregate Name
);
379 ("left_brace", Token
);
380 ("clauses", ZeroOrMore
(Just
"NamespaceUseClause"));
381 ("right_brace", Token
);
382 ("semicolon", Token
);
386 kind_name
= "NamespaceUseClause";
387 type_name
= "namespace_use_clause";
388 func_name
= "namespace_use_clause";
389 description
= "namespace_use_clause";
390 prefix
= "namespace_use";
394 ("clause_kind", ZeroOrOne Token
);
395 ("name", Aggregate Name
);
396 ("as", ZeroOrOne Token
);
397 ("alias", ZeroOrOne Token
);
401 kind_name
= "FunctionDeclaration";
402 type_name
= "function_declaration";
403 func_name
= "function_declaration";
404 description
= "function_declaration";
406 aggregates
= [TopLevelDeclaration
];
409 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
410 ("declaration_header", Just
"FunctionDeclarationHeader");
411 ("body", Just
"CompoundStatement");
415 kind_name
= "FunctionDeclarationHeader";
416 type_name
= "function_declaration_header";
417 func_name
= "function_declaration_header";
418 description
= "function_declaration_header";
423 ("modifiers", ZeroOrMore Token
);
426 ("type_parameter_list", ZeroOrOne
(Just
"TypeParameters"));
427 ("left_paren", Token
);
428 ("parameter_list", ZeroOrMore
(Aggregate Parameter
));
429 ("right_paren", Token
);
430 ("contexts", ZeroOrOne
(Just
"Contexts"));
431 ("colon", ZeroOrOne Token
);
432 ("readonly_return", ZeroOrOne Token
);
433 ("type", ZeroOrOne
(Just
"AttributizedSpecifier"));
434 ("where_clause", ZeroOrOne
(Just
"WhereClause"));
438 kind_name
= "Contexts";
439 type_name
= "contexts";
440 func_name
= "contexts";
441 description
= "contexts";
443 aggregates
= [Specifier
];
446 ("left_bracket", Token
);
447 ("types", ZeroOrMore
(Aggregate Specifier
));
448 ("right_bracket", Token
);
452 kind_name
= "WhereClause";
453 type_name
= "where_clause";
454 func_name
= "where_clause";
455 description
= "where_clause";
456 prefix
= "where_clause";
461 ("constraints", ZeroOrMore
(Just
"WhereConstraint"));
465 kind_name
= "WhereConstraint";
466 type_name
= "where_constraint";
467 func_name
= "where_constraint";
468 description
= "where_constraint";
469 prefix
= "where_constraint";
473 ("left_type", Aggregate Specifier
);
475 ("right_type", Aggregate Specifier
);
479 kind_name
= "MethodishDeclaration";
480 type_name
= "methodish_declaration";
481 func_name
= "methodish_declaration";
482 description
= "methodish_declaration";
483 prefix
= "methodish";
484 aggregates
= [ClassBodyDeclaration
];
487 ("attribute", ZeroOrOne
(Aggregate AttributeSpecification
));
488 ("function_decl_header", Just
"FunctionDeclarationHeader");
489 ("function_body", ZeroOrOne
(Just
"CompoundStatement"));
490 ("semicolon", ZeroOrOne Token
);
494 kind_name
= "MethodishTraitResolution";
495 type_name
= "methodish_trait_resolution";
496 func_name
= "methodish_trait_resolution";
497 description
= "methodish_trait_resolution";
498 prefix
= "methodish_trait";
499 aggregates
= [ClassBodyDeclaration
];
502 ("attribute", ZeroOrOne
(Aggregate AttributeSpecification
));
503 ("function_decl_header", Just
"FunctionDeclarationHeader");
505 ("name", Aggregate Specifier
);
506 ("semicolon", Token
);
510 kind_name
= "ClassishDeclaration";
511 type_name
= "classish_declaration";
512 func_name
= "classish_declaration";
513 description
= "classish_declaration";
515 aggregates
= [TopLevelDeclaration
];
518 ("attribute", ZeroOrOne
(Aggregate AttributeSpecification
));
519 ("modifiers", ZeroOrMore Token
);
520 ("xhp", ZeroOrOne Token
);
523 ("type_parameters", ZeroOrOne
(Just
"TypeParameters"));
524 ("extends_keyword", ZeroOrOne Token
);
525 ("extends_list", ZeroOrMore
(Aggregate Specifier
));
526 ("implements_keyword", ZeroOrOne Token
);
527 ("implements_list", ZeroOrMore
(Aggregate Specifier
));
528 ("where_clause", ZeroOrOne
(Just
"WhereClause"));
529 ("body", Just
"ClassishBody");
533 kind_name
= "ClassishBody";
534 type_name
= "classish_body";
535 func_name
= "classish_body";
536 description
= "classish_body";
537 prefix
= "classish_body";
541 ("left_brace", Token
);
542 ("elements", ZeroOrMore
(Aggregate ClassBodyDeclaration
));
543 ("right_brace", Token
);
547 kind_name
= "TraitUse";
548 type_name
= "trait_use";
549 func_name
= "trait_use";
550 description
= "trait_use";
551 prefix
= "trait_use";
556 ("names", ZeroOrMore
(Aggregate Specifier
));
557 ("semicolon", ZeroOrOne Token
);
561 kind_name
= "RequireClause";
562 type_name
= "require_clause";
563 func_name
= "require_clause";
564 description
= "require_clause";
566 aggregates
= [ClassBodyDeclaration
];
571 ("name", Aggregate Specifier
);
572 ("semicolon", Token
);
576 kind_name
= "ConstDeclaration";
577 type_name
= "const_declaration";
578 func_name
= "const_declaration";
579 description
= "const_declaration";
581 aggregates
= [ClassBodyDeclaration
; TopLevelDeclaration
];
584 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
585 ("modifiers", ZeroOrMore Token
);
587 ("type_specifier", ZeroOrOne
(Aggregate Specifier
));
588 ("declarators", ZeroOrMore
(Just
"ConstantDeclarator"));
589 ("semicolon", Token
);
593 kind_name
= "ConstantDeclarator";
594 type_name
= "constant_declarator";
595 func_name
= "constant_declarator";
596 description
= "constant_declarator";
597 prefix
= "constant_declarator";
600 [("name", Token
); ("initializer", ZeroOrOne
(Just
"SimpleInitializer"))];
603 kind_name
= "TypeConstDeclaration";
604 type_name
= "type_const_declaration";
605 func_name
= "type_const_declaration";
606 description
= "type_const_declaration";
607 prefix
= "type_const";
608 aggregates
= [ClassBodyDeclaration
];
611 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
612 ("modifiers", ZeroOrOne Token
);
614 ("type_keyword", Token
);
616 ("type_parameters", ZeroOrOne
(Just
"TypeParameters"));
617 ("type_constraints", ZeroOrMore
(Just
"TypeConstraint"));
618 ("equal", ZeroOrOne Token
);
619 ("type_specifier", ZeroOrOne
(Aggregate Specifier
));
620 ("semicolon", Token
);
624 kind_name
= "ContextConstDeclaration";
625 type_name
= "context_const_declaration";
626 func_name
= "context_const_declaration";
627 description
= "context_const_declaration";
628 prefix
= "context_const";
629 aggregates
= [ClassBodyDeclaration
];
632 ("modifiers", ZeroOrOne Token
);
633 ("const_keyword", Token
);
634 ("ctx_keyword", Token
);
636 ("type_parameters", ZeroOrOne
(Just
"TypeParameters"));
637 ("constraint", ZeroOrMore
(Just
"ContextConstraint"));
638 ("equal", ZeroOrOne Token
);
639 ("ctx_list", ZeroOrOne
(Just
"Contexts"));
640 ("semicolon", Token
);
644 kind_name
= "DecoratedExpression";
645 type_name
= "decorated_expression";
646 func_name
= "decorated_expression";
647 description
= "decorated_expression";
648 prefix
= "decorated_expression";
649 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
650 fields
= [("decorator", Token
); ("expression", Aggregate Expression
)];
653 kind_name
= "ParameterDeclaration";
654 type_name
= "parameter_declaration";
655 func_name
= "parameter_declaration";
656 description
= "parameter_declaration";
657 prefix
= "parameter";
658 aggregates
= [Parameter
];
661 ("attribute", ZeroOrOne
(Aggregate AttributeSpecification
));
662 ("visibility", ZeroOrOne Token
);
663 ("call_convention", ZeroOrOne Token
);
664 ("readonly", ZeroOrOne Token
);
665 ("type", ZeroOrOne
(Aggregate Specifier
));
666 ("name", Aggregate Expression
);
667 ("default_value", ZeroOrOne
(Just
"SimpleInitializer"));
671 kind_name
= "VariadicParameter";
672 type_name
= "variadic_parameter";
673 func_name
= "variadic_parameter";
674 description
= "variadic_parameter";
675 prefix
= "variadic_parameter";
676 aggregates
= [Specifier
; Parameter
];
679 ("call_convention", ZeroOrOne Token
);
680 ("type", ZeroOrOne
(Just
"SimpleTypeSpecifier"));
685 kind_name
= "OldAttributeSpecification";
686 type_name
= "old_attribute_specification";
687 func_name
= "old_attribute_specification";
688 description
= "old_attribute_specification";
689 prefix
= "old_attribute_specification";
690 aggregates
= [AttributeSpecification
];
693 ("left_double_angle", Token
);
694 ("attributes", ZeroOrMore
(Just
"ConstructorCall"));
695 ("right_double_angle", Token
);
699 kind_name
= "AttributeSpecification";
700 type_name
= "attribute_specification";
701 func_name
= "attribute_specification";
702 description
= "attribute_specification";
703 prefix
= "attribute_specification";
704 aggregates
= [AttributeSpecification
];
705 fields
= [("attributes", ZeroOrMore
(Just
"Attribute"))];
708 kind_name
= "Attribute";
709 type_name
= "attribute";
710 func_name
= "attribute";
711 description
= "attribute";
712 prefix
= "attribute";
714 fields
= [("at", Token
); ("attribute_name", Just
"ConstructorCall")];
717 kind_name
= "InclusionExpression";
718 type_name
= "inclusion_expression";
719 func_name
= "inclusion_expression";
720 description
= "inclusion_expression";
721 prefix
= "inclusion";
722 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
723 fields
= [("require", Token
); ("filename", Aggregate Expression
)];
726 kind_name
= "InclusionDirective";
727 type_name
= "inclusion_directive";
728 func_name
= "inclusion_directive";
729 description
= "inclusion_directive";
730 prefix
= "inclusion";
731 aggregates
= [TopLevelDeclaration
; Statement
];
733 [("expression", Just
"InclusionExpression"); ("semicolon", Token
)];
736 kind_name
= "CompoundStatement";
737 type_name
= "compound_statement";
738 func_name
= "compound_statement";
739 description
= "compound_statement";
741 aggregates
= [TopLevelDeclaration
; Statement
; LambdaBody
];
744 ("left_brace", Token
);
745 ("statements", ZeroOrMore
(Aggregate Statement
));
746 ("right_brace", Token
);
750 kind_name
= "ExpressionStatement";
751 type_name
= "expression_statement";
752 func_name
= "expression_statement";
753 description
= "expression_statement";
754 prefix
= "expression_statement";
755 aggregates
= [TopLevelDeclaration
; Statement
];
757 [("expression", ZeroOrOne
(Aggregate Expression
)); ("semicolon", Token
)];
760 kind_name
= "MarkupSection";
761 type_name
= "markup_section";
762 func_name
= "markup_section";
763 description
= "markup_section";
765 aggregates
= [TopLevelDeclaration
; Statement
];
767 [("hashbang", Token
); ("suffix", ZeroOrOne
(Just
"MarkupSuffix"))];
770 kind_name
= "MarkupSuffix";
771 type_name
= "markup_suffix";
772 func_name
= "markup_suffix";
773 description
= "markup_suffix";
774 prefix
= "markup_suffix";
775 aggregates
= [TopLevelDeclaration
; Statement
];
776 fields
= [("less_than_question", Token
); ("name", ZeroOrOne Token
)];
779 kind_name
= "UnsetStatement";
780 type_name
= "unset_statement";
781 func_name
= "unset_statement";
782 description
= "unset_statement";
784 aggregates
= [TopLevelDeclaration
; Statement
];
788 ("left_paren", Token
);
789 ("variables", ZeroOrMore
(Aggregate Expression
));
790 ("right_paren", Token
);
791 ("semicolon", Token
);
795 kind_name
= "UsingStatementBlockScoped";
796 type_name
= "using_statement_block_scoped";
797 func_name
= "using_statement_block_scoped";
798 description
= "using_statement_block_scoped";
799 prefix
= "using_block";
800 aggregates
= [TopLevelDeclaration
; Statement
];
803 ("await_keyword", ZeroOrOne Token
);
804 ("using_keyword", Token
);
805 ("left_paren", Token
);
806 ("expressions", ZeroOrMore
(Aggregate Expression
));
807 ("right_paren", Token
);
808 ("body", Aggregate Statement
);
812 kind_name
= "UsingStatementFunctionScoped";
813 type_name
= "using_statement_function_scoped";
814 func_name
= "using_statement_function_scoped";
815 description
= "using_statement_function_scoped";
816 prefix
= "using_function";
817 aggregates
= [TopLevelDeclaration
; Statement
];
820 ("await_keyword", ZeroOrOne Token
);
821 ("using_keyword", Token
);
822 ("expression", Aggregate Expression
);
823 ("semicolon", Token
);
827 kind_name
= "WhileStatement";
828 type_name
= "while_statement";
829 func_name
= "while_statement";
830 description
= "while_statement";
832 aggregates
= [TopLevelDeclaration
; Statement
];
836 ("left_paren", Token
);
837 ("condition", Aggregate Expression
);
838 ("right_paren", Token
);
839 ("body", Aggregate Statement
);
843 kind_name
= "IfStatement";
844 type_name
= "if_statement";
845 func_name
= "if_statement";
846 description
= "if_statement";
848 aggregates
= [TopLevelDeclaration
; Statement
];
852 ("left_paren", Token
);
853 ("condition", Aggregate Expression
);
854 ("right_paren", Token
);
855 ("statement", Aggregate Statement
);
856 ("else_clause", ZeroOrOne
(Just
"ElseClause"));
860 kind_name
= "ElseClause";
861 type_name
= "else_clause";
862 func_name
= "else_clause";
863 description
= "else_clause";
866 fields
= [("keyword", Token
); ("statement", Aggregate Statement
)];
869 kind_name
= "TryStatement";
870 type_name
= "try_statement";
871 func_name
= "try_statement";
872 description
= "try_statement";
874 aggregates
= [TopLevelDeclaration
; Statement
];
878 ("compound_statement", Just
"CompoundStatement");
879 ("catch_clauses", ZeroOrMore
(Just
"CatchClause"));
880 ("finally_clause", ZeroOrOne
(Just
"FinallyClause"));
884 kind_name
= "CatchClause";
885 type_name
= "catch_clause";
886 func_name
= "catch_clause";
887 description
= "catch_clause";
893 ("left_paren", Token
);
894 ("type", Just
"SimpleTypeSpecifier");
896 ("right_paren", Token
);
897 ("body", Just
"CompoundStatement");
901 kind_name
= "FinallyClause";
902 type_name
= "finally_clause";
903 func_name
= "finally_clause";
904 description
= "finally_clause";
907 fields
= [("keyword", Token
); ("body", Just
"CompoundStatement")];
910 kind_name
= "DoStatement";
911 type_name
= "do_statement";
912 func_name
= "do_statement";
913 description
= "do_statement";
915 aggregates
= [TopLevelDeclaration
; Statement
];
919 ("body", Aggregate Statement
);
920 ("while_keyword", Token
);
921 ("left_paren", Token
);
922 ("condition", Aggregate Expression
);
923 ("right_paren", Token
);
924 ("semicolon", Token
);
928 kind_name
= "ForStatement";
929 type_name
= "for_statement";
930 func_name
= "for_statement";
931 description
= "for_statement";
933 aggregates
= [TopLevelDeclaration
; Statement
];
937 ("left_paren", Token
);
938 ("initializer", ZeroOrMore
(Aggregate Expression
));
939 ("first_semicolon", Token
);
940 ("control", ZeroOrMore
(Aggregate Expression
));
941 ("second_semicolon", Token
);
942 ("end_of_loop", ZeroOrMore
(Aggregate Expression
));
943 ("right_paren", Token
);
944 ("body", Aggregate Statement
);
948 kind_name
= "ForeachStatement";
949 type_name
= "foreach_statement";
950 func_name
= "foreach_statement";
951 description
= "foreach_statement";
953 aggregates
= [TopLevelDeclaration
; Statement
];
957 ("left_paren", Token
);
958 ("collection", Aggregate Expression
);
959 ("await_keyword", ZeroOrOne Token
);
961 ("key", ZeroOrOne
(Aggregate Expression
));
962 ("arrow", ZeroOrOne Token
);
963 ("value", Aggregate Expression
);
964 ("right_paren", Token
);
965 ("body", Aggregate Statement
);
969 kind_name
= "SwitchStatement";
970 type_name
= "switch_statement";
971 func_name
= "switch_statement";
972 description
= "switch_statement";
974 aggregates
= [Statement
];
978 ("left_paren", Token
);
979 ("expression", Aggregate Expression
);
980 ("right_paren", Token
);
981 ("left_brace", Token
);
982 ("sections", ZeroOrMore
(Just
"SwitchSection"));
983 ("right_brace", Token
);
987 kind_name
= "SwitchSection";
988 type_name
= "switch_section";
989 func_name
= "switch_section";
990 description
= "switch_section";
991 prefix
= "switch_section";
995 ("labels", ZeroOrMore
(Aggregate SwitchLabel
));
996 ("statements", ZeroOrMore
(Aggregate TopLevelDeclaration
));
997 ("fallthrough", ZeroOrOne
(Just
"SwitchFallthrough"));
1001 kind_name
= "SwitchFallthrough";
1002 type_name
= "switch_fallthrough";
1003 func_name
= "switch_fallthrough";
1004 description
= "switch_fallthrough";
1005 prefix
= "fallthrough";
1006 aggregates
= [TopLevelDeclaration
; Statement
];
1007 fields
= [("keyword", Token
); ("semicolon", Token
)];
1010 kind_name
= "CaseLabel";
1011 type_name
= "case_label";
1012 func_name
= "case_label";
1013 description
= "case_label";
1015 aggregates
= [SwitchLabel
];
1019 ("expression", Aggregate Expression
);
1024 kind_name
= "DefaultLabel";
1025 type_name
= "default_label";
1026 func_name
= "default_label";
1027 description
= "default_label";
1029 aggregates
= [SwitchLabel
];
1030 fields
= [("keyword", Token
); ("colon", Token
)];
1033 kind_name
= "ReturnStatement";
1034 type_name
= "return_statement";
1035 func_name
= "return_statement";
1036 description
= "return_statement";
1038 aggregates
= [TopLevelDeclaration
; Statement
];
1042 ("expression", ZeroOrOne
(Aggregate Expression
));
1043 ("semicolon", ZeroOrOne Token
);
1047 kind_name
= "YieldBreakStatement";
1048 type_name
= "yield_break_statement";
1049 func_name
= "yield_break_statement";
1050 description
= "yield_break_statement";
1051 prefix
= "yield_break";
1052 aggregates
= [TopLevelDeclaration
; Statement
];
1053 fields
= [("keyword", Token
); ("break", Token
); ("semicolon", Token
)];
1056 kind_name
= "ThrowStatement";
1057 type_name
= "throw_statement";
1058 func_name
= "throw_statement";
1059 description
= "throw_statement";
1061 aggregates
= [TopLevelDeclaration
; Statement
];
1065 ("expression", Aggregate Expression
);
1066 ("semicolon", Token
);
1070 kind_name
= "BreakStatement";
1071 type_name
= "break_statement";
1072 func_name
= "break_statement";
1073 description
= "break_statement";
1075 aggregates
= [TopLevelDeclaration
; Statement
];
1076 fields
= [("keyword", Token
); ("semicolon", Token
)];
1079 kind_name
= "ContinueStatement";
1080 type_name
= "continue_statement";
1081 func_name
= "continue_statement";
1082 description
= "continue_statement";
1083 prefix
= "continue";
1084 aggregates
= [TopLevelDeclaration
; Statement
];
1085 fields
= [("keyword", Token
); ("semicolon", Token
)];
1088 kind_name
= "EchoStatement";
1089 type_name
= "echo_statement";
1090 func_name
= "echo_statement";
1091 description
= "echo_statement";
1093 aggregates
= [TopLevelDeclaration
; Statement
];
1097 ("expressions", ZeroOrMore
(Aggregate Expression
));
1098 ("semicolon", Token
);
1102 kind_name
= "ConcurrentStatement";
1103 type_name
= "concurrent_statement";
1104 func_name
= "concurrent_statement";
1105 description
= "concurrent_statement";
1106 prefix
= "concurrent";
1107 aggregates
= [Statement
];
1108 fields
= [("keyword", Token
); ("statement", Aggregate Statement
)];
1111 kind_name
= "SimpleInitializer";
1112 type_name
= "simple_initializer";
1113 func_name
= "simple_initializer";
1114 description
= "simple_initializer";
1115 prefix
= "simple_initializer";
1117 fields
= [("equal", Token
); ("value", Aggregate Expression
)];
1120 kind_name
= "AnonymousClass";
1121 type_name
= "anonymous_class";
1122 func_name
= "anonymous_class";
1123 description
= "anonymous_class";
1124 prefix
= "anonymous_class";
1125 aggregates
= [ObjectCreationWhat
];
1128 ("class_keyword", Token
);
1129 ("left_paren", ZeroOrOne Token
);
1130 ("argument_list", ZeroOrMore
(Aggregate Expression
));
1131 ("right_paren", ZeroOrOne Token
);
1132 ("extends_keyword", ZeroOrOne Token
);
1133 ("extends_list", ZeroOrMore
(Aggregate Specifier
));
1134 ("implements_keyword", ZeroOrOne Token
);
1135 ("implements_list", ZeroOrMore
(Aggregate Specifier
));
1136 ("body", Just
"ClassishBody");
1140 kind_name
= "AnonymousFunction";
1141 type_name
= "anonymous_function";
1142 func_name
= "anonymous_function";
1143 description
= "anonymous_function";
1144 prefix
= "anonymous";
1145 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1148 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
1149 ("async_keyword", ZeroOrOne Token
);
1150 ("function_keyword", Token
);
1151 ("left_paren", Token
);
1152 ("parameters", ZeroOrMore
(Aggregate Parameter
));
1153 ("right_paren", Token
);
1154 ("ctx_list", ZeroOrOne
(Just
"Contexts"));
1155 ("colon", ZeroOrOne Token
);
1156 ("readonly_return", ZeroOrOne Token
);
1157 ("type", ZeroOrOne
(Aggregate Specifier
));
1158 ("use", ZeroOrOne
(Just
"AnonymousFunctionUseClause"));
1159 ("body", Just
"CompoundStatement");
1163 kind_name
= "AnonymousFunctionUseClause";
1164 type_name
= "anonymous_function_use_clause";
1165 func_name
= "anonymous_function_use_clause";
1166 description
= "anonymous_function_use_clause";
1167 prefix
= "anonymous_use";
1172 ("left_paren", Token
);
1173 ("variables", ZeroOrMore
(Aggregate Expression
));
1174 ("right_paren", Token
);
1178 kind_name
= "LambdaExpression";
1179 type_name
= "lambda_expression";
1180 func_name
= "lambda_expression";
1181 description
= "lambda_expression";
1183 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1186 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
1187 ("async", ZeroOrOne Token
);
1188 ("signature", Aggregate Specifier
);
1190 ("body", Aggregate LambdaBody
);
1194 kind_name
= "LambdaSignature";
1195 type_name
= "lambda_signature";
1196 func_name
= "lambda_signature";
1197 description
= "lambda_signature";
1199 aggregates
= [Specifier
];
1202 ("left_paren", Token
);
1203 ("parameters", ZeroOrMore
(Aggregate Parameter
));
1204 ("right_paren", Token
);
1205 ("contexts", ZeroOrOne
(Just
"Contexts"));
1206 ("colon", ZeroOrOne Token
);
1207 ("readonly_return", ZeroOrOne Token
);
1208 ("type", ZeroOrOne
(Aggregate Specifier
));
1212 kind_name
= "CastExpression";
1213 type_name
= "cast_expression";
1214 func_name
= "cast_expression";
1215 description
= "cast_expression";
1217 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1220 ("left_paren", Token
);
1222 ("right_paren", Token
);
1223 ("operand", Aggregate Expression
);
1227 kind_name
= "ScopeResolutionExpression";
1228 type_name
= "scope_resolution_expression";
1229 func_name
= "scope_resolution_expression";
1230 description
= "scope_resolution_expression";
1231 prefix
= "scope_resolution";
1232 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1235 ("qualifier", Aggregate Expression
);
1236 ("operator", Token
);
1237 ("name", Aggregate Expression
);
1241 kind_name
= "MemberSelectionExpression";
1242 type_name
= "member_selection_expression";
1243 func_name
= "member_selection_expression";
1244 description
= "member_selection_expression";
1246 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1248 [("object", Aggregate Expression
); ("operator", Token
); ("name", Token
)];
1251 kind_name
= "SafeMemberSelectionExpression";
1252 type_name
= "safe_member_selection_expression";
1253 func_name
= "safe_member_selection_expression";
1254 description
= "safe_member_selection_expression";
1255 prefix
= "safe_member";
1256 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1258 [("object", Aggregate Expression
); ("operator", Token
); ("name", Token
)];
1261 kind_name
= "EmbeddedMemberSelectionExpression";
1262 type_name
= "embedded_member_selection_expression";
1263 func_name
= "embedded_member_selection_expression";
1264 description
= "embedded_member_selection_expression";
1265 prefix
= "embedded_member";
1266 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1269 ("object", Just
"VariableExpression");
1270 ("operator", Token
);
1275 kind_name
= "YieldExpression";
1276 type_name
= "yield_expression";
1277 func_name
= "yield_expression";
1278 description
= "yield_expression";
1280 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1282 [("keyword", Token
); ("operand", Aggregate ConstructorExpression
)];
1285 kind_name
= "PrefixUnaryExpression";
1286 type_name
= "prefix_unary_expression";
1287 func_name
= "prefix_unary_expression";
1288 description
= "prefix_unary_expression";
1289 prefix
= "prefix_unary";
1290 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1291 fields
= [("operator", Token
); ("operand", Aggregate Expression
)];
1294 kind_name
= "PostfixUnaryExpression";
1295 type_name
= "postfix_unary_expression";
1296 func_name
= "postfix_unary_expression";
1297 description
= "postfix_unary_expression";
1298 prefix
= "postfix_unary";
1299 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1300 fields
= [("operand", Aggregate Expression
); ("operator", Token
)];
1303 kind_name
= "BinaryExpression";
1304 type_name
= "binary_expression";
1305 func_name
= "binary_expression";
1306 description
= "binary_expression";
1308 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1311 ("left_operand", Aggregate Expression
);
1312 ("operator", Token
);
1313 ("right_operand", Aggregate Expression
);
1317 kind_name
= "IsExpression";
1318 type_name
= "is_expression";
1319 func_name
= "is_expression";
1320 description
= "is_expression";
1322 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1325 ("left_operand", Aggregate Expression
);
1326 ("operator", Token
);
1327 ("right_operand", Aggregate Specifier
);
1331 kind_name
= "AsExpression";
1332 type_name
= "as_expression";
1333 func_name
= "as_expression";
1334 description
= "as_expression";
1336 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1339 ("left_operand", Aggregate Expression
);
1340 ("operator", Token
);
1341 ("right_operand", Aggregate Specifier
);
1345 kind_name
= "NullableAsExpression";
1346 type_name
= "nullable_as_expression";
1347 func_name
= "nullable_as_expression";
1348 description
= "nullable_as_expression";
1349 prefix
= "nullable_as";
1350 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1353 ("left_operand", Aggregate Expression
);
1354 ("operator", Token
);
1355 ("right_operand", Aggregate Specifier
);
1359 kind_name
= "UpcastExpression";
1360 type_name
= "upcast_expression";
1361 func_name
= "upcast_expression";
1362 description
= "upcast_expression";
1364 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1367 ("left_operand", Aggregate Expression
);
1368 ("operator", Token
);
1369 ("right_operand", Aggregate Specifier
);
1373 kind_name
= "ConditionalExpression";
1374 type_name
= "conditional_expression";
1375 func_name
= "conditional_expression";
1376 description
= "conditional_expression";
1377 prefix
= "conditional";
1378 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1381 ("test", Aggregate Expression
);
1382 ("question", Token
);
1383 ("consequence", ZeroOrOne
(Aggregate Expression
));
1385 ("alternative", Aggregate Expression
);
1389 kind_name
= "EvalExpression";
1390 type_name
= "eval_expression";
1391 func_name
= "eval_expression";
1392 description
= "eval_expression";
1394 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1398 ("left_paren", Token
);
1399 ("argument", Aggregate Expression
);
1400 ("right_paren", Token
);
1404 kind_name
= "IssetExpression";
1405 type_name
= "isset_expression";
1406 func_name
= "isset_expression";
1407 description
= "isset_expression";
1409 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1413 ("left_paren", Token
);
1414 ("argument_list", ZeroOrMore
(Aggregate Expression
));
1415 ("right_paren", Token
);
1419 kind_name
= "FunctionCallExpression";
1420 type_name
= "function_call_expression";
1421 func_name
= "function_call_expression";
1422 description
= "function_call_expression";
1423 prefix
= "function_call";
1424 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1427 ("receiver", Aggregate Expression
);
1428 ("type_args", ZeroOrOne
(Just
"TypeArguments"));
1429 ("left_paren", Token
);
1430 ("argument_list", ZeroOrMore
(Aggregate Expression
));
1431 ("right_paren", Token
);
1435 kind_name
= "FunctionPointerExpression";
1436 type_name
= "function_pointer_expression";
1437 func_name
= "function_pointer_expression";
1438 description
= "function_pointer_expression";
1439 prefix
= "function_pointer";
1440 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1443 ("receiver", Aggregate Expression
); ("type_args", Just
"TypeArguments");
1447 kind_name
= "ParenthesizedExpression";
1448 type_name
= "parenthesized_expression";
1449 func_name
= "parenthesized_expression";
1450 description
= "parenthesized_expression";
1451 prefix
= "parenthesized_expression";
1452 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1455 ("left_paren", Token
);
1456 ("expression", Aggregate Expression
);
1457 ("right_paren", Token
);
1461 kind_name
= "BracedExpression";
1462 type_name
= "braced_expression";
1463 func_name
= "braced_expression";
1464 description
= "braced_expression";
1465 prefix
= "braced_expression";
1466 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1469 ("left_brace", Token
);
1470 ("expression", Aggregate Expression
);
1471 ("right_brace", Token
);
1475 kind_name
= "ETSpliceExpression";
1476 type_name
= "et_splice_expression";
1477 func_name
= "et_splice_expression";
1478 description
= "et_splice_expression";
1479 prefix
= "et_splice_expression";
1480 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1484 ("left_brace", Token
);
1485 ("expression", Aggregate Expression
);
1486 ("right_brace", Token
);
1490 kind_name
= "EmbeddedBracedExpression";
1491 type_name
= "embedded_braced_expression";
1492 func_name
= "embedded_braced_expression";
1493 description
= "embedded_braced_expression";
1494 prefix
= "embedded_braced_expression";
1495 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1498 ("left_brace", Token
);
1499 ("expression", Aggregate Expression
);
1500 ("right_brace", Token
);
1504 kind_name
= "ListExpression";
1505 type_name
= "list_expression";
1506 func_name
= "list_expression";
1507 description
= "list_expression";
1509 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1513 ("left_paren", Token
);
1514 ("members", ZeroOrMore
(Aggregate Expression
));
1515 ("right_paren", Token
);
1519 kind_name
= "CollectionLiteralExpression";
1520 type_name
= "collection_literal_expression";
1521 func_name
= "collection_literal_expression";
1522 description
= "collection_literal_expression";
1523 prefix
= "collection_literal";
1524 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1527 ("name", Aggregate Specifier
);
1528 ("left_brace", Token
);
1529 ("initializers", ZeroOrMore
(Aggregate ConstructorExpression
));
1530 ("right_brace", Token
);
1534 kind_name
= "ObjectCreationExpression";
1535 type_name
= "object_creation_expression";
1536 func_name
= "object_creation_expression";
1537 description
= "object_creation_expression";
1538 prefix
= "object_creation";
1539 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1541 [("new_keyword", Token
); ("object", Aggregate ObjectCreationWhat
)];
1544 kind_name
= "ConstructorCall";
1545 type_name
= "constructor_call";
1546 func_name
= "constructor_call";
1547 description
= "constructor_call";
1548 prefix
= "constructor_call";
1549 aggregates
= [ObjectCreationWhat
];
1552 ("type", Aggregate TODO
);
1553 ("left_paren", ZeroOrOne Token
);
1554 ("argument_list", ZeroOrMore
(Aggregate Expression
));
1555 ("right_paren", ZeroOrOne Token
);
1559 kind_name
= "DarrayIntrinsicExpression";
1560 type_name
= "darray_intrinsic_expression";
1561 func_name
= "darray_intrinsic_expression";
1562 description
= "darray_intrinsic_expression";
1563 prefix
= "darray_intrinsic";
1564 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1568 ("explicit_type", ZeroOrOne
(Just
"TypeArguments"));
1569 ("left_bracket", Token
);
1570 ("members", ZeroOrMore
(Just
"ElementInitializer"));
1571 ("right_bracket", Token
);
1575 kind_name
= "DictionaryIntrinsicExpression";
1576 type_name
= "dictionary_intrinsic_expression";
1577 func_name
= "dictionary_intrinsic_expression";
1578 description
= "dictionary_intrinsic_expression";
1579 prefix
= "dictionary_intrinsic";
1580 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1584 ("explicit_type", ZeroOrOne
(Just
"TypeArguments"));
1585 ("left_bracket", Token
);
1586 ("members", ZeroOrMore
(Just
"ElementInitializer"));
1587 ("right_bracket", Token
);
1591 kind_name
= "KeysetIntrinsicExpression";
1592 type_name
= "keyset_intrinsic_expression";
1593 func_name
= "keyset_intrinsic_expression";
1594 description
= "keyset_intrinsic_expression";
1595 prefix
= "keyset_intrinsic";
1596 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1600 ("explicit_type", ZeroOrOne
(Just
"TypeArguments"));
1601 ("left_bracket", Token
);
1602 ("members", ZeroOrMore
(Aggregate Expression
));
1603 ("right_bracket", Token
);
1607 kind_name
= "VarrayIntrinsicExpression";
1608 type_name
= "varray_intrinsic_expression";
1609 func_name
= "varray_intrinsic_expression";
1610 description
= "varray_intrinsic_expression";
1611 prefix
= "varray_intrinsic";
1612 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1616 ("explicit_type", ZeroOrOne
(Just
"TypeArguments"));
1617 ("left_bracket", Token
);
1618 ("members", ZeroOrMore
(Aggregate Expression
));
1619 ("right_bracket", Token
);
1623 kind_name
= "VectorIntrinsicExpression";
1624 type_name
= "vector_intrinsic_expression";
1625 func_name
= "vector_intrinsic_expression";
1626 description
= "vector_intrinsic_expression";
1627 prefix
= "vector_intrinsic";
1628 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1632 ("explicit_type", ZeroOrOne
(Just
"TypeArguments"));
1633 ("left_bracket", Token
);
1634 ("members", ZeroOrMore
(Aggregate Expression
));
1635 ("right_bracket", Token
);
1639 kind_name
= "ElementInitializer";
1640 type_name
= "element_initializer";
1641 func_name
= "element_initializer";
1642 description
= "element_initializer";
1644 aggregates
= [ConstructorExpression
];
1647 ("key", Aggregate Expression
);
1649 ("value", Aggregate Expression
);
1653 kind_name
= "SubscriptExpression";
1654 type_name
= "subscript_expression";
1655 func_name
= "subscript_expression";
1656 description
= "subscript_expression";
1657 prefix
= "subscript";
1658 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1661 ("receiver", Aggregate Expression
);
1662 ("left_bracket", Token
);
1663 ("index", ZeroOrOne
(Aggregate Expression
));
1664 ("right_bracket", Token
);
1668 kind_name
= "EmbeddedSubscriptExpression";
1669 type_name
= "embedded_subscript_expression";
1670 func_name
= "embedded_subscript_expression";
1671 description
= "embedded_subscript_expression";
1672 prefix
= "embedded_subscript";
1673 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1676 ("receiver", Just
"VariableExpression");
1677 ("left_bracket", Token
);
1678 ("index", Aggregate Expression
);
1679 ("right_bracket", Token
);
1683 kind_name
= "AwaitableCreationExpression";
1684 type_name
= "awaitable_creation_expression";
1685 func_name
= "awaitable_creation_expression";
1686 description
= "awaitable_creation_expression";
1687 prefix
= "awaitable";
1688 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1691 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
1693 ("compound_statement", Just
"CompoundStatement");
1697 kind_name
= "XHPChildrenDeclaration";
1698 type_name
= "xhp_children_declaration";
1699 func_name
= "xhp_children_declaration";
1700 description
= "xhp_children_declaration";
1701 prefix
= "xhp_children";
1702 aggregates
= [ClassBodyDeclaration
];
1706 ("expression", Aggregate Expression
);
1707 ("semicolon", Token
);
1711 kind_name
= "XHPChildrenParenthesizedList";
1712 type_name
= "xhp_children_parenthesized_list";
1713 func_name
= "xhp_children_parenthesized_list";
1714 description
= "xhp_children_parenthesized_list";
1715 prefix
= "xhp_children_list";
1716 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1719 ("left_paren", Token
);
1720 ("xhp_children", ZeroOrMore
(Aggregate Expression
));
1721 ("right_paren", Token
);
1725 kind_name
= "XHPCategoryDeclaration";
1726 type_name
= "xhp_category_declaration";
1727 func_name
= "xhp_category_declaration";
1728 description
= "xhp_category_declaration";
1729 prefix
= "xhp_category";
1730 aggregates
= [ClassBodyDeclaration
];
1734 ("categories", ZeroOrMore Token
);
1735 ("semicolon", Token
);
1739 kind_name
= "XHPEnumType";
1740 type_name
= "xhp_enum_type";
1741 func_name
= "xhp_enum_type";
1742 description
= "xhp_enum_type";
1743 prefix
= "xhp_enum";
1744 aggregates
= [Specifier
];
1747 ("like", ZeroOrOne Token
);
1749 ("left_brace", Token
);
1750 ("values", ZeroOrMore
(Just
"LiteralExpression"));
1751 ("right_brace", Token
);
1755 kind_name
= "XHPLateinit";
1756 type_name
= "xhp_lateinit";
1757 func_name
= "xhp_lateinit";
1758 description
= "xhp_lateinit";
1759 prefix
= "xhp_lateinit";
1761 fields
= [("at", Token
); ("keyword", Token
)];
1764 kind_name
= "XHPRequired";
1765 type_name
= "xhp_required";
1766 func_name
= "xhp_required";
1767 description
= "xhp_required";
1768 prefix
= "xhp_required";
1770 fields
= [("at", Token
); ("keyword", Token
)];
1773 kind_name
= "XHPClassAttributeDeclaration";
1774 type_name
= "xhp_class_attribute_declaration";
1775 func_name
= "xhp_class_attribute_declaration";
1776 description
= "xhp_class_attribute_declaration";
1777 prefix
= "xhp_attribute";
1778 aggregates
= [ClassBodyDeclaration
];
1782 ("attributes", ZeroOrMore
(Aggregate TODO
));
1783 ("semicolon", Token
);
1787 kind_name
= "XHPClassAttribute";
1788 type_name
= "xhp_class_attribute";
1789 func_name
= "xhp_class_attribute";
1790 description
= "xhp_class_attribute";
1791 prefix
= "xhp_attribute_decl";
1795 ("type", Aggregate Specifier
);
1797 ("initializer", ZeroOrOne
(Just
"SimpleInitializer"));
1798 ("required", ZeroOrOne
(Just
"XHPRequired"));
1802 kind_name
= "XHPSimpleClassAttribute";
1803 type_name
= "xhp_simple_class_attribute";
1804 func_name
= "xhp_simple_class_attribute";
1805 description
= "xhp_simple_class_attribute";
1806 prefix
= "xhp_simple_class_attribute";
1808 fields
= [("type", Just
"SimpleTypeSpecifier")];
1811 kind_name
= "XHPSimpleAttribute";
1812 type_name
= "xhp_simple_attribute";
1813 func_name
= "xhp_simple_attribute";
1814 description
= "xhp_simple_attribute";
1815 prefix
= "xhp_simple_attribute";
1816 aggregates
= [XHPAttribute
];
1819 ("name", Token
); ("equal", Token
); ("expression", Aggregate Expression
);
1823 kind_name
= "XHPSpreadAttribute";
1824 type_name
= "xhp_spread_attribute";
1825 func_name
= "xhp_spread_attribute";
1826 description
= "xhp_spread_attribute";
1827 prefix
= "xhp_spread_attribute";
1828 aggregates
= [XHPAttribute
];
1831 ("left_brace", Token
);
1832 ("spread_operator", Token
);
1833 ("expression", Aggregate Expression
);
1834 ("right_brace", Token
);
1838 kind_name
= "XHPOpen";
1839 type_name
= "xhp_open";
1840 func_name
= "xhp_open";
1841 description
= "xhp_open";
1842 prefix
= "xhp_open";
1846 ("left_angle", Token
);
1848 ("attributes", ZeroOrMore
(Aggregate XHPAttribute
));
1849 ("right_angle", Token
);
1853 kind_name
= "XHPExpression";
1854 type_name
= "xhp_expression";
1855 func_name
= "xhp_expression";
1856 description
= "xhp_expression";
1858 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
1861 ("open", Just
"XHPOpen");
1862 ("body", ZeroOrMore
(Aggregate Expression
));
1863 ("close", ZeroOrOne
(Just
"XHPClose"));
1867 kind_name
= "XHPClose";
1868 type_name
= "xhp_close";
1869 func_name
= "xhp_close";
1870 description
= "xhp_close";
1871 prefix
= "xhp_close";
1873 fields
= [("left_angle", Token
); ("name", Token
); ("right_angle", Token
)];
1876 kind_name
= "TypeConstant";
1877 type_name
= "type_constant";
1878 func_name
= "type_constant";
1879 description
= "type_constant";
1880 prefix
= "type_constant";
1881 aggregates
= [Statement
];
1884 ("left_type", Aggregate Specifier
);
1885 ("separator", Token
);
1886 ("right_type", Token
);
1890 kind_name
= "VectorTypeSpecifier";
1891 type_name
= "vector_type_specifier";
1892 func_name
= "vector_type_specifier";
1893 description
= "vector_type_specifier";
1894 prefix
= "vector_type";
1895 aggregates
= [Specifier
];
1899 ("left_angle", Token
);
1900 ("type", Aggregate Specifier
);
1901 ("trailing_comma", ZeroOrOne Token
);
1902 ("right_angle", Token
);
1906 kind_name
= "KeysetTypeSpecifier";
1907 type_name
= "keyset_type_specifier";
1908 func_name
= "keyset_type_specifier";
1909 description
= "keyset_type_specifier";
1910 prefix
= "keyset_type";
1911 aggregates
= [Specifier
];
1915 ("left_angle", Token
);
1916 ("type", Aggregate Specifier
);
1917 ("trailing_comma", ZeroOrOne Token
);
1918 ("right_angle", Token
);
1922 kind_name
= "TupleTypeExplicitSpecifier";
1923 type_name
= "tuple_type_explicit_specifier";
1924 func_name
= "tuple_type_explicit_specifier";
1925 description
= "tuple_type_explicit_specifier";
1926 prefix
= "tuple_type";
1927 aggregates
= [Specifier
];
1931 ("left_angle", Token
);
1932 ("types", Just
"SimpleTypeSpecifier");
1933 ("right_angle", Token
);
1937 kind_name
= "VarrayTypeSpecifier";
1938 type_name
= "varray_type_specifier";
1939 func_name
= "varray_type_specifier";
1940 description
= "varray_type_specifier";
1942 aggregates
= [Specifier
];
1946 ("left_angle", Token
);
1947 ("type", Just
"SimpleTypeSpecifier");
1948 ("trailing_comma", ZeroOrOne Token
);
1949 ("right_angle", Token
);
1953 kind_name
= "FunctionCtxTypeSpecifier";
1954 type_name
= "function_ctx_type_specifier";
1955 func_name
= "function_ctx_type_specifier";
1956 description
= "function_ctx_type_specifier";
1957 prefix
= "function_ctx_type";
1958 aggregates
= [Specifier
];
1959 fields
= [("keyword", Token
); ("variable", Just
"VariableExpression")];
1962 kind_name
= "TypeParameter";
1963 type_name
= "type_parameter";
1964 func_name
= "type_parameter";
1965 description
= "type_parameter";
1970 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
1971 ("reified", ZeroOrOne Token
);
1972 ("variance", ZeroOrOne Token
);
1974 ("param_params", ZeroOrOne
(Just
"TypeParameters"));
1975 ("constraints", ZeroOrMore
(Just
"TypeConstraint"));
1979 kind_name
= "TypeConstraint";
1980 type_name
= "type_constraint";
1981 func_name
= "type_constraint";
1982 description
= "type_constraint";
1983 prefix
= "constraint";
1985 fields
= [("keyword", Token
); ("type", Aggregate Specifier
)];
1988 kind_name
= "ContextConstraint";
1989 type_name
= "context_constraint";
1990 func_name
= "context_constraint";
1991 description
= "context_constraint";
1992 prefix
= "ctx_constraint";
1994 fields
= [("keyword", Token
); ("ctx_list", ZeroOrOne
(Just
"Contexts"))];
1997 kind_name
= "DarrayTypeSpecifier";
1998 type_name
= "darray_type_specifier";
1999 func_name
= "darray_type_specifier";
2000 description
= "darray_type_specifier";
2002 aggregates
= [Specifier
];
2006 ("left_angle", Token
);
2007 ("key", Just
"SimpleTypeSpecifier");
2009 ("value", Just
"SimpleTypeSpecifier");
2010 ("trailing_comma", ZeroOrOne Token
);
2011 ("right_angle", Token
);
2015 kind_name
= "DictionaryTypeSpecifier";
2016 type_name
= "dictionary_type_specifier";
2017 func_name
= "dictionary_type_specifier";
2018 description
= "dictionary_type_specifier";
2019 prefix
= "dictionary_type";
2020 aggregates
= [Specifier
];
2024 ("left_angle", Token
);
2025 ("members", ZeroOrMore
(Aggregate Specifier
));
2026 ("right_angle", Token
);
2030 kind_name
= "ClosureTypeSpecifier";
2031 type_name
= "closure_type_specifier";
2032 func_name
= "closure_type_specifier";
2033 description
= "closure_type_specifier";
2035 aggregates
= [Specifier
];
2038 ("outer_left_paren", Token
);
2039 ("readonly_keyword", ZeroOrOne Token
);
2040 ("function_keyword", Token
);
2041 ("inner_left_paren", Token
);
2042 ("parameter_list", ZeroOrMore
(Just
"ClosureParameterTypeSpecifier"));
2043 ("inner_right_paren", Token
);
2044 ("contexts", ZeroOrOne
(Just
"Contexts"));
2046 ("readonly_return", ZeroOrOne Token
);
2047 ("return_type", Aggregate Specifier
);
2048 ("outer_right_paren", Token
);
2052 kind_name
= "ClosureParameterTypeSpecifier";
2053 type_name
= "closure_parameter_type_specifier";
2054 func_name
= "closure_parameter_type_specifier";
2055 description
= "closure_parameter_type_specifier";
2056 prefix
= "closure_parameter";
2057 aggregates
= [Specifier
];
2060 ("call_convention", ZeroOrOne Token
);
2061 ("readonly", ZeroOrOne Token
);
2062 ("type", Aggregate Specifier
);
2066 kind_name
= "TypeRefinement";
2067 type_name
= "type_refinement";
2068 func_name
= "type_refinement";
2069 description
= "type_refinement";
2070 prefix
= "type_refinement";
2071 aggregates
= [Specifier
];
2074 ("type", Aggregate Specifier
);
2076 ("left_brace", Token
);
2077 ("members", ZeroOrMore
(Aggregate RefinementMember
));
2078 ("right_brace", Token
);
2082 kind_name
= "TypeInRefinement";
2083 type_name
= "type_in_refinement";
2084 func_name
= "type_in_refinement";
2085 description
= "type_in_refinement";
2086 prefix
= "type_in_refinement";
2087 aggregates
= [RefinementMember
];
2092 ("type_parameters", ZeroOrOne
(Just
"TypeParameters"));
2093 ("constraints", ZeroOrMore
(Just
"TypeConstraint"));
2094 ("equal", ZeroOrOne Token
);
2095 ("type", ZeroOrOne
(Aggregate Specifier
));
2099 kind_name
= "CtxInRefinement";
2100 type_name
= "ctx_in_refinement";
2101 func_name
= "ctx_in_refinement";
2102 description
= "ctx_in_refinement";
2103 prefix
= "ctx_in_refinement";
2104 aggregates
= [RefinementMember
];
2109 ("type_parameters", ZeroOrOne
(Just
"TypeParameters"));
2110 ("constraints", ZeroOrMore
(Just
"ContextConstraint"));
2111 ("equal", ZeroOrOne Token
);
2112 ("ctx_list", ZeroOrOne
(Aggregate Specifier
));
2116 kind_name
= "ClassnameTypeSpecifier";
2117 type_name
= "classname_type_specifier";
2118 func_name
= "classname_type_specifier";
2119 description
= "classname_type_specifier";
2120 prefix
= "classname";
2121 aggregates
= [Specifier
];
2125 ("left_angle", Token
);
2126 ("type", Aggregate Specifier
);
2127 ("trailing_comma", ZeroOrOne Token
);
2128 ("right_angle", Token
);
2132 kind_name
= "FieldSpecifier";
2133 type_name
= "field_specifier";
2134 func_name
= "field_specifier";
2135 description
= "field_specifier";
2137 aggregates
= [Specifier
];
2140 ("question", ZeroOrOne Token
);
2141 ("name", Aggregate Expression
);
2143 ("type", Aggregate Specifier
);
2147 kind_name
= "FieldInitializer";
2148 type_name
= "field_initializer";
2149 func_name
= "field_initializer";
2150 description
= "field_initializer";
2151 prefix
= "field_initializer";
2155 ("name", Aggregate Expression
);
2157 ("value", Aggregate Expression
);
2161 kind_name
= "ShapeTypeSpecifier";
2162 type_name
= "shape_type_specifier";
2163 func_name
= "shape_type_specifier";
2164 description
= "shape_type_specifier";
2165 prefix
= "shape_type";
2166 aggregates
= [Specifier
];
2170 ("left_paren", Token
);
2171 ("fields", ZeroOrMore
(Just
"FieldSpecifier"));
2172 ("ellipsis", ZeroOrOne Token
);
2173 ("right_paren", Token
);
2177 kind_name
= "ShapeExpression";
2178 type_name
= "shape_expression";
2179 func_name
= "shape_expression";
2180 description
= "shape_expression";
2181 prefix
= "shape_expression";
2182 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
2186 ("left_paren", Token
);
2187 ("fields", ZeroOrMore
(Just
"FieldInitializer"));
2188 ("right_paren", Token
);
2192 kind_name
= "TupleExpression";
2193 type_name
= "tuple_expression";
2194 func_name
= "tuple_expression";
2195 description
= "tuple_expression";
2196 prefix
= "tuple_expression";
2197 aggregates
= [Expression
; ConstructorExpression
; LambdaBody
];
2201 ("left_paren", Token
);
2202 ("items", ZeroOrMore
(Aggregate Expression
));
2203 ("right_paren", Token
);
2206 (* TODO: Rename this; generic type specifiers are also used for
2207 * type-annotated method calls and for object creations with type annotations
2208 * This naming is now very misleading (e.g. class_type being any name).
2211 kind_name
= "GenericTypeSpecifier";
2212 type_name
= "generic_type_specifier";
2213 func_name
= "generic_type_specifier";
2214 description
= "generic_type_specifier";
2216 aggregates
= [Specifier
];
2217 fields
= [("class_type", Token
); ("argument_list", Just
"TypeArguments")];
2220 kind_name
= "NullableTypeSpecifier";
2221 type_name
= "nullable_type_specifier";
2222 func_name
= "nullable_type_specifier";
2223 description
= "nullable_type_specifier";
2224 prefix
= "nullable";
2225 aggregates
= [Specifier
];
2226 fields
= [("question", Token
); ("type", Aggregate Specifier
)];
2229 kind_name
= "LikeTypeSpecifier";
2230 type_name
= "like_type_specifier";
2231 func_name
= "like_type_specifier";
2232 description
= "like_type_specifier";
2234 aggregates
= [Specifier
];
2235 fields
= [("tilde", Token
); ("type", Aggregate Specifier
)];
2238 kind_name
= "SoftTypeSpecifier";
2239 type_name
= "soft_type_specifier";
2240 func_name
= "soft_type_specifier";
2241 description
= "soft_type_specifier";
2243 aggregates
= [Specifier
];
2244 fields
= [("at", Token
); ("type", Aggregate Specifier
)];
2247 kind_name
= "AttributizedSpecifier";
2248 type_name
= "attributized_specifier";
2249 func_name
= "attributized_specifier";
2250 description
= "attributized_specifier";
2251 prefix
= "attributized_specifier";
2255 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
2256 ("type", Aggregate Specifier
);
2260 kind_name
= "ReifiedTypeArgument";
2261 type_name
= "reified_type_argument";
2262 func_name
= "reified_type_argument";
2263 description
= "reified_type_argument";
2264 prefix
= "reified_type_argument";
2266 fields
= [("reified", Token
); ("type", Aggregate Specifier
)];
2269 kind_name
= "TypeArguments";
2270 type_name
= "type_arguments";
2271 func_name
= "type_arguments";
2272 description
= "type_arguments";
2273 prefix
= "type_arguments";
2277 ("left_angle", Token
);
2278 ("types", ZeroOrMore
(Just
"AttributizedSpecifier"));
2279 ("right_angle", Token
);
2283 kind_name
= "TypeParameters";
2284 type_name
= "type_parameters";
2285 func_name
= "type_parameters";
2286 description
= "type_parameters";
2287 prefix
= "type_parameters";
2291 ("left_angle", Token
);
2292 ("parameters", ZeroOrMore
(Just
"TypeParameter"));
2293 ("right_angle", Token
);
2297 kind_name
= "TupleTypeSpecifier";
2298 type_name
= "tuple_type_specifier";
2299 func_name
= "tuple_type_specifier";
2300 description
= "tuple_type_specifier";
2302 aggregates
= [Specifier
];
2305 ("left_paren", Token
);
2306 ("types", ZeroOrMore
(Aggregate Specifier
));
2307 ("right_paren", Token
);
2311 kind_name
= "UnionTypeSpecifier";
2312 type_name
= "union_type_specifier";
2313 func_name
= "union_type_specifier";
2314 description
= "union_type_specifier";
2316 aggregates
= [Specifier
];
2319 ("left_paren", Token
);
2320 ("types", ZeroOrMore
(Aggregate Specifier
));
2321 ("right_paren", Token
);
2325 kind_name
= "IntersectionTypeSpecifier";
2326 type_name
= "intersection_type_specifier";
2327 func_name
= "intersection_type_specifier";
2328 description
= "intersection_type_specifier";
2329 prefix
= "intersection";
2330 aggregates
= [Specifier
];
2333 ("left_paren", Token
);
2334 ("types", ZeroOrMore
(Aggregate Specifier
));
2335 ("right_paren", Token
);
2339 kind_name
= "ErrorSyntax";
2340 type_name
= "error";
2341 func_name
= "error";
2342 description
= "error";
2345 fields
= [("error", Just
"error")];
2348 kind_name
= "ListItem";
2349 type_name
= "list_item";
2350 func_name
= "list_item";
2351 description
= "list_item";
2354 fields
= [("item", Just
"error"); ("separator", Token
)];
2357 kind_name
= "EnumClassLabelExpression";
2358 type_name
= "enum_class_label_expression";
2359 func_name
= "enum_class_label_expression";
2360 description
= "enum_class_label";
2361 prefix
= "enum_class_label";
2362 aggregates
= [Expression
];
2365 ("qualifier", ZeroOrOne
(Aggregate Expression
));
2367 ("expression", Token
);
2371 kind_name
= "ModuleDeclaration";
2372 type_name
= "module_declaration";
2373 func_name
= "module_declaration";
2374 description
= "module_declaration";
2375 prefix
= "module_declaration";
2376 aggregates
= [TopLevelDeclaration
];
2379 ("attribute_spec", ZeroOrOne
(Aggregate AttributeSpecification
));
2380 ("new_keyword", Token
);
2381 ("module_keyword", Token
);
2382 ("name", Aggregate Name
);
2383 ("left_brace", Token
);
2384 ("right_brace", Token
);
2388 kind_name
= "ModuleMembershipDeclaration";
2389 type_name
= "module_membership_declaration";
2390 func_name
= "module_membership_declaration";
2391 description
= "module_membership_declaration";
2392 prefix
= "module_membership_declaration";
2393 aggregates
= [TopLevelDeclaration
];
2396 ("module_keyword", Token
);
2397 ("name", Aggregate Name
);
2398 ("semicolon", Token
);
2403 (******************************************************************************(
2404 * Utilities for aggregate types
2405 )******************************************************************************)
2406 let generated_aggregate_types =
2408 TopLevelDeclaration
;
2412 ClassBodyDeclaration
;
2417 ConstructorExpression
;
2425 let string_of_aggregate_type = function
2426 | TopLevelDeclaration
-> "TopLevelDeclaration"
2427 | Expression
-> "Expression"
2428 | Specifier
-> "Specifier"
2429 | Parameter
-> "Parameter"
2430 | AttributeSpecification
-> "AttributeSpecification"
2431 | ClassBodyDeclaration
-> "ClassBodyDeclaration"
2432 | RefinementMember
-> "RefinementMember"
2433 | Statement
-> "Statement"
2434 | SwitchLabel
-> "SwitchLabel"
2435 | LambdaBody
-> "LambdaBody"
2436 | ConstructorExpression
-> "ConstructorExpression"
2437 | NamespaceInternals
-> "NamespaceInternals"
2438 | XHPAttribute
-> "XHPAttribute"
2439 | ObjectCreationWhat
-> "ObjectCreationWhat"
2443 module AggregateKey
= struct
2444 type t
= aggregate_type
2446 let compare (x
: t
) (y
: t
) = compare x y
2449 module AggMap
= WrappedMap.Make
(AggregateKey
)
2451 let aggregation_of_top_level_declaration =
2452 List.filter
(fun x
-> List.mem TopLevelDeclaration x
.aggregates
) schema
2454 let aggregation_of_expression =
2455 List.filter
(fun x
-> List.mem Expression x
.aggregates
) schema
2457 let aggregation_of_specifier =
2458 List.filter
(fun x
-> List.mem Specifier x
.aggregates
) schema
2460 let aggregation_of_parameter =
2461 List.filter
(fun x
-> List.mem Parameter x
.aggregates
) schema
2463 let aggregation_of_attribute_specification =
2464 List.filter
(fun x
-> List.mem AttributeSpecification x
.aggregates
) schema
2466 let aggregation_of_class_body_declaration =
2467 List.filter
(fun x
-> List.mem ClassBodyDeclaration x
.aggregates
) schema
2469 let aggregation_of_refinement_member =
2470 List.filter
(fun x
-> List.mem RefinementMember x
.aggregates
) schema
2472 let aggregation_of_statement =
2473 List.filter
(fun x
-> List.mem Statement x
.aggregates
) schema
2475 let aggregation_of_switch_label =
2476 List.filter
(fun x
-> List.mem SwitchLabel x
.aggregates
) schema
2478 let aggregation_of_lambda_body =
2479 List.filter
(fun x
-> List.mem LambdaBody x
.aggregates
) schema
2481 let aggregation_of_constructor_expression =
2482 List.filter
(fun x
-> List.mem ConstructorExpression x
.aggregates
) schema
2484 let aggregation_of_namespace_internals =
2485 List.filter
(fun x
-> List.mem NamespaceInternals x
.aggregates
) schema
2487 let aggregation_of_xhp_attribute =
2488 List.filter
(fun x
-> List.mem XHPAttribute x
.aggregates
) schema
2490 let aggregation_of_object_creation_what =
2491 List.filter
(fun x
-> List.mem ObjectCreationWhat x
.aggregates
) schema
2493 let aggregation_of_todo_aggregate =
2494 List.filter
(fun x
-> List.mem TODO x
.aggregates
) schema
2496 let aggregation_of_name_aggregate =
2497 List.filter
(fun x
-> List.mem Name x
.aggregates
) schema
2499 let aggregation_of = function
2500 | TopLevelDeclaration
-> aggregation_of_top_level_declaration
2501 | Expression
-> aggregation_of_expression
2502 | Specifier
-> aggregation_of_specifier
2503 | Parameter
-> aggregation_of_parameter
2504 | AttributeSpecification
-> aggregation_of_attribute_specification
2505 | ClassBodyDeclaration
-> aggregation_of_class_body_declaration
2506 | RefinementMember
-> aggregation_of_refinement_member
2507 | Statement
-> aggregation_of_statement
2508 | SwitchLabel
-> aggregation_of_switch_label
2509 | LambdaBody
-> aggregation_of_lambda_body
2510 | ConstructorExpression
-> aggregation_of_constructor_expression
2511 | NamespaceInternals
-> aggregation_of_namespace_internals
2512 | XHPAttribute
-> aggregation_of_xhp_attribute
2513 | ObjectCreationWhat
-> aggregation_of_object_creation_what
2514 | TODO
-> aggregation_of_todo_aggregate
2515 | Name
-> aggregation_of_name_aggregate
2517 let aggregate_type_name = function
2518 | TopLevelDeclaration
-> "top_level_declaration"
2519 | Expression
-> "expression"
2520 | Specifier
-> "specifier"
2521 | Parameter
-> "parameter"
2522 | AttributeSpecification
-> "attribute_specification"
2523 | ClassBodyDeclaration
-> "class_body_declaration"
2524 | RefinementMember
-> "refinement_member"
2525 | Statement
-> "statement"
2526 | SwitchLabel
-> "switch_label"
2527 | LambdaBody
-> "lambda_body"
2528 | ConstructorExpression
-> "constructor_expression"
2529 | NamespaceInternals
-> "namespace_internals"
2530 | XHPAttribute
-> "xhp_attribute"
2531 | ObjectCreationWhat
-> "object_creation_what"
2532 | TODO
-> "todo_aggregate"
2533 | Name
-> "name_aggregate"
2535 let aggregate_type_pfx_trim = function
2536 | TopLevelDeclaration
-> ("TLD", "\\(Declaration\\|Statement\\)$")
2537 | Expression
-> ("Expr", "Expression$")
2538 | Specifier
-> ("Spec", "\\(Type\\)?Specifier$")
2539 | Parameter
-> ("Param", "")
2540 | AttributeSpecification
-> ("AttrSpec", "")
2541 | ClassBodyDeclaration
-> ("Body", "Declaration")
2542 | RefinementMember
-> ("TypeRefinementMember", "InRefinement$")
2543 | Statement
-> ("Stmt", "Statement$")
2544 | SwitchLabel
-> ("Switch", "Label$")
2545 | LambdaBody
-> ("Lambda", "Expression$")
2546 | ConstructorExpression
-> ("CExpr", "Expression$")
2547 | NamespaceInternals
-> ("NSI", "")
2548 | XHPAttribute
-> ("XHPAttr", "")
2549 | ObjectCreationWhat
-> ("New", "")
2550 | TODO
-> ("TODO", "")
2551 | Name
-> ("Name", "")
2553 (******************************************************************************(
2554 * Useful for debugging / schema alterations
2555 )******************************************************************************)
2556 let string_of_child_spec =
2557 let p = Printf.sprintf
in
2558 let rec aux = function
2560 | Just x
-> p "Just \"%s\"" x
2561 | Aggregate x
-> p "Aggregate %s" (string_of_aggregate_type x
)
2562 | ZeroOrMore c
-> p "ZeroOrMore (%s)" (aux c
)
2563 | ZeroOrOne c
-> p "ZeroOrOne (%s)" (aux c
)