@@ -561,6 +561,77 @@ struct ast_selector<input_object_type_extension>
561561{
562562};
563563
564+ template <typename _Rule>
565+ struct ast_control
566+ : normal<_Rule>
567+ {
568+ static const std::string error_message;
569+
570+ template <typename _Input, typename ... _States>
571+ static void raise (const _Input& in, _States&&...)
572+ {
573+ throw parse_error (error_message, in);
574+ }
575+ };
576+
577+ template <> const std::string ast_control<one<' }' >>::error_message = " Expected }" ;
578+ template <> const std::string ast_control<one<' ]' >>::error_message = " Expected ]" ;
579+ template <> const std::string ast_control<one<' )' >>::error_message = " Expected )" ;
580+ template <> const std::string ast_control<quote_token>::error_message = " Expected \" " ;
581+ template <> const std::string ast_control<block_quote_token>::error_message = " Expected \"\"\" " ;
582+
583+ template <> const std::string ast_control<variable_name_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Variable" ;
584+ template <> const std::string ast_control<escaped_unicode_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#EscapedUnicode" ;
585+ template <> const std::string ast_control<string_escape_sequence_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#EscapedCharacter" ;
586+ template <> const std::string ast_control<string_quote_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#StringCharacter" ;
587+ template <> const std::string ast_control<block_quote_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#BlockStringCharacter" ;
588+ template <> const std::string ast_control<fractional_part_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#FractionalPart" ;
589+ template <> const std::string ast_control<exponent_part_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ExponentPart" ;
590+ template <> const std::string ast_control<argument_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Argument" ;
591+ template <> const std::string ast_control<arguments_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Arguments" ;
592+ template <> const std::string ast_control<list_value_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ListValue" ;
593+ template <> const std::string ast_control<object_field_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ObjectField" ;
594+ template <> const std::string ast_control<object_value_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ObjectValue" ;
595+ template <> const std::string ast_control<input_value_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Value" ;
596+ template <> const std::string ast_control<default_value_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#DefaultValue" ;
597+ template <> const std::string ast_control<list_type_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ListType" ;
598+ template <> const std::string ast_control<type_name_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Type" ;
599+ template <> const std::string ast_control<variable_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#VariableDefinition" ;
600+ template <> const std::string ast_control<variable_definitions_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#VariableDefinitions" ;
601+ template <> const std::string ast_control<directive_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Directive" ;
602+ template <> const std::string ast_control<field_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Field" ;
603+ template <> const std::string ast_control<type_condition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#TypeCondition" ;
604+ template <> const std::string ast_control<fragement_spread_or_inline_fragment_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#FragmentSpread or https://facebook.github.io/graphql/June2018/#InlineFragment" ;
605+ template <> const std::string ast_control<selection_set_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#SelectionSet" ;
606+ template <> const std::string ast_control<operation_definition_operation_type_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#OperationDefinition" ;
607+ template <> const std::string ast_control<fragment_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#FragmentDefinition" ;
608+ template <> const std::string ast_control<root_operation_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#RootOperationTypeDefinition" ;
609+ template <> const std::string ast_control<schema_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#SchemaDefinition" ;
610+ template <> const std::string ast_control<scalar_type_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ScalarTypeDefinition" ;
611+ template <> const std::string ast_control<arguments_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ArgumentsDefinition" ;
612+ template <> const std::string ast_control<field_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#FieldDefinition" ;
613+ template <> const std::string ast_control<fields_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#FieldsDefinition" ;
614+ template <> const std::string ast_control<implements_interfaces_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ImplementsInterfaces" ;
615+ template <> const std::string ast_control<object_type_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ObjectTypeDefinition" ;
616+ template <> const std::string ast_control<interface_type_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#InterfaceTypeDefinition" ;
617+ template <> const std::string ast_control<union_member_types_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#UnionMemberTypes" ;
618+ template <> const std::string ast_control<union_type_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#UnionTypeDefinition" ;
619+ template <> const std::string ast_control<enum_value_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#EnumValueDefinition" ;
620+ template <> const std::string ast_control<enum_values_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#EnumValuesDefinition" ;
621+ template <> const std::string ast_control<enum_type_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#EnumTypeDefinition" ;
622+ template <> const std::string ast_control<input_field_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#InputValueDefinition" ;
623+ template <> const std::string ast_control<input_fields_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#InputFieldsDefinition" ;
624+ template <> const std::string ast_control<input_object_type_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#InputObjectTypeDefinition" ;
625+ template <> const std::string ast_control<directive_definition_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#DirectiveDefinition" ;
626+ template <> const std::string ast_control<schema_extension_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#SchemaExtension" ;
627+ template <> const std::string ast_control<scalar_type_extension_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ScalarTypeExtension" ;
628+ template <> const std::string ast_control<object_type_extension_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#ObjectTypeExtension" ;
629+ template <> const std::string ast_control<interface_type_extension_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#InterfaceTypeExtension" ;
630+ template <> const std::string ast_control<union_type_extension_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#UnionTypeExtension" ;
631+ template <> const std::string ast_control<enum_type_extension_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#EnumTypeExtension" ;
632+ template <> const std::string ast_control<input_object_type_extension_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#InputObjectTypeExtension" ;
633+ template <> const std::string ast_control<document_content>::error_message = " Expected https://facebook.github.io/graphql/June2018/#Document" ;
634+
564635template <>
565636ast<std::string>::~ast ()
566637{
@@ -587,17 +658,20 @@ ast<const char*>::~ast()
587658
588659ast<std::string> parseString (std::string&& input)
589660{
590- memory_input<> in (input.c_str (), input.size (), " GraphQL" );
661+ ast<std::string> result { std::move (input), nullptr };
662+ memory_input<> in (result.input .c_str (), result.input .size (), " GraphQL" );
591663
592- return { std::move (input), parse_tree::parse<document, ast_node, ast_selector>(std::move (in)) };
664+ result.root = parse_tree::parse<document, ast_node, ast_selector, nothing, ast_control>(std::move (in));
665+
666+ return result;
593667}
594668
595669ast<std::unique_ptr<file_input<>>> parseFile (const char * filename)
596670{
597671 std::unique_ptr<file_input<>> in (new file_input<>(std::string (filename)));
598672 ast<std::unique_ptr<file_input<>>> result { std::move (in), nullptr };
599673
600- result.root = parse_tree::parse<document, ast_node, ast_selector>(std::move (*result.input ));
674+ result.root = parse_tree::parse<document, ast_node, ast_selector, nothing, ast_control >(std::move (*result.input ));
601675
602676 return result;
603677}
@@ -608,7 +682,7 @@ peg::ast<const char*> operator "" _graphql(const char* text, size_t size)
608682{
609683 peg::memory_input<> in (text, size, " GraphQL" );
610684
611- return { text, peg::parse_tree::parse<peg::document, peg::ast_node, peg::ast_selector>(std::move (in)) };
685+ return { text, peg::parse_tree::parse<peg::document, peg::ast_node, peg::ast_selector, peg::nothing, peg::ast_control >(std::move (in)) };
612686}
613687
614688} /* namespace graphql */
0 commit comments