Support 'ref' and 'unique' attributes for pointers. Modified: trunk/reactos/tools/widl/ChangeLog Modified: trunk/reactos/tools/widl/client.c Modified: trunk/reactos/tools/widl/lex.yy.c Modified: trunk/reactos/tools/widl/parser.l Modified: trunk/reactos/tools/widl/parser.y Modified: trunk/reactos/tools/widl/server.c Modified: trunk/reactos/tools/widl/widltypes.h Modified: trunk/reactos/tools/widl/y.tab.c Modified: trunk/reactos/tools/widl/y.tab.h _____
Modified: trunk/reactos/tools/widl/ChangeLog --- trunk/reactos/tools/widl/ChangeLog 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/ChangeLog 2005-04-03 12:49:25 UTC (rev 14474) @@ -1,5 +1,15 @@
ChangeLog
+2005-04-03 ekohl + + tools/widl/client.c + tools/widl/parser.l + tools/widl/parser.y + tools/widl/server.c + tools/widl/widltypes.h + +Support 'ref' and 'unique' attributes for pointers. + 2005-03-27 Jacek Caban (from WINE)
tools/widl/parser.y _____
Modified: trunk/reactos/tools/widl/client.c --- trunk/reactos/tools/widl/client.c 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/client.c 2005-04-03 12:49:25 UTC (rev 14474) @@ -187,6 +187,7 @@
var_t *var; int out_attr; int string_attr; + int ptr_attr, ref_attr, unique_attr;
print_client("static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =\n"); print_client("{\n"); @@ -217,12 +218,27 @@
if (var->ptr_level == 1) { + ptr_attr = is_attr(var->attrs, ATTR_PTR); + ref_attr = is_attr(var->attrs, ATTR_REF); + unique_attr = is_attr(var->attrs, ATTR_UNIQUE); + + if (ptr_attr + ref_attr + unique_attr == 0) + ref_attr = 1; + if (is_base_type(var->type)) { if (out_attr) print_client("0x11, 0x0c, /* FC_RP [allocated_on_stack] [simple_pointer] */\n"); else - print_client("0x11, 0x08, /* FC_RP [simple_pointer] */\n"); + { + if (ptr_attr) + print_client("0x14, 0x08, /* FC_FP [simple_pointer] */\n"); + else if (ref_attr) + print_client("0x11, 0x08, /* FC_RP [simple_pointer] */\n"); + else if (unique_attr) + print_client("0x12, 0x08, /* FC_UP [simple_pointer] */\n"); + } + if (string_attr) { if (var->type->type == RPC_FC_CHAR) @@ -268,6 +284,7 @@ int out_attr; int string_attr; int nothing_printed = 1; + int ptr_attr, ref_attr, unique_attr; var_t *var; unsigned int local_type_offset = *type_offset;
@@ -286,19 +303,104 @@ if (!out_attr && !in_attr) in_attr = 1;
+ ptr_attr = is_attr(var->attrs, ATTR_PTR); + ref_attr = is_attr(var->attrs, ATTR_REF); + unique_attr = is_attr(var->attrs, ATTR_UNIQUE); + + /* default to 'ref' attribute */ + if (ptr_attr + ref_attr + unique_attr == 0) + ref_attr = 1; + if (!in_attr) continue;
- if (var->ptr_level == 1 && - string_attr && - (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) + if (var->ptr_level == 1) { - size = 12; - alignment = 0; - if (last_size != -1) - fprintf(client, " +"); - fprintf(client, " %dU", (size == 0) ? 0 : size + alignment); - nothing_printed = 0; + if (unique_attr) + { + if (string_attr && + (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) + { + size = 16; + alignment = 0; + if (last_size != -1) + fprintf(client, " +"); + fprintf(client, " %dU", (size == 0) ? 0 : size + alignment); + nothing_printed = 0; + } + else + { + size = 8; + alignment = 0; + if (last_size != -1) + fprintf(client, " +"); + fprintf(client, " %dU", (size == 0) ? 0 : size + alignment); + nothing_printed = 0; + } + } + else if (ref_attr) + { + if (string_attr && + (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) + { + size = 12; + alignment = 0; + if (last_size != -1) + fprintf(client, " +"); + fprintf(client, " %dU", (size == 0) ? 0 : size + alignment); + nothing_printed = 0; + } + else + { + alignment = 0; + switch (var->type->type) + { + case RPC_FC_BYTE: + case RPC_FC_CHAR: + case RPC_FC_SMALL: + size = 1; + alignment = 0; + break; + + case RPC_FC_WCHAR: + case RPC_FC_USHORT: + case RPC_FC_SHORT: + size = 2; + if (last_size > 0 && last_size < 2) + alignment += (2 - last_size); + break; + + case RPC_FC_ULONG: + case RPC_FC_LONG: + case RPC_FC_FLOAT: + size = 4; + if (last_size > 0 && last_size < 4) + alignment += (4 - last_size); + break; + + case RPC_FC_HYPER: + case RPC_FC_DOUBLE: + size = 8; + if (last_size > 0 && last_size < 4) + alignment += (4 - last_size); + break; + + case RPC_FC_IGNORE: + size = 0; + break; + + default: + error("%s:%d Unknown/unsupported type 0x%x\n", + __FUNCTION__,__LINE__, var->type->type); + return; + } + + if (last_size != -1) + fprintf(client, " +"); + fprintf(client, " %dU", (size == 0) ? 0 : size + alignment); + nothing_printed = 0; + } + } } else { @@ -377,20 +479,46 @@ if (!out_attr && !in_attr) in_attr = 1;
+ ptr_attr = is_attr(var->attrs, ATTR_PTR); + ref_attr = is_attr(var->attrs, ATTR_REF); + unique_attr = is_attr(var->attrs, ATTR_UNIQUE); + + /* default to 'ref' attribute */ + if (ptr_attr + ref_attr + unique_attr == 0) + ref_attr = 1; + if (in_attr) { if (var->ptr_level == 1 && string_attr && (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) { - print_client("NdrConformantStringBufferSize(\n"); - indent++; - print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_client("(unsigned char __RPC_FAR *)%s,\n", var->name); - print_client("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u]);\n", - local_type_offset + 2); - nothing_printed = 1; - indent--; + if (ptr_attr) + { + /* FIXME: not supported yet */ + } + if (ref_attr) + { + print_client("NdrConformantStringBufferSize(\n"); + indent++; + print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); + print_client("(unsigned char __RPC_FAR *)%s,\n", var->name); + print_client("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u]);\n", + local_type_offset + 2); + nothing_printed = 1; + indent--; + } + else if (unique_attr) + { + print_client("NdrPointerBufferSize(\n"); + indent++; + print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); + print_client("(unsigned char __RPC_FAR *)%s,\n", var->name); + print_client("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u]);\n", + local_type_offset); + nothing_printed = 1; + indent--; + } } }
@@ -415,6 +543,7 @@ int in_attr; int out_attr; int string_attr; + int ptr_attr, ref_attr, unique_attr; var_t *var;
if (!func->args) @@ -441,17 +570,103 @@ return; }
- if (var->ptr_level == 1 && - string_attr && - (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) + if (var->ptr_level == 1) { - print_client("NdrConformantStringMarshall(\n"); - indent++; - print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_client("(unsigned char __RPC_FAR *)%s,\n", var->name); - print_client("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u]);\n", *type_offset + 2); - indent--; - fprintf(client, "\n"); + ptr_attr = is_attr(var->attrs, ATTR_PTR); + ref_attr = is_attr(var->attrs, ATTR_REF); + unique_attr = is_attr(var->attrs, ATTR_UNIQUE); + if (ptr_attr + ref_attr + unique_attr == 0) + ref_attr = 1; + + if (ref_attr) + { + if (string_attr && + (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) + { + print_client("NdrConformantStringMarshall(\n"); + indent++; + print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); + print_client("(unsigned char __RPC_FAR *)%s,\n", var->name); + print_client("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u]);\n", *type_offset + 2); + indent--; + fprintf(client, "\n"); + } + else + { + alignment = 0; + switch (var->type->type) + { + case RPC_FC_BYTE: + case RPC_FC_CHAR: + case RPC_FC_SMALL: + size = 1; + alignment = 0; + break; + + case RPC_FC_WCHAR: + case RPC_FC_USHORT: + case RPC_FC_SHORT: + size = 2; + if (last_size > 0 && last_size < 2) + alignment = (2 - last_size); + break; + + case RPC_FC_ULONG: + case RPC_FC_LONG: + case RPC_FC_FLOAT: + size = 4; + if (last_size > 0 && last_size < 4) + alignment = (4 - last_size); + break; + + case RPC_FC_HYPER: + case RPC_FC_DOUBLE: + size = 8; + if (last_size > 0 && last_size < 4) + alignment = (4 - last_size); + break; + + case RPC_FC_IGNORE: + size = 0; + break; + + default: + error("%s:%d Unknown/unsupported type 0x%x\n", + __FUNCTION__,__LINE__, var->type->type); + return; + } + + if (size != 0) + { + if (alignment != 0) + print_client("_StubMsg.Buffer += %u;\n", alignment); + + print_client("*(("); + write_type(client, var->type, NULL, var->tname); + fprintf(client, " __RPC_FAR*)_StubMsg.Buffer) = "); + if (var->ptr_level == 1) + fprintf(client, "*"); + write_name(client, var); + fprintf(client, ";\n"); + print_client("_StubMsg.Buffer += sizeof("); + write_type(client, var->type, NULL, var->tname); + fprintf(client, ");\n"); + fprintf(client, "\n"); + + last_size = size; + } + } + } + else if (unique_attr) + { + print_client("NdrPointerMarshall(\n"); + indent++; + print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); + print_client("(unsigned char __RPC_FAR *)%s,\n", var->name); + print_client("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u]);\n", *type_offset); + indent--; + fprintf(client, "\n"); + } } else { @@ -675,6 +890,9 @@ static void check_pointers(func_t *func) { var_t *var; + int ptr_attr; + int ref_attr; + int unique_attr;
if (!func->args) return; @@ -683,20 +901,50 @@ while (NEXT_LINK(var)) var = NEXT_LINK(var); while (var) { - if (var->ptr_level == 1) + ptr_attr = is_attr(var->attrs, ATTR_PTR); + ref_attr = is_attr(var->attrs, ATTR_REF); + unique_attr = is_attr(var->attrs, ATTR_UNIQUE); + + if (var->ptr_level == 0) { - print_client("if (!%s)\n", var->name); - print_client("{\n"); - indent++; - print_client("RpcRaiseException(RPC_X_NULL_REF_POINTER);\n"); - indent--; - print_client("}\n"); - fprintf(client, "\n"); + if (ptr_attr + ref_attr + unique_attr != 0) + { + error("The attributes [ptr], [ref] and [unique] can only be used for pointers!\n"); + return; + } } - else if (var->ptr_level > 1) + else { - error("Pointer level %d not supported!\n", var->ptr_level); - return; + /* default to 'ref' attribute */ + if (ptr_attr + ref_attr + unique_attr == 0) + { + ref_attr = 1; + } + + if (ptr_attr + ref_attr + unique_attr > 1) + { + error("The attributes [ptr], [ref] and [unique] are mutually exclusive!\n"); + return; + } + + if (var->ptr_level == 1) + { + if (ref_attr) + { + print_client("if (!%s)\n", var->name); + print_client("{\n"); + indent++; + print_client("RpcRaiseException(RPC_X_NULL_REF_POINTER);\n"); + indent--; + print_client("}\n"); + fprintf(client, "\n"); + } + } + else if (var->ptr_level > 1) + { + error("Pointer level %d not supported!\n", var->ptr_level); + return; + } }
var = PREV_LINK(var); _____
Modified: trunk/reactos/tools/widl/lex.yy.c --- trunk/reactos/tools/widl/lex.yy.c 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/lex.yy.c 2005-04-03 12:49:25 UTC (rev 14474) @@ -4555,6 +4555,7 @@
{"propput", tPROPPUT}, {"propputref", tPROPPUTREF}, /* ... */ + {"ptr", tPTR}, {"public", tPUBLIC}, /* ... */ {"readonly", tREADONLY}, @@ -4579,8 +4580,8 @@ /* ... */ {"transmit_as", tTRANSMITAS}, {"typedef", tTYPEDEF}, +/* ... */ {"union", tUNION}, -/* ... */ {"unique", tUNIQUE}, {"unsigned", tUNSIGNED}, /* ... */ _____
Modified: trunk/reactos/tools/widl/parser.l --- trunk/reactos/tools/widl/parser.l 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/parser.l 2005-04-03 12:49:25 UTC (rev 14474) @@ -275,6 +275,7 @@
{"propput", tPROPPUT}, {"propputref", tPROPPUTREF}, /* ... */ + {"ptr", tPTR}, {"public", tPUBLIC}, /* ... */ {"readonly", tREADONLY}, @@ -299,8 +300,8 @@ /* ... */ {"transmit_as", tTRANSMITAS}, {"typedef", tTYPEDEF}, +/* ... */ {"union", tUNION}, -/* ... */ {"unique", tUNIQUE}, {"unsigned", tUNSIGNED}, /* ... */ _____
Modified: trunk/reactos/tools/widl/parser.y --- trunk/reactos/tools/widl/parser.y 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/parser.y 2005-04-03 12:49:25 UTC (rev 14474) @@ -162,6 +162,7 @@
%token tPOINTERDEFAULT %token tPROPERTIES %token tPROPGET tPROPPUT tPROPPUTREF +%token tPTR %token tPUBLIC %token tREADONLY tREF %token tRESTRICTED @@ -373,8 +374,10 @@ | tPROPGET { $$ = make_attr(ATTR_PROPGET); } | tPROPPUT { $$ = make_attr(ATTR_PROPPUT); } | tPROPPUTREF { $$ = make_attr(ATTR_PROPPUTREF); } + | tPTR { $$ = make_attr(ATTR_PTR); } | tPUBLIC { $$ = make_attr(ATTR_PUBLIC); } | tREADONLY { $$ = make_attr(ATTR_READONLY); } + | tREF { $$ = make_attr(ATTR_REF); } | tRESTRICTED { $$ = make_attr(ATTR_RESTRICTED); } | tRETVAL { $$ = make_attr(ATTR_RETVAL); } | tSIZEIS '(' m_exprs ')' { $$ = make_attrp(ATTR_SIZEIS, $3); } @@ -383,6 +386,7 @@ | 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)); } + | tUNIQUE { $$ = make_attr(ATTR_UNIQUE); } | tUUID '(' aUUID ')' { $$ = make_attrp(ATTR_UUID, $3); } | tV1ENUM { $$ = make_attr(ATTR_V1ENUM); } | tVARARG { $$ = make_attr(ATTR_VARARG); } _____
Modified: trunk/reactos/tools/widl/server.c --- trunk/reactos/tools/widl/server.c 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/server.c 2005-04-03 12:49:25 UTC (rev 14474) @@ -192,6 +192,7 @@
var_t *var; int out_attr; int string_attr; + int ptr_attr, ref_attr, unique_attr;
print_server("static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =\n"); print_server("{\n"); @@ -222,12 +223,27 @@
if (var->ptr_level == 1) { + ptr_attr = is_attr(var->attrs, ATTR_PTR); + ref_attr = is_attr(var->attrs, ATTR_REF); + unique_attr = is_attr(var->attrs, ATTR_UNIQUE); + + if (ptr_attr + ref_attr + unique_attr == 0) + ref_attr = 1; + if (is_base_type(var->type)) { if (out_attr) print_server("0x11, 0x0c, /* FC_RP [allocated_on_stack] [simple_pointer] */\n"); else - print_server("0x11, 0x08, /* FC_RP [simple_pointer] */\n"); + { + if (ptr_attr) + print_server("0x14, 0x08, /* FC_FP [simple_pointer] */\n"); + else if (ref_attr) + print_server("0x11, 0x08, /* FC_RP [simple_pointer] */\n"); + else if (unique_attr) + print_server("0x12, 0x08, /* FC_UP [simple_pointer] */\n"); + } + if (string_attr) { if (var->type->type == RPC_FC_CHAR) @@ -439,9 +455,9 @@ unsigned int size; unsigned int last_size = 0; var_t *var; - int in_attr; - int out_attr; + int in_attr, out_attr; int string_attr; + int ptr_attr, ref_attr, unique_attr;
if (!func->args) return; @@ -460,18 +476,104 @@
if (in_attr) { - if (var->ptr_level == 1 && - string_attr && - (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) + if (var->ptr_level == 1) { - print_server("NdrConformantStringUnmarshall(\n"); - indent++; - print_server("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_server("(unsigned char __RPC_FAR * __RPC_FAR *)&%s,\n", var->name); - print_server("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u],\n", *type_offset + 2); - print_server("(unsigned char)0);\n"); - indent--; - fprintf(server, "\n"); + ptr_attr = is_attr(var->attrs, ATTR_PTR); + ref_attr = is_attr(var->attrs, ATTR_REF); + unique_attr = is_attr(var->attrs, ATTR_UNIQUE); + if (ptr_attr + ref_attr + unique_attr == 0) + ref_attr = 1; + + if (ref_attr) + { + if (string_attr && + (var->type->type == RPC_FC_CHAR || var->type->type == RPC_FC_WCHAR)) + { + print_server("NdrConformantStringUnmarshall(\n"); + indent++; + print_server("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); + print_server("(unsigned char __RPC_FAR * __RPC_FAR *)&%s,\n", var->name); + print_server("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u],\n", *type_offset + 2); + print_server("(unsigned char)0);\n"); + indent--; + fprintf(server, "\n"); + } + else + { + alignment = 0; + switch (var->type->type) + { + case RPC_FC_BYTE: + case RPC_FC_CHAR: + case RPC_FC_SMALL: + size = 1; + alignment = 0; + break; + + case RPC_FC_WCHAR: + case RPC_FC_USHORT: + case RPC_FC_SHORT: + size = 2; + if (last_size != 0 && last_size < 2) + alignment = (2 - last_size); + break; + + case RPC_FC_ULONG: + case RPC_FC_LONG: + case RPC_FC_FLOAT: + size = 4; + if (last_size != 0 && last_size < 4) + alignment = (4 - last_size); + break; + + case RPC_FC_HYPER: + case RPC_FC_DOUBLE: + size = 8; + if (last_size != 0 && last_size < 4) + alignment = (4 - last_size); + break; + + case RPC_FC_IGNORE: + size = 0; + break; + + default: + error("%s:%d Unknown/unsupported type 0x%x\n", + __FUNCTION__,__LINE__, var->type->type); + return; + } + + if (size != 0) + { + if (alignment != 0) + print_server("_StubMsg.Buffer += %u;\n", alignment); + + print_server(""); + write_name(server, var); + fprintf(server, " = ("); + write_type(server, var->type, NULL, var->tname); + fprintf(server, " __RPC_FAR*)_StubMsg.Buffer;\n"); + print_server("_StubMsg.Buffer += sizeof("); + write_type(server, var->type, NULL, var->tname); + fprintf(server, ");\n"); + fprintf(server, "\n"); + + last_size = size; + } + } + } + else if (unique_attr) + { + print_server("NdrPointerUnmarshall(\n"); + indent++; + print_server("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); + print_server("(unsigned char __RPC_FAR * __RPC_FAR *)&%s,\n", var->name); + print_server("(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u],\n", *type_offset); + print_server("(unsigned char)0);\n"); + indent--; + fprintf(server, "\n"); + } + } else { @@ -523,35 +625,15 @@ if (alignment != 0) print_server("_StubMsg.Buffer += %u;\n", alignment);
- if (var->ptr_level == 0) - { - print_server(""); - write_name(server, var); - fprintf(server, " = *(("); - write_type(server, var->type, NULL, var->tname); - fprintf(server, " __RPC_FAR*)_StubMsg.Buffer);\n"); - print_server("_StubMsg.Buffer += sizeof("); - write_type(server, var->type, NULL, var->tname); - fprintf(server, ");\n"); - fprintf(server, "\n"); - } - else if (var->ptr_level == 1) - { - print_server(""); - write_name(server, var); - fprintf(server, " = ("); - write_type(server, var->type, NULL, var->tname); - fprintf(server, " __RPC_FAR*)_StubMsg.Buffer;\n"); - print_server("_StubMsg.Buffer += sizeof("); - write_type(server, var->type, NULL, var->tname); - fprintf(server, ");\n"); - fprintf(server, "\n"); - } - else - { - error("Pointer level %d is not supported!\n", var->ptr_level); - return; - } + print_server(""); + write_name(server, var); + fprintf(server, " = *(("); + write_type(server, var->type, NULL, var->tname); + fprintf(server, " __RPC_FAR*)_StubMsg.Buffer);\n"); + print_server("_StubMsg.Buffer += sizeof("); + write_type(server, var->type, NULL, var->tname); + fprintf(server, ");\n"); + fprintf(server, "\n");
last_size = size; } _____
Modified: trunk/reactos/tools/widl/widltypes.h --- trunk/reactos/tools/widl/widltypes.h 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/widltypes.h 2005-04-03 12:49:25 UTC (rev 14474) @@ -98,8 +98,10 @@
ATTR_PROPGET, ATTR_PROPPUT, ATTR_PROPPUTREF, + ATTR_PTR, ATTR_PUBLIC, ATTR_READONLY, + ATTR_REF, ATTR_RESTRICTED, ATTR_RETVAL, ATTR_SIZEIS, @@ -108,6 +110,7 @@ ATTR_SWITCHIS, ATTR_SWITCHTYPE, ATTR_TRANSMITAS, + ATTR_UNIQUE, ATTR_UUID, ATTR_V1ENUM, ATTR_VARARG, _____
Modified: trunk/reactos/tools/widl/y.tab.c --- trunk/reactos/tools/widl/y.tab.c 2005-04-03 12:14:30 UTC (rev 14473) +++ trunk/reactos/tools/widl/y.tab.c 2005-04-03 12:49:25 UTC (rev 14474) @@ -91,40 +91,41 @@
#define tPROPGET 341 #define tPROPPUT 342 #define tPROPPUTREF 343 -#define tPUBLIC 344 -#define tREADONLY 345 -#define tREF 346 -#define tRESTRICTED 347 -#define tRETVAL 348 -#define tSHORT 349 -#define tSIGNED 350 -#define tSIZEIS 351 -#define tSIZEOF 352 -#define tSMALL 353 -#define tSOURCE 354 -#define tSTDCALL 355 -#define tSTRING 356 -#define tSTRUCT 357 -#define tSWITCH 358 -#define tSWITCHIS 359 -#define tSWITCHTYPE 360 -#define tTRANSMITAS 361 -#define tTYPEDEF 362 -#define tUNION 363 -#define tUNIQUE 364 -#define tUNSIGNED 365 -#define tUUID 366 -#define tV1ENUM 367 -#define tVARARG 368 -#define tVERSION 369 -#define tVOID 370 -#define tWCHAR 371 -#define tWIREMARSHAL 372 -#define tPOINTERTYPE 373 -#define COND 374 -#define CAST 375 -#define PPTR 376 -#define NEG 377 +#define tPTR 344 +#define tPUBLIC 345 +#define tREADONLY 346 +#define tREF 347 +#define tRESTRICTED 348 +#define tRETVAL 349 +#define tSHORT 350 +#define tSIGNED 351 +#define tSIZEIS 352 +#define tSIZEOF 353 +#define tSMALL 354 +#define tSOURCE 355 +#define tSTDCALL 356 +#define tSTRING 357 +#define tSTRUCT 358 +#define tSWITCH 359 +#define tSWITCHIS 360 +#define tSWITCHTYPE 361 +#define tTRANSMITAS 362 +#define tTYPEDEF 363 +#define tUNION 364 +#define tUNIQUE 365 +#define tUNSIGNED 366 +#define tUUID 367 +#define tV1ENUM 368 +#define tVARARG 369 +#define tVERSION 370 +#define tVOID 371 +#define tWCHAR 372 +#define tWIREMARSHAL 373 +#define tPOINTERTYPE 374 +#define COND 375 +#define CAST 376 +#define PPTR 377 +#define NEG 378
#line 1 "parser.y"
@@ -256,26 +257,26 @@
-#define YYFINAL 459 +#define YYFINAL 462 #define YYFLAG -32768 -#define YYNTBASE 143 +#define YYNTBASE 144
-#define YYTRANSLATE(x) ((unsigned)(x) <= 377 ? yytranslate[x] : 215) +#define YYTRANSLATE(x) ((unsigned)(x) <= 378 ? yytranslate[x] : 216)
static const short yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 123, 2, 133, - 134, 126, 125, 120, 124, 142, 127, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 139, 132, 2, - 140, 2, 141, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 124, 2, 134, + 135, 127, 126, 121, 125, 143, 128, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 140, 133, 2, + 141, 2, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 137, 2, 138, 2, 2, 2, 2, 2, 2, 2, + 138, 2, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 135, 122, 136, 128, 2, 2, 2, 2, + 2, 2, 136, 123, 137, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -300,7 +301,7 @@ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 121, 129, 130, 131 + 117, 118, 119, 120, 122, 130, 131, 132 };
#if YYDEBUG != 0 @@ -315,132 +316,133 @@ 222, 224, 226, 231, 236, 241, 246, 251, 253, 258, 260, 265, 271, 273, 275, 280, 282, 284, 286, 288, 290, 292, 294, 299, 301, 303, 305, 307, 309, 311, - 313, 318, 320, 322, 327, 332, 337, 342, 344, 346, - 351, 356, 358, 359, 361, 362, 365, 370, 374, 380, - 381, 384, 386, 388, 392, 396, 398, 404, 406, 410, - 411, 413, 415, 417, 419, 425, 429, 433, 437, 441, - 445, 449, 453, 457, 460, 463, 466, 471, 476, 480, - 482, 486, 488, 493, 494, 497, 500, 504, 507, 509, - 514, 522, 523, 525, 526, 528, 530, 532, 534, 536, - 538, 540, 542, 544, 546, 549, 552, 554, 556, 558, - 560, 562, 564, 565, 567, 569, 572, 575, 578, 581, - 583, 585, 588, 591, 594, 599, 600, 603, 606, 609, - 612, 615, 618, 622, 625, 629, 635, 636, 639, 642, - 645, 648, 654, 662, 664, 667, 670, 673, 676, 679, - 684, 687, 690, 692, 694, 698, 700, 704, 706, 708, - 714, 716, 718, 720, 723, 725, 728, 730, 733, 735, - 738, 743, 749, 760, 762 + 313, 315, 317, 322, 324, 326, 331, 336, 341, 343, + 348, 350, 352, 357, 362, 364, 365, 367, 368, 371, + 376, 380, 386, 387, 390, 392, 394, 398, 402, 404, + 410, 412, 416, 417, 419, 421, 423, 425, 431, 435, + 439, 443, 447, 451, 455, 459, 463, 466, 469, 472, + 477, 482, 486, 488, 492, 494, 499, 500, 503, 506, + 510, 513, 515, 520, 528, 529, 531, 532, 534, 536, + 538, 540, 542, 544, 546, 548, 550, 552, 555, 558, + 560, 562, 564, 566, 568, 570, 571, 573, 575, 578, + 581, 584, 587, 589, 591, 594, 597, 600, 605, 606, + 609, 612, 615, 618, 621, 624, 628, 631, 635, 641, + 642, 645, 648, 651, 654, 660, 668, 670, 673, 676, + 679, 682, 685, 690, 693, 696, 698, 700, 704, 706, + 710, 712, 714, 720, 722, 724, 726, 729, 731, 734, + 736, 739, 741, 744, 749, 755, 766, 768 };
-static const short yyrhs[] = { 144, - 0, 0, 144, 202, 0, 144, 201, 0, 144, 190, - 0, 144, 205, 0, 144, 153, 0, 144, 147, 0, - 0, 145, 202, 0, 145, 201, 0, 145, 190, 0, - 145, 205, 0, 145, 147, 0, 0, 146, 181, 132, - 0, 146, 147, 0, 132, 0, 167, 132, 0, 148, - 0, 171, 132, 0, 177, 132, 0, 150, 0, 210, - 132, 0, 212, 132, 0, 213, 132, 0, 37, 133, - 7, 134, 0, 64, 7, 132, 0, 149, 145, 9, - 0, 74, 3, 0, 161, 151, 135, 0, 152, 145, - 136, 0, 0, 156, 0, 116, 0, 157, 0, 156, - 120, 157, 0, 155, 0, 161, 211, 207, 158, 0, - 211, 207, 158, 0, 161, 211, 207, 133, 154, 134, - 0, 211, 207, 133, 154, 134, 0, 0, 137, 159, - 138, 0, 137, 126, 138, 0, 173, 0, 159, 120, - 174, 0, 159, 138, 137, 174, 0, 0, 161, 0, - 137, 162, 138, 0, 163, 0, 162, 120, 163, 0, - 162, 138, 137, 163, 0, 16, 0, 18, 0, 24, - 133, 184, 134, 0, 26, 133, 175, 134, 0, 33, +static const short yyrhs[] = { 145, + 0, 0, 145, 203, 0, 145, 202, 0, 145, 191, + 0, 145, 206, 0, 145, 154, 0, 145, 148, 0, + 0, 146, 203, 0, 146, 202, 0, 146, 191, 0, + 146, 206, 0, 146, 148, 0, 0, 147, 182, 133, + 0, 147, 148, 0, 133, 0, 168, 133, 0, 149, + 0, 172, 133, 0, 178, 133, 0, 151, 0, 211, + 133, 0, 213, 133, 0, 214, 133, 0, 37, 134, + 7, 135, 0, 64, 7, 133, 0, 150, 146, 9, + 0, 74, 3, 0, 162, 152, 136, 0, 153, 146, + 137, 0, 0, 157, 0, 117, 0, 158, 0, 157, + 121, 158, 0, 156, 0, 162, 212, 208, 159, 0, + 212, 208, 159, 0, 162, 212, 208, 134, 155, 135, + 0, 212, 208, 134, 155, 135, 0, 0, 138, 160, + 139, 0, 138, 127, 139, 0, 174, 0, 160, 121, + 175, 0, 160, 139, 138, 175, 0, 0, 162, 0, + 138, 163, 139, 0, 164, 0, 163, 121, 164, 0, + 163, 139, 138, 164, 0, 16, 0, 18, 0, 24, + 134, 185, 135, 0, 26, 134, 176, 135, 0, 33, 0, 34, 0, 35, 0, 36, 0, 38, 0, 39, - 133, 176, 134, 0, 39, 133, 7, 134, 0, 41, - 133, 7, 134, 0, 43, 0, 44, 133, 7, 134, - 0, 45, 133, 7, 134, 0, 45, 133, 176, 134, - 0, 48, 0, 51, 0, 53, 133, 176, 134, 0, - 54, 133, 7, 134, 0, 55, 133, 7, 134, 0, - 56, 133, 176, 134, 0, 57, 133, 7, 134, 0, - 58, 0, 60, 133, 176, 134, 0, 61, 0, 62, - 133, 184, 134, 0, 63, 133, 52, 3, 134, 0, - 66, 0, 69, 0, 73, 133, 172, 134, 0, 75, + 134, 177, 135, 0, 39, 134, 7, 135, 0, 41, + 134, 7, 135, 0, 43, 0, 44, 134, 7, 135, + 0, 45, 134, 7, 135, 0, 45, 134, 177, 135, + 0, 48, 0, 51, 0, 53, 134, 177, 135, 0, + 54, 134, 7, 135, 0, 55, 134, 7, 135, 0, + 56, 134, 177, 135, 0, 57, 134, 7, 135, 0, + 58, 0, 60, 134, 177, 135, 0, 61, 0, 62, + 134, 185, 135, 0, 63, 134, 52, 3, 135, 0, + 66, 0, 69, 0, 73, 134, 173, 135, 0, 75, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, - 0, 84, 0, 85, 133, 209, 134, 0, 87, 0, - 88, 0, 89, 0, 90, 0, 91, 0, 93, 0, - 94, 0, 97, 133, 172, 134, 0, 100, 0, 102, - 0, 105, 133, 174, 134, 0, 106, 133, 211, 134, - 0, 107, 133, 211, 134, 0, 112, 133, 8, 134, - 0, 113, 0, 114, 0, 115, 133, 214, 134, 0, - 118, 133, 211, 134, 0, 209, 0, 0, 101, 0, - 0, 165, 166, 0, 26, 174, 139, 179, 0, 38, - 139, 179, 0, 32, 211, 184, 140, 176, 0, 0, - 169, 120, 0, 169, 0, 170, 0, 169, 120, 170, - 0, 184, 140, 176, 0, 184, 0, 46, 183, 135, - 168, 136, 0, 173, 0, 172, 120, 173, 0, 0, - 174, 0, 5, 0, 6, 0, 3, 0, 174, 141, - 174, 139, 174, 0, 174, 122, 174, 0, 174, 123, - 174, 0, 174, 125, 174, 0, 174, 124, 174, 0, - 174, 126, 174, 0, 174, 127, 174, 0, 174, 10, - 174, 0, 174, 11, 174, 0, 128, 174, 0, 124, - 174, 0, 126, 174, 0, 133, 211, 134, 174, 0, - 98, 133, 211, 134, 0, 133, 174, 134, 0, 176, - 0, 175, 120, 176, 0, 174, 0, 49, 32, 211, - 184, 0, 0, 178, 179, 0, 180, 132, 0, 160, - 213, 132, 0, 161, 132, 0, 132, 0, 160, 211, - 207, 158, 0, 160, 211, 164, 207, 133, 154, 134, - 0, 0, 184, 0, 0, 3, 0, 4, 0, 3, - 0, 4, 0, 60, 0, 94, 0, 115, 0, 22, - 0, 117, 0, 187, 0, 96, 187, 0, 111, 187, - 0, 111, 0, 50, 0, 42, 0, 20, 0, 47, - 0, 52, 0, 0, 70, 0, 70, 0, 99, 186, - 0, 95, 186, 0, 76, 186, 0, 59, 186, 0, - 71, 0, 28, 0, 29, 3, 0, 29, 4, 0, - 161, 188, 0, 189, 135, 191, 136, 0, 0, 191, - 192, 0, 160, 202, 0, 40, 3, 0, 40, 4, - 0, 161, 193, 0, 86, 139, 0, 195, 180, 132, - 0, 77, 139, 0, 196, 181, 132, 0, 194, 135, - 195, 196, 136, 0, 0, 139, 4, 0, 72, 3, - 0, 72, 4, 0, 161, 199, 0, 200, 198, 135, - 146, 136, 0, 200, 139, 3, 135, 150, 146, 136, [truncated at 1000 lines; 2291 more skipped]