mshtml: Remove duplicated property entries in preprocess_dispex_data.

oldstable
Jacek Caban 2013-01-16 12:36:08 +01:00 committed by Alexandre Julliard
parent d1ccbceb4d
commit bce6ee2b84
2 changed files with 29 additions and 0 deletions

View File

@ -373,6 +373,22 @@ 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;

View File

@ -165,6 +165,18 @@ function test_override_functions() {
ok(tmp === "test", "div.addBehavior() = " + tmp);
}
function test_forin() {
var cnt=0;
document.body.innerHTML = '<a id="aid"></a>';
for(var x in document.getElementById("aid")) {
cnt++;
}
ok(cnt > 100, "cnt = " + cnt);
}
var globalVar = false;
function runTests() {
@ -185,6 +197,7 @@ function runTests() {
test_attribute_collection();
test_arg_conv();
test_override_functions();
test_forin();
var r = window.execScript("globalVar = true;");
ok(r === undefined, "execScript returned " + r);