From c1e494c0836ebff626c9e26bf954fd6d1065aa3c Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 29 Mar 2024 11:39:51 +0100 Subject: [PATCH] cppparser: Fix `volatile` keyword not being parsed in all places --- dtool/src/cppparser/cppBison.yxx | 62 ++++++++++++++------------------ 1 file changed, 27 insertions(+), 35 deletions(-) diff --git a/dtool/src/cppparser/cppBison.yxx b/dtool/src/cppparser/cppBison.yxx index f1795d945c..8a249d1185 100644 --- a/dtool/src/cppparser/cppBison.yxx +++ b/dtool/src/cppparser/cppBison.yxx @@ -1832,6 +1832,19 @@ template_formal_parameter: $3->add_modifier(IIT_const); CPPInstance *inst = new CPPInstance($2, $3, 0, @3.file); $$ = inst; +} + | KW_VOLATILE template_formal_parameter_type formal_parameter_identifier template_parameter_maybe_initialize +{ + $3->add_modifier(IIT_volatile); + CPPInstance *inst = new CPPInstance($2, $3, 0, @3.file); + inst->set_initializer($4); + $$ = inst; +} + | KW_VOLATILE template_formal_parameter_type parameter_pack_identifier +{ + $3->add_modifier(IIT_volatile); + CPPInstance *inst = new CPPInstance($2, $3, 0, @3.file); + $$ = inst; } ; @@ -2183,50 +2196,29 @@ structure_init_body: ; function_parameter: - optional_attributes type formal_parameter_identifier maybe_initialize -{ - $3->add_attributes($1); - $$ = new CPPInstance($2, $3, 0, @3.file); - $$->set_initializer($4); -} - | optional_attributes KW_CONST type formal_parameter_identifier maybe_initialize + optional_attributes storage_class type formal_parameter_identifier maybe_initialize { + if ($2 & CPPInstance::SC_const) { + $4->add_modifier(IIT_const); + } + if ($2 & CPPInstance::SC_volatile) { + $4->add_modifier(IIT_volatile); + } $4->add_attributes($1); - $4->add_modifier(IIT_const); $$ = new CPPInstance($3, $4, 0, @4.file); $$->set_initializer($5); } - | optional_attributes KW_CONST KW_REGISTER type formal_parameter_identifier maybe_initialize -{ - $5->add_attributes($1); - $5->add_modifier(IIT_const); - $$ = new CPPInstance($4, $5, 0, @4.file); - $$->set_initializer($6); -} - | optional_attributes type_pack parameter_pack_identifier maybe_initialize -{ - $3->add_attributes($1); - $$ = new CPPInstance($2, $3, 0, @3.file); - $$->set_initializer($4); -} - | optional_attributes KW_CONST type_pack parameter_pack_identifier maybe_initialize + | optional_attributes storage_class type_pack parameter_pack_identifier maybe_initialize { + if ($2 & CPPInstance::SC_const) { + $4->add_modifier(IIT_const); + } + if ($2 & CPPInstance::SC_volatile) { + $4->add_modifier(IIT_volatile); + } $4->add_attributes($1); - $4->add_modifier(IIT_const); $$ = new CPPInstance($3, $4, 0, @4.file); $$->set_initializer($5); -} - | optional_attributes KW_CONST KW_REGISTER type_pack parameter_pack_identifier maybe_initialize -{ - $5->add_attributes($1); - $5->add_modifier(IIT_const); - $$ = new CPPInstance($4, $5, 0, @4.file); - $$->set_initializer($6); -} - | optional_attributes KW_REGISTER function_parameter -{ - $$ = $3; - $$->_attributes.add_attributes_from($1); } ;