[WIDL]
authorEric Kohl <eric.kohl@reactos.org>
Thu, 11 Aug 2011 18:34:26 +0000 (18:34 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Thu, 11 Aug 2011 18:34:26 +0000 (18:34 +0000)
- Reapply the switchtype patch from widl-ros.diff. This patch should be sent upstream to wine.

See issue #6406 for more details.

svn path=/trunk/; revision=53187

reactos/tools/widl/parser.tab.c
reactos/tools/widl/parser.y

index d861068..b7faf28 100644 (file)
@@ -6398,6 +6398,12 @@ static type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, at
   else if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC))
     attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );
 
   else if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC))
     attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );
 
+  /* Append the SWITCHTYPE attribute to a non-encapsulated union if it does not already have it.  */
+  if (type_get_type_detect_alias(type) == TYPE_UNION &&
+      is_attr(attrs, ATTR_SWITCHTYPE) &&
+      !is_attr(type->attrs, ATTR_SWITCHTYPE))
+    type->attrs = append_attr(type->attrs, make_attrp(ATTR_SWITCHTYPE, get_attrp(attrs, ATTR_SWITCHTYPE)));
+
   LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )
   {
 
   LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )
   {
 
index 5286977..ee708ea 100644 (file)
@@ -1850,6 +1850,12 @@ static type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, at
   else if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC))
     attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );
 
   else if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC))
     attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );
 
+  /* Append the SWITCHTYPE attribute to a non-encapsulated union if it does not already have it.  */
+  if (type_get_type_detect_alias(type) == TYPE_UNION &&
+      is_attr(attrs, ATTR_SWITCHTYPE) &&
+      !is_attr(type->attrs, ATTR_SWITCHTYPE))
+    type->attrs = append_attr(type->attrs, make_attrp(ATTR_SWITCHTYPE, get_attrp(attrs, ATTR_SWITCHTYPE)));
+
   LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )
   {
 
   LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )
   {