[PATCH 6/6] widl: Support referencing qualified interface names.

Rémi Bernon rbernon at codeweavers.com
Mon Feb 8 02:30:48 CST 2021


And split the dispinterface case, which is not supported in WinRT mode.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 include/windows.media.speechsynthesis.idl | 2 +-
 tools/widl/parser.y                       | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/include/windows.media.speechsynthesis.idl b/include/windows.media.speechsynthesis.idl
index 71c51b74c0c..502261f79c6 100644
--- a/include/windows.media.speechsynthesis.idl
+++ b/include/windows.media.speechsynthesis.idl
@@ -64,7 +64,7 @@ namespace Windows {
             ]
             runtimeclass VoiceInformation
             {
-                [default] interface IVoiceInformation;
+                [default] interface Windows.Media.SpeechSynthesis.IVoiceInformation;
             }
         }
     }
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index bbf71a2e3ef..b43a1cdd5f2 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -282,6 +282,7 @@ static typelib_t *current_typelib;
 %type <declspec> decl_spec unqualified_decl_spec decl_spec_no_type m_decl_spec_no_type
 %type <type> inherit interface interfacedef
 %type <type> interfaceref
+%type <type> dispinterfaceref
 %type <type> dispinterface dispinterfacedef
 %type <type> module moduledef
 %type <str> namespacedef
@@ -926,6 +927,7 @@ class_interfaces:				{ $$ = NULL; }
 
 class_interface:
 	  m_attributes interfaceref ';'		{ $$ = make_ifref($2); $$->attrs = $1; }
+	| m_attributes dispinterfaceref ';'	{ $$ = make_ifref($2); $$->attrs = $1; }
 	;
 
 dispinterface: tDISPINTERFACE typename		{ $$ = type_dispinterface_declare($2); }
@@ -965,7 +967,11 @@ interfacedef: attributes interface inherit
 
 interfaceref:
 	  tINTERFACE typename			{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }
-	| tDISPINTERFACE typename		{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }
+	| tINTERFACE namespace_pfx typename	{ $$ = get_type(TYPE_INTERFACE, $3, $2, 0); }
+	;
+
+dispinterfaceref:
+	  tDISPINTERFACE typename		{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }
 	;
 
 module:   tMODULE typename			{ $$ = type_module_declare($2); }
-- 
2.30.0




More information about the wine-devel mailing list