Commit 25732276 authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

[local] functions should not be written to the typelib.

parent 0c238856
...@@ -1139,11 +1139,11 @@ static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid, ...@@ -1139,11 +1139,11 @@ static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
return S_OK; return S_OK;
} }
static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, func_t *func) static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, func_t *func, int index)
{ {
int offset; int offset;
int *typedata; int *typedata;
int i, index = func->idx, id; int i, id;
int decoded_size, extra_attr = 0; int decoded_size, extra_attr = 0;
int num_params = 0, num_defaults = 0; int num_params = 0, num_defaults = 0;
var_t *arg, *last_arg = NULL; var_t *arg, *last_arg = NULL;
...@@ -1155,8 +1155,15 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, func_t *func) ...@@ -1155,8 +1155,15 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, func_t *func)
id = ((0x6000 | typeinfo->typeinfo->cImplTypes) << 16) | index; id = ((0x6000 | typeinfo->typeinfo->cImplTypes) << 16) | index;
chat("(%p,%d)\n", typeinfo, index); chat("add_func_desc(%p,%d)\n", typeinfo, index);
for(attr = func->def->attrs; attr; attr = NEXT_LINK(attr)) {
if(attr->type == ATTR_LOCAL) {
chat("add_func_desc: skipping local function\n");
return S_FALSE;
}
}
if (!typeinfo->typedata) { if (!typeinfo->typedata) {
typeinfo->typedata = xmalloc(0x2000); typeinfo->typedata = xmalloc(0x2000);
typeinfo->typedata[0] = 0; typeinfo->typedata[0] = 0;
...@@ -1950,10 +1957,8 @@ int create_msft_typelib(typelib_t *typelib) ...@@ -1950,10 +1957,8 @@ int create_msft_typelib(typelib_t *typelib)
func_t *cur = entry->u.interface->funcs; func_t *cur = entry->u.interface->funcs;
while(NEXT_LINK(cur)) cur = NEXT_LINK(cur); while(NEXT_LINK(cur)) cur = NEXT_LINK(cur);
while(cur) { while(cur) {
if(cur->idx == -1) cur->idx = idx; if(add_func_desc(msft_typeinfo, cur, idx) == S_OK)
else if(cur->idx != idx) error("method index mismatch\n"); idx++;
add_func_desc(msft_typeinfo, cur);
idx++;
cur = PREV_LINK(cur); cur = PREV_LINK(cur);
} }
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment