WIDL: Add missing ignore attribute. Check for inapplicable attributes in typedef.

Saveliy Tretiakov saveliyt at mail.ru
Wed Mar 22 07:58:14 CST 2006


ChangeLog:
Saveliy Tretiakov <saveliyt at mail.ru>
- Add missing ignore attribute.
- Check for inapplicable attributes in typedef. Changed attribute parsing 
in a way Mike McCormack suggested.
- Register type alias in typelib, if ATTR_PUBLIC is set.




-------------- next part --------------
Index: tools/widl/parser.l
===================================================================
RCS file: /home/wine/wine/tools/widl/parser.l,v
retrieving revision 1.35
diff -u -p -r1.35 parser.l
--- tools/widl/parser.l	9 Feb 2006 11:51:32 -0000	1.35
+++ tools/widl/parser.l	15 Mar 2006 13:48:51 -0000
@@ -228,6 +228,7 @@ static struct keyword {
 	{"hyper",			tHYPER},
 	{"id",				tID},
 	{"idempotent",			tIDEMPOTENT},
+	{"ignore", tIGNORE },
 /* ... */
 	{"iid_is",			tIIDIS},
 	{"immediatebind",		tIMMEDIATEBIND},
Index: tools/widl/parser.y
===================================================================
RCS file: /home/wine/wine/tools/widl/parser.y,v
retrieving revision 1.63
diff -u -p -r1.63 parser.y
--- tools/widl/parser.y	9 Feb 2006 11:51:32 -0000	1.63
+++ tools/widl/parser.y	22 Mar 2006 13:01:28 -0000
@@ -198,7 +198,27 @@ static type_t std_uhyper = { "MIDL_uhype
 %token tVERSION
 %token tVOID
 %token tWCHAR tWIREMARSHAL
+%token tIGNORE
 
+%type <attr> attr_aggregatable attr_appobject attr_async attr_auto_handle
+%type <attr> attr_bindable attr_callas attr_case attr_contexthandle
+%type <attr> attr_contexthandlenoserialize attr_contexthandleserialize
+%type <attr> attr_control attr_default attr_defaultcollelem attr_defaultvalue
+%type <attr> attr_defaultvtable attr_displaybind attr_dllname attr_dual
+%type <attr> attr_endpoint attr_entry attr_explicit_handle attr_handle
+%type <attr> attr_helpcontext attr_helpfile attr_helpstring attr_helpstringcontext
+%type <attr> attr_helpstringdll attr_hidden attr_id attr_idempotent attr_ignore
+%type <attr> attr_iidis attr_immediatebind attr_implicit_handle attr_in
+%type <attr> attr_inputsync attr_lengthis attr_local attr_nonbrowsable 
+%type <attr> attr_noncreatable attr_nonextensible attr_object attr_odl
+%type <attr> attr_oleautomation attr_optional attr_out attr_pointerdefault
+%type <attr> attr_propget attr_propput attr_propputref attr_public attr_range
+%type <attr> attr_readonly attr_requestedit attr_restricted attr_retval
+%type <attr> attr_sizeis attr_source attr_string attr_switchis attr_switchtype
+%type <attr> attr_transmitas attr_uuid attr_v1enum attr_vararg attr_version
+%type <attr> attr_wiremarshal attr_pointertype
+
+%type <attr> typedef_attributes typedef_attrib_list typedef_attribute
 %type <attr> m_attributes attributes attrib_list attribute
 %type <expr> m_exprs /* exprs expr_list */ m_expr expr expr_list_const expr_const
 %type <expr> array array_list
@@ -342,76 +362,147 @@ attrib_list: attribute
 	;
 
 attribute:
-	  tAGGREGATABLE				{ $$ = make_attr(ATTR_AGGREGATABLE); }
-	| tAPPOBJECT				{ $$ = make_attr(ATTR_APPOBJECT); }
-	| tASYNC				{ $$ = make_attr(ATTR_ASYNC); }
-	| tAUTOHANDLE				{ $$ = make_attr(ATTR_AUTO_HANDLE); }
-	| tBINDABLE				{ $$ = make_attr(ATTR_BINDABLE); }
-	| tCALLAS '(' ident ')'			{ $$ = make_attrp(ATTR_CALLAS, $3); }
-	| tCASE '(' expr_list_const ')'		{ $$ = make_attrp(ATTR_CASE, $3); }
-	| tCONTEXTHANDLE			{ $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); }
-	| tCONTEXTHANDLENOSERIALIZE		{ $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
-	| tCONTEXTHANDLESERIALIZE		{ $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
-	| tCONTROL				{ $$ = make_attr(ATTR_CONTROL); }
-	| tDEFAULT				{ $$ = make_attr(ATTR_DEFAULT); }
-	| tDEFAULTCOLLELEM			{ $$ = make_attr(ATTR_DEFAULTCOLLELEM); }
-	| tDEFAULTVALUE '(' expr_const ')'	{ $$ = make_attrp(ATTR_DEFAULTVALUE_EXPR, $3); }
-	| tDEFAULTVALUE '(' aSTRING ')'		{ $$ = make_attrp(ATTR_DEFAULTVALUE_STRING, $3); }
-	| tDEFAULTVTABLE			{ $$ = make_attr(ATTR_DEFAULTVTABLE); }
-	| tDISPLAYBIND				{ $$ = make_attr(ATTR_DISPLAYBIND); }
-	| tDLLNAME '(' aSTRING ')'		{ $$ = make_attrp(ATTR_DLLNAME, $3); }
-	| tDUAL					{ $$ = make_attr(ATTR_DUAL); }
-	| tENDPOINT '(' aSTRING ')'		{ $$ = make_attrp(ATTR_ENDPOINT, $3); }
-	| tENTRY '(' aSTRING ')'		{ $$ = make_attrp(ATTR_ENTRY_STRING, $3); }
-	| tENTRY '(' expr_const ')'		{ $$ = make_attrp(ATTR_ENTRY_ORDINAL, $3); }
-	| tEXPLICITHANDLE			{ $$ = make_attr(ATTR_EXPLICIT_HANDLE); }
-	| tHANDLE				{ $$ = make_attr(ATTR_HANDLE); }
-	| tHELPCONTEXT '(' expr_const ')'	{ $$ = make_attrp(ATTR_HELPCONTEXT, $3); }
-	| tHELPFILE '(' aSTRING ')'		{ $$ = make_attrp(ATTR_HELPFILE, $3); }
-	| tHELPSTRING '(' aSTRING ')'		{ $$ = make_attrp(ATTR_HELPSTRING, $3); }
-	| tHELPSTRINGCONTEXT '(' expr_const ')'	{ $$ = make_attrp(ATTR_HELPSTRINGCONTEXT, $3); }
-	| tHELPSTRINGDLL '(' aSTRING ')'	{ $$ = make_attrp(ATTR_HELPSTRINGDLL, $3); }
-	| tHIDDEN				{ $$ = make_attr(ATTR_HIDDEN); }
-	| tID '(' expr_const ')'		{ $$ = make_attrp(ATTR_ID, $3); }
-	| tIDEMPOTENT				{ $$ = make_attr(ATTR_IDEMPOTENT); }
-	| tIIDIS '(' ident ')'			{ $$ = make_attrp(ATTR_IIDIS, $3); }
-	| tIMMEDIATEBIND			{ $$ = make_attr(ATTR_IMMEDIATEBIND); }
-	| tIMPLICITHANDLE '(' tHANDLET aIDENTIFIER ')'	{ $$ = make_attrp(ATTR_IMPLICIT_HANDLE, $4); }
-	| tIN					{ $$ = make_attr(ATTR_IN); }
-	| tINPUTSYNC				{ $$ = make_attr(ATTR_INPUTSYNC); }
-	| tLENGTHIS '(' m_exprs ')'		{ $$ = make_attrp(ATTR_LENGTHIS, $3); }
-	| tLOCAL				{ $$ = make_attr(ATTR_LOCAL); }
-	| tNONBROWSABLE				{ $$ = make_attr(ATTR_NONBROWSABLE); }
-	| tNONCREATABLE				{ $$ = make_attr(ATTR_NONCREATABLE); }
-	| tNONEXTENSIBLE			{ $$ = make_attr(ATTR_NONEXTENSIBLE); }
-	| tOBJECT				{ $$ = make_attr(ATTR_OBJECT); }
-	| tODL					{ $$ = make_attr(ATTR_ODL); }
-	| tOLEAUTOMATION			{ $$ = make_attr(ATTR_OLEAUTOMATION); }
-	| tOPTIONAL                             { $$ = make_attr(ATTR_OPTIONAL); }
-	| tOUT					{ $$ = make_attr(ATTR_OUT); }
-	| tPOINTERDEFAULT '(' pointer_type ')'	{ $$ = make_attrv(ATTR_POINTERDEFAULT, $3); }
-	| tPROPGET				{ $$ = make_attr(ATTR_PROPGET); }
-	| tPROPPUT				{ $$ = make_attr(ATTR_PROPPUT); }
-	| tPROPPUTREF				{ $$ = make_attr(ATTR_PROPPUTREF); }
-	| tPUBLIC				{ $$ = make_attr(ATTR_PUBLIC); }
-	| tRANGE '(' expr_const ',' expr_const ')' { LINK($5, $3); $$ = make_attrp(ATTR_RANGE, $5); }
-	| tREADONLY				{ $$ = make_attr(ATTR_READONLY); }
-	| tREQUESTEDIT				{ $$ = make_attr(ATTR_REQUESTEDIT); }
-	| tRESTRICTED				{ $$ = make_attr(ATTR_RESTRICTED); }
-	| tRETVAL				{ $$ = make_attr(ATTR_RETVAL); }
-	| tSIZEIS '(' m_exprs ')'		{ $$ = make_attrp(ATTR_SIZEIS, $3); }
-	| tSOURCE				{ $$ = make_attr(ATTR_SOURCE); }
-	| tSTRING				{ $$ = make_attr(ATTR_STRING); }
-	| tSWITCHIS '(' expr ')'		{ $$ = make_attrp(ATTR_SWITCHIS, $3); }
-	| tSWITCHTYPE '(' type ')'		{ $$ = make_attrp(ATTR_SWITCHTYPE, type_ref($3)); }
-	| tTRANSMITAS '(' type ')'		{ $$ = make_attrp(ATTR_TRANSMITAS, type_ref($3)); }
-	| tUUID '(' aUUID ')'			{ $$ = make_attrp(ATTR_UUID, $3); }
-	| tV1ENUM				{ $$ = make_attr(ATTR_V1ENUM); }
-	| tVARARG				{ $$ = make_attr(ATTR_VARARG); }
-	| tVERSION '(' version ')'		{ $$ = make_attrv(ATTR_VERSION, $3); }
-	| tWIREMARSHAL '(' type ')'		{ $$ = make_attrp(ATTR_WIREMARSHAL, type_ref($3)); }
-	| pointer_type				{ $$ = make_attrv(ATTR_POINTERTYPE, $1); }
-	;
+	attr_aggregatable 
+	| attr_appobject 
+	| attr_async 
+	| attr_auto_handle
+	| attr_bindable 
+	| attr_callas 
+	| attr_case 
+	| attr_contexthandle
+	| attr_contexthandlenoserialize 
+	| attr_contexthandleserialize
+	| attr_control 
+	| attr_default 
+	| attr_defaultcollelem 
+	| attr_defaultvalue
+	| attr_defaultvtable 
+	| attr_displaybind 
+	| attr_dllname 
+	| attr_dual
+	| attr_endpoint 
+	| attr_entry 
+	| attr_explicit_handle 
+	| attr_handle
+	| attr_helpcontext 
+	| attr_helpfile 
+	| attr_helpstring 
+	| attr_helpstringcontext
+	| attr_helpstringdll 
+	| attr_hidden 
+	| attr_id 
+	| attr_idempotent 
+	| attr_ignore
+	| attr_iidis 
+	| attr_immediatebind 
+	| attr_implicit_handle 
+	| attr_in
+	| attr_inputsync 
+	| attr_lengthis 
+	| attr_local 
+	| attr_nonbrowsable 
+	| attr_noncreatable 
+	| attr_nonextensible 
+	| attr_object attr_odl
+	| attr_oleautomation 
+	| attr_optional 
+	| attr_out 
+	| attr_pointerdefault
+	| attr_propget 
+	| attr_propput 
+	| attr_propputref 
+	| attr_public 
+	| attr_range
+	| attr_readonly 
+	| attr_requestedit 
+	| attr_restricted 
+	| attr_retval
+	| attr_sizeis 
+	| attr_source 
+	| attr_string 
+	| attr_switchis 
+	| attr_switchtype
+	| attr_transmitas 
+	| attr_uuid 
+	| attr_v1enum 
+	| attr_vararg 
+	| attr_version
+	| attr_wiremarshal 
+	| attr_pointertype
+	;
+
+
+attr_aggregatable: tAGGREGATABLE   { $$ = make_attr(ATTR_AGGREGATABLE); } ;
+attr_appobject: tAPPOBJECT { $$ = make_attr(ATTR_APPOBJECT); } ;
+attr_async: tASYNC { $$ = make_attr(ATTR_ASYNC); } ;
+attr_auto_handle: tAUTOHANDLE { $$ = make_attr(ATTR_AUTO_HANDLE); } ;
+attr_bindable: tBINDABLE { $$ = make_attr(ATTR_BINDABLE); } ;
+attr_callas: tCALLAS '(' ident ')' { $$ = make_attrp(ATTR_CALLAS, $3); } ;
+attr_case: tCASE '(' expr_list_const ')' { $$ = make_attrp(ATTR_CASE, $3); } ;
+attr_contexthandle: tCONTEXTHANDLE{ $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); } ;
+attr_contexthandlenoserialize: tCONTEXTHANDLENOSERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0);  } ;
+attr_contexthandleserialize: tCONTEXTHANDLESERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); } ;
+attr_control: tCONTROL { $$ = make_attr(ATTR_CONTROL); } ;
+attr_default: tDEFAULT { $$ = make_attr(ATTR_DEFAULT); } ;
+attr_defaultcollelem: tDEFAULTCOLLELEM { $$ = make_attr(ATTR_DEFAULTCOLLELEM); } ;
+attr_defaultvalue: tDEFAULTVALUE '(' expr_const ')' { $$ = make_attrp(ATTR_DEFAULTVALUE_EXPR, $3); } 
+                   | tDEFAULTVALUE '(' aSTRING ')' { $$ = make_attrp(ATTR_DEFAULTVALUE_STRING, $3); } ;
+attr_defaultvtable: tDEFAULTVTABLE { $$ = make_attr(ATTR_DEFAULTVTABLE); } ;
+attr_displaybind: tDISPLAYBIND { $$ = make_attr(ATTR_DISPLAYBIND); } ;
+attr_dllname: tDLLNAME '(' aSTRING ')' { $$ = make_attrp(ATTR_DLLNAME, $3); } ;
+attr_dual: tDUAL { $$ = make_attr(ATTR_DUAL); } ;
+attr_endpoint: tENDPOINT '(' aSTRING ')' { $$ = make_attrp(ATTR_ENDPOINT, $3); } ;
+attr_entry: tENTRY '(' aSTRING ')' { $$ = make_attrp(ATTR_ENTRY_STRING, $3); } 
+            | tENTRY '(' expr_const ')' { $$ = make_attrp(ATTR_ENTRY_ORDINAL, $3); } ;
+attr_explicit_handle: tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); } ;
+attr_handle: tHANDLE { $$ = make_attr(ATTR_HANDLE); } ;
+attr_helpcontext: tHELPCONTEXT '(' expr_const ')' { $$ = make_attrp(ATTR_HELPCONTEXT, $3); } ;
+attr_helpfile: tHELPFILE '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPFILE, $3); } ;
+attr_helpstring: tHELPSTRING '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPSTRING, $3); } ;
+attr_helpstringcontext: tHELPSTRINGCONTEXT '(' expr_const ')' { $$ = make_attrp(ATTR_HELPSTRINGCONTEXT, $3); } ;
+attr_helpstringdll: tHELPSTRINGDLL '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPSTRINGDLL, $3); } ;
+attr_hidden: tHIDDEN { $$ = make_attr(ATTR_HIDDEN); } ;
+attr_id: tID '(' expr_const ')' { $$ = make_attrp(ATTR_ID, $3); } ;
+attr_idempotent: tIDEMPOTENT { $$ = make_attr(ATTR_IDEMPOTENT); } ;
+attr_ignore: tIGNORE { $$ = make_attr(ATTR_IGNORE); } ;
+attr_iidis: tIIDIS '(' ident ')' { $$ = make_attrp(ATTR_IIDIS, $3); } ;
+attr_immediatebind: tIMMEDIATEBIND { $$ = make_attr(ATTR_IMMEDIATEBIND); } ;
+attr_implicit_handle: tIMPLICITHANDLE '(' tHANDLET aIDENTIFIER ')' { $$ = make_attrp(ATTR_IMPLICIT_HANDLE, $4); } ;
+attr_in: tIN { $$ = make_attr(ATTR_IN); } ;
+attr_inputsync: tINPUTSYNC { $$ = make_attr(ATTR_INPUTSYNC); } ;
+attr_lengthis: tLENGTHIS '(' m_exprs ')' { $$ = make_attrp(ATTR_LENGTHIS, $3); } ;
+attr_local: tLOCAL { $$ = make_attr(ATTR_LOCAL); } ;
+attr_nonbrowsable: tNONBROWSABLE { $$ = make_attr(ATTR_NONBROWSABLE); } ;
+attr_noncreatable: tNONCREATABLE { $$ = make_attr(ATTR_NONCREATABLE); } ;
+attr_nonextensible: tNONEXTENSIBLE { $$ = make_attr(ATTR_NONEXTENSIBLE); } ;
+attr_object: tOBJECT { $$ = make_attr(ATTR_OBJECT); } ;
+attr_odl: tODL { $$ = make_attr(ATTR_ODL); } ;
+attr_oleautomation: tOLEAUTOMATION { $$ = make_attr(ATTR_OLEAUTOMATION); } ;
+attr_optional: tOPTIONAL { $$ = make_attr(ATTR_OPTIONAL); } ;
+attr_out: tOUT { $$ = make_attr(ATTR_OUT); } ;
+attr_pointerdefault: tPOINTERDEFAULT '(' pointer_type ')' { $$ = make_attrv(ATTR_POINTERDEFAULT, $3); } ;
+attr_propget: tPROPGET { $$ = make_attr(ATTR_PROPGET); } ;
+attr_propput: tPROPPUT { $$ = make_attr(ATTR_PROPPUT); } ;
+attr_propputref: tPROPPUTREF { $$ = make_attr(ATTR_PROPPUTREF); } ;
+attr_public: tPUBLIC { $$ = make_attr(ATTR_PUBLIC); } ;
+attr_range: tRANGE '(' expr_const ',' expr_const ')' { LINK($5, $3); $$ = make_attrp(ATTR_RANGE, $5); } ;
+attr_readonly: tREADONLY { $$ = make_attr(ATTR_READONLY); } ;
+attr_requestedit: tREQUESTEDIT { $$ = make_attr(ATTR_REQUESTEDIT); } ;
+attr_restricted: tRESTRICTED { $$ = make_attr(ATTR_RESTRICTED); } ;
+attr_retval: tRETVAL { $$ = make_attr(ATTR_RETVAL); } ;
+attr_sizeis: tSIZEIS '(' m_exprs ')' { $$ = make_attrp(ATTR_SIZEIS, $3); } ;
+attr_source: tSOURCE { $$ = make_attr(ATTR_SOURCE); } ;
+attr_string: tSTRING { $$ = make_attr(ATTR_STRING); } ;
+attr_switchis: tSWITCHIS '(' expr ')' { $$ = make_attrp(ATTR_SWITCHIS, $3); } ;
+attr_switchtype: tSWITCHTYPE '(' type ')' { $$ = make_attrp(ATTR_SWITCHTYPE, type_ref($3)); } ;
+attr_transmitas: tTRANSMITAS '(' type ')' { $$ = make_attrp(ATTR_TRANSMITAS, type_ref($3)); } ;
+attr_uuid: tUUID '(' aUUID ')' { $$ = make_attrp(ATTR_UUID, $3); } ;
+attr_v1enum: tV1ENUM { $$ = make_attr(ATTR_V1ENUM); } ;
+attr_vararg: tVARARG { $$ = make_attr(ATTR_VARARG); } ;
+attr_version: tVERSION '(' version ')' { $$ = make_attrv(ATTR_VERSION, $3); } ;
+attr_wiremarshal: tWIREMARSHAL '(' type ')' { $$ = make_attrp(ATTR_WIREMARSHAL, type_ref($3)); } ;
+attr_pointertype: pointer_type { $$ = make_attrv(ATTR_POINTERTYPE, $1); } ;
+
 
 callconv:
 	| tSTDCALL
@@ -768,14 +859,38 @@ type:	  tVOID					{ $$ = make_tref(NULL,
 	| tUNION aIDENTIFIER			{ $$ = make_tref(NULL, find_type2($2, tsUNION)); }
 	;
 
-typedef: tTYPEDEF m_attributes type pident_list	{ typeref_t *tref = uniq_tref($3);
+
+typedef_attributes: { $$ = NULL; }
+	| '[' typedef_attrib_list ']'			{ $$ = $2; }
+	;
+
+typedef_attrib_list: typedef_attribute
+	| typedef_attrib_list ',' typedef_attribute		{ LINK($3, $1); $$ = $3; }
+	| typedef_attrib_list ']' '[' typedef_attribute		{ LINK($4, $1); $$ = $4; }
+	;
+
+typedef_attribute:
+	attr_contexthandle
+	| attr_contexthandlenoserialize	
+	| attr_contexthandleserialize
+	| attr_handle
+	| attr_ignore
+	| attr_string
+	| attr_switchtype
+	| attr_transmitas
+	| attr_public
+	| attr_pointertype
+	;
+
+typedef: tTYPEDEF typedef_attributes type pident_list	{ 
+						  typeref_t *tref = uniq_tref($3);
 						  $4->tname = tref->name;
 						  tref->name = NULL;
 						  $$ = type_ref(tref);
 						  $$->attrs = $2;
 						  if (!parse_only && do_header)
 						    write_typedef($$, $4);
-						  if (in_typelib && $$->attrs)
+						  if (in_typelib && ($$->attrs || is_attr($2, ATTR_PUBLIC)))
 						    add_typedef($$, $4);
 						  reg_types($$, $4, 0);
 						}
Index: tools/widl/widltypes.h
===================================================================
RCS file: /home/wine/wine/tools/widl/widltypes.h,v
retrieving revision 1.36
diff -u -p -r1.36 widltypes.h
--- tools/widl/widltypes.h	9 Feb 2006 11:51:32 -0000	1.36
+++ tools/widl/widltypes.h	15 Mar 2006 14:31:01 -0000
@@ -88,6 +88,7 @@ enum attr_type
     ATTR_ID,
     ATTR_IDEMPOTENT,
     ATTR_IIDIS,
+    ATTR_IGNORE,
     ATTR_IMMEDIATEBIND,
     ATTR_IMPLICIT_HANDLE,
     ATTR_IN,


More information about the wine-patches mailing list