mshtml: Resolve duplicated IDispatch entries as soon as they are processed.
This commit is contained in:
parent
a9c00c66d0
commit
0bfe8b441a
|
@ -230,9 +230,15 @@ static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, const FUN
|
|||
func_info_t *info;
|
||||
HRESULT hres;
|
||||
|
||||
if(data->func_cnt && data->funcs[data->func_cnt-1].id == desc->memid) {
|
||||
info = data->funcs+data->func_cnt-1;
|
||||
}else {
|
||||
for(info = data->funcs; info < data->funcs+data->func_cnt; info++) {
|
||||
if(info->id == desc->memid) {
|
||||
if(info->tid != tid)
|
||||
return; /* Duplicated in other interface */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(info == data->funcs+data->func_cnt) {
|
||||
if(data->func_cnt == *size)
|
||||
data->funcs = heap_realloc_zero(data->funcs, (*size <<= 1)*sizeof(func_info_t));
|
||||
|
||||
|
@ -373,22 +379,6 @@ static dispex_data_t *preprocess_dispex_data(DispatchEx *This)
|
|||
data->funcs = heap_realloc(data->funcs, data->func_cnt * sizeof(func_info_t));
|
||||
qsort(data->funcs, data->func_cnt, sizeof(func_info_t), dispid_cmp);
|
||||
|
||||
for(i = 1; i < data->func_cnt && data->funcs[i-1].id != data->funcs[i].id; i++);
|
||||
if(i < data->func_cnt) {
|
||||
unsigned j = i--;
|
||||
|
||||
/* We have at least one duplicated property. This may happen if more than one
|
||||
* interface implements the same property. We have to remove these duplicated
|
||||
* entries. */
|
||||
|
||||
while(j < data->func_cnt) {
|
||||
while(j+1 < data->func_cnt && data->funcs[j+1].id == data->funcs[j].id)
|
||||
j++;
|
||||
data->funcs[i++] = data->funcs[j++];
|
||||
}
|
||||
data->func_cnt = i;
|
||||
}
|
||||
|
||||
data->name_table = heap_alloc(data->func_cnt * sizeof(func_info_t*));
|
||||
for(i=0; i < data->func_cnt; i++)
|
||||
data->name_table[i] = data->funcs+i;
|
||||
|
|
|
@ -766,9 +766,9 @@ static const NodeImplVtbl HTMLObjectElementImplVtbl = {
|
|||
};
|
||||
|
||||
static const tid_t HTMLObjectElement_iface_tids[] = {
|
||||
HTMLELEMENT_TIDS,
|
||||
IHTMLObjectElement_tid,
|
||||
IHTMLObjectElement2_tid,
|
||||
IHTMLObjectElement_tid,
|
||||
HTMLELEMENT_TIDS,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLObjectElement_dispex = {
|
||||
|
|
|
@ -3154,12 +3154,12 @@ static const dispex_static_data_vtbl_t HTMLStyle_dispex_vtbl = {
|
|||
};
|
||||
|
||||
static const tid_t HTMLStyle_iface_tids[] = {
|
||||
IHTMLStyle_tid,
|
||||
IHTMLStyle2_tid,
|
||||
IHTMLStyle3_tid,
|
||||
IHTMLStyle4_tid,
|
||||
IHTMLStyle5_tid,
|
||||
IHTMLStyle6_tid,
|
||||
IHTMLStyle5_tid,
|
||||
IHTMLStyle4_tid,
|
||||
IHTMLStyle3_tid,
|
||||
IHTMLStyle2_tid,
|
||||
IHTMLStyle_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLStyle_dispex = {
|
||||
|
|
Loading…
Reference in New Issue