diff --git a/dtool/src/cppparser/cppBison.yxx b/dtool/src/cppparser/cppBison.yxx index 932e945542..f1795d945c 100644 --- a/dtool/src/cppparser/cppBison.yxx +++ b/dtool/src/cppparser/cppBison.yxx @@ -333,6 +333,7 @@ pop_struct() { %token KW_PUBLIC %token KW_REGISTER %token KW_REINTERPRET_CAST +%token KW_RESTRICT %token KW_RETURN %token KW_SHORT %token KW_SIGNED @@ -2265,6 +2266,11 @@ not_paren_formal_parameter_identifier: { $$ = $2; $$->add_modifier(IIT_volatile); +} + | KW_RESTRICT not_paren_formal_parameter_identifier %prec UNARY +{ + $$ = $2; + $$->add_modifier(IIT_restrict); } | '*' optional_attributes not_paren_formal_parameter_identifier %prec UNARY { @@ -2311,6 +2317,11 @@ formal_parameter_identifier: { $$ = $2; $$->add_modifier(IIT_volatile); +} + | KW_RESTRICT formal_parameter_identifier %prec UNARY +{ + $$ = $2; + $$->add_modifier(IIT_restrict); } | '*' optional_attributes formal_parameter_identifier %prec UNARY { @@ -2370,6 +2381,11 @@ parameter_pack_identifier: { $$ = $2; $$->add_modifier(IIT_volatile); +} + | KW_RESTRICT parameter_pack_identifier %prec UNARY +{ + $$ = $2; + $$->add_modifier(IIT_restrict); } | '*' optional_attributes parameter_pack_identifier %prec UNARY { @@ -2433,6 +2449,11 @@ not_paren_empty_instance_identifier: { $$ = $2; $$->add_modifier(IIT_volatile); +} + | KW_RESTRICT not_paren_empty_instance_identifier %prec UNARY +{ + $$ = $2; + $$->add_modifier(IIT_restrict); } | '*' optional_attributes not_paren_empty_instance_identifier %prec UNARY { @@ -2485,6 +2506,11 @@ empty_instance_identifier: { $$ = $2; $$->add_modifier(IIT_volatile); +} + | KW_RESTRICT empty_instance_identifier %prec UNARY +{ + $$ = $2; + $$->add_modifier(IIT_restrict); } | '*' optional_attributes not_paren_empty_instance_identifier %prec UNARY { @@ -3318,7 +3344,7 @@ element: | KW_NAMESPACE | KW_NEW | KW_NOEXCEPT | KW_NOEXCEPT_LPAREN | KW_NULLPTR | KW_OPERATOR | KW_OVERRIDE | KW_PRIVATE | KW_PROTECTED | KW_PUBLIC | KW_PUBLISHED | KW_REGISTER | KW_REINTERPRET_CAST - | KW_RETURN | KW_SHORT | KW_SIGNED | KW_SIZEOF | KW_STATIC + | KW_RESTRICT | KW_RETURN | KW_SHORT | KW_SIGNED | KW_SIZEOF | KW_STATIC | KW_STATIC_ASSERT | KW_STATIC_CAST | KW_STRUCT | KW_TEMPLATE | KW_THREAD_LOCAL | KW_THROW | KW_TRUE | KW_TRY | KW_TYPEDEF | KW_TYPEID | KW_TYPENAME | KW_UNDERLYING_TYPE | KW_UNION diff --git a/dtool/src/cppparser/cppInstanceIdentifier.cxx b/dtool/src/cppparser/cppInstanceIdentifier.cxx index 8c47c7d7ba..cc32ee8a81 100644 --- a/dtool/src/cppparser/cppInstanceIdentifier.cxx +++ b/dtool/src/cppparser/cppInstanceIdentifier.cxx @@ -302,6 +302,7 @@ r_unroll_type(CPPType *start_type, break; case IIT_volatile: + case IIT_restrict: // Just pass it through for now. result = r_unroll_type(start_type, mi); break; diff --git a/dtool/src/cppparser/cppInstanceIdentifier.h b/dtool/src/cppparser/cppInstanceIdentifier.h index 8a69504609..21117a8aea 100644 --- a/dtool/src/cppparser/cppInstanceIdentifier.h +++ b/dtool/src/cppparser/cppInstanceIdentifier.h @@ -35,6 +35,7 @@ enum CPPInstanceIdentifierType { IIT_array, IIT_const, IIT_volatile, + IIT_restrict, IIT_paren, IIT_func, IIT_initializer, diff --git a/dtool/src/cppparser/cppPreprocessor.cxx b/dtool/src/cppparser/cppPreprocessor.cxx index db6f45864f..3426b07222 100644 --- a/dtool/src/cppparser/cppPreprocessor.cxx +++ b/dtool/src/cppparser/cppPreprocessor.cxx @@ -2816,6 +2816,9 @@ check_keyword(const string &name) { if (name == "public") return KW_PUBLIC; if (name == "register") return KW_REGISTER; if (name == "reinterpret_cast") return KW_REINTERPRET_CAST; + //if (name == "restrict") return KW_RESTRICT; + if (name == "__restrict") return KW_RESTRICT; + if (name == "__restrict__") return KW_RESTRICT; if (name == "return") return KW_RETURN; if (name == "short") return KW_SHORT; if (name == "signed") return KW_SIGNED; diff --git a/dtool/src/cppparser/cppToken.cxx b/dtool/src/cppparser/cppToken.cxx index cd4c79df65..88b0d87946 100644 --- a/dtool/src/cppparser/cppToken.cxx +++ b/dtool/src/cppparser/cppToken.cxx @@ -567,6 +567,10 @@ output(std::ostream &out) const { out << "KW_REINTERPRET_CAST"; break; + case KW_RESTRICT: + out << "KW_RESTRICT"; + break; + case KW_RETURN: out << "KW_RETURN"; break; @@ -1227,6 +1231,10 @@ output_code(std::ostream &out) const { out << "reinterpret_cast"; break; + case KW_RESTRICT: + out << "__restrict"; + break; + case KW_RETURN: out << "return"; break;