Lines Matching full:specifier

54 ///         'namespace' enclosing-namespace-specifier '::' 'inline'[opt]
57 /// enclosing-namespace-specifier:
59 /// enclosing-namespace-specifier '::' 'inline'[opt] identifier
62 /// 'namespace' identifier '=' qualified-namespace-specifier ';'
318 // Parse (optional) nested-name-specifier.
537 /// 'using' 'namespace' ::[opt] nested-name-specifier[opt]
540 /// 'using' 'namespace' ::[opt] nested-name-specifier[opt]
559 // Parse (optional) nested-name-specifier.
612 /// 'typename'[opt] nested-name-specifier unqualified-id
619 // FIXME: This is wrong; we should parse this as a typename-specifier.
627 // Parse nested-name-specifier.
648 // specified after the nested-name-specifier is the same as the identifier
650 // nested-name-specifier, the name is [...] considered to name the
698 /// 'using' identifier attribute-specifier-seq[opt] = type-id ;
701 /// 'using' elaborated-enum-specifier ;
702 /// The terminal name of the elaborated-enum-specifier undergoes
705 /// elaborated-enum-specifier:
706 /// 'enum' nested-name-specifier[opt] identifier
865 // ignoring the parameters, just in case the nested name specifier
1115 /// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.
1122 "Not a decltype specifier");
1155 // the typename-specifier in a function-style cast expression may
1166 // The operand of the decltype specifier is an unevaluated operand.
1385 /// ParseBaseTypeSpecifier - Parse a C++ base-type-specifier which is either a
1386 /// class name or decltype-specifier. Note that we only check that the result
1391 /// base-type-specifier: [C++11 class.derived]
1394 /// nested-name-specifier[opt] class-name
1395 /// decltype-specifier
1400 /// In C++98, instead of base-type-specifier, we have:
1402 /// ::[opt] nested-name-specifier[opt] class-name
1412 // Parse optional nested-name-specifier
1421 // Parse decltype-specifier
1563 /// Determine whether the following tokens are valid after a type-specifier
1611 // declarations later, so claim they are valid after a type specifier.
1640 // type/storage class specifier we're seeing is part of the *next*
1649 // token to see if it's a type specifier. If so, we know the code is
1666 /// ParseClassSpecifier - Parse a C++ class-specifier [C++ class] or
1667 /// elaborated-type-specifier [C++ dcl.type.elab]; we can't tell which
1671 /// class-specifier: [C++ class]
1676 /// class-key nested-name-specifier identifier base-clause[opt]
1677 /// class-key nested-name-specifier[opt] simple-template-id
1680 /// [GNU] class-key attributes[opt] nested-name-specifier
1682 /// [GNU] class-key attributes[opt] nested-name-specifier[opt]
1689 /// elaborated-type-specifier: [C++ dcl.type.elab]
1690 /// class-key ::[opt] nested-name-specifier[opt] identifier
1691 /// class-key ::[opt] nested-name-specifier[opt] 'template'[opt]
1694 /// Note that the C++ class-specifier and elaborated-type-specifier,
1695 /// together, subsume the C99 struct-or-union-specifier:
1697 /// struct-or-union-specifier: [C99 6.7.2.1]
1720 assert(TagTokKind == tok::kw_union && "Not a class specifier");
1864 // Parse the (optional) nested-name-specifier.
1868 // is a base-specifier-list.
1995 // However, in type-specifier-seq's, things look like declarations but are
2293 // If this is an elaborated type specifier in function template,
2350 // At this point, we've successfully parsed a class-specifier in 'definition'
2360 // After a type-specifier, we don't expect a semicolon. This only happens in
2381 /// ':' base-specifier-list
2382 /// base-specifier-list:
2383 /// base-specifier '...'[opt]
2384 /// base-specifier-list ',' base-specifier '...'[opt]
2393 // Parse a base-specifier.
2396 // Skip the rest of this base specifier, up until the comma or
2414 /// ParseBaseSpecifier - Parse a C++ base-specifier. A base-specifier is
2415 /// one entry in the base class list of a class specifier, for example:
2419 /// base-specifier: [C++ class.derived]
2420 /// attribute-specifier-seq[opt] base-type-specifier
2421 /// attribute-specifier-seq[opt] 'virtual' access-specifier[opt]
2422 /// base-type-specifier
2423 /// attribute-specifier-seq[opt] access-specifier 'virtual'[opt]
2424 /// base-type-specifier
2438 // Parse an (optional) access specifier.
2449 // access specifier.
2468 // parsing the class-name for a base specifier.
2480 // actually part of the base-specifier-list grammar productions, but we
2485 // Find the complete source range for the base-specifier.
2489 // base-specifier.
2496 /// a C++ access-specifier.
2498 /// access-specifier: [C++ class.derived]
2561 /// virt-specifier.
2563 /// virt-specifier:
2567 VirtSpecifiers::Specifier Parser::isCXX11VirtSpecifier(const Token &Tok) const {
2603 /// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.
2605 /// virt-specifier-seq:
2606 /// virt-specifier
2607 /// virt-specifier-seq virt-specifier
2612 VirtSpecifiers::Specifier Specifier = isCXX11VirtSpecifier();
2613 if (Specifier == VirtSpecifiers::VS_None)
2618 << VirtSpecifiers::getSpecifierName(Specifier)
2626 // A virt-specifier-seq shall contain at most one of each virt-specifier.
2628 if (VS.SetSpecifier(Specifier, Tok.getLocation(), PrevSpec))
2632 if (IsInterface && (Specifier == VirtSpecifiers::VS_Final ||
2633 Specifier == VirtSpecifiers::VS_Sealed)) {
2635 << VirtSpecifiers::getSpecifierName(Specifier);
2636 } else if (Specifier == VirtSpecifiers::VS_Sealed) {
2638 } else if (Specifier == VirtSpecifiers::VS_Abstract) {
2640 } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {
2647 << VirtSpecifiers::getSpecifierName(Specifier);
2656 VirtSpecifiers::Specifier Specifier = isCXX11VirtSpecifier();
2657 return Specifier == VirtSpecifiers::VS_Final ||
2658 Specifier == VirtSpecifiers::VS_GNU_Final ||
2659 Specifier == VirtSpecifiers::VS_Sealed;
2665 VirtSpecifiers::Specifier Specifier = isCXX11VirtSpecifier();
2666 return Specifier == VirtSpecifiers::VS_Final ||
2667 Specifier == VirtSpecifiers::VS_GNU_Final ||
2668 Specifier == VirtSpecifiers::VS_Sealed ||
2669 Specifier == VirtSpecifiers::VS_Abstract;
2673 /// brace-or-equal-initializer or pure-specifier.
2678 // declarator virt-specifier-seq[opt] pure-specifier[opt]
2681 // identifier attribute-specifier-seq[opt] ':' constant-expression
2732 // virt-specifier *after* the GNU attributes.
2739 // virt-specifier, issue a GCC-compat warning.
2760 /// virt-specifier-seq and diagnose them.
2817 /// decl-specifier-seq[opt] member-declarator-list[opt] ';'
2819 /// ::[opt] nested-name-specifier template[opt] unqualified-id ';'[TODO]
2830 /// declarator virt-specifier-seq[opt] pure-specifier[opt]
2836 /// virt-specifier-seq:
2837 /// virt-specifier
2838 /// virt-specifier-seq virt-specifier
2840 /// virt-specifier:
2845 /// pure-specifier:
2891 // Collect the scope specifier token we annotated earlier.
2956 // Optional C++11 attribute-specifier
2993 // decl-specifier-seq:
3107 // MSVC permits pure specifier on inline functions defined at class scope.
3139 // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains
3144 // Diagnose attributes that appear before decl specifier:
3204 // It's a pure-specifier.
3231 // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains
3399 /// This does not check for a pure-specifier; that's handled elsewhere.
3583 // Current token is a C++ access specifier.
3640 /// access-specifier ':' member-specification[opt]
3705 VirtSpecifiers::Specifier Specifier = isCXX11VirtSpecifier(Tok);
3706 if (Specifier == VirtSpecifiers::VS_None)
3712 << VirtSpecifiers::getSpecifierName(Specifier);
3715 if (Specifier == VirtSpecifiers::VS_Sealed)
3722 << VirtSpecifiers::getSpecifierName(Specifier);
3730 << VirtSpecifiers::getSpecifierName(Specifier);
3731 else if (Specifier == VirtSpecifiers::VS_Final)
3735 << VirtSpecifiers::getSpecifierName(Specifier);
3736 else if (Specifier == VirtSpecifiers::VS_Sealed)
3738 else if (Specifier == VirtSpecifiers::VS_Abstract)
3740 else if (Specifier == VirtSpecifiers::VS_GNU_Final)
3991 /// '::'[opt] nested-name-specifier[opt] class-name
3994 // parse '::'[opt] nested-name-specifier[opt]
4018 // FIXME: Can we get here with a scope specifier?
4775 /// Parse a C++11 or C23 attribute-specifier.
4777 /// [C++11] attribute-specifier:
4779 /// alignment-specifier
4804 // specifier-qualifier, which means it has different parsing behavior. We
4953 /// ParseCXX11Attributes - Parse a C++11 or C23 attribute-specifier-seq.
4955 /// attribute-specifier-seq:
4956 /// attribute-specifier-seq[opt] attribute-specifier
5001 "not an attribute specifier");
5208 // Current token is a C++ access specifier.