浏览代码

cppparser: Fix `volatile` keyword not being parsed in all places

rdb 1 年之前
父节点
当前提交
c1e494c083
共有 1 个文件被更改,包括 27 次插入35 次删除
  1. 27 35
      dtool/src/cppparser/cppBison.yxx

+ 27 - 35
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);
 }
         ;