When running Collection.sort weird behavior is occurring inside of the
javascript mergeSort function which is generated by GWT. Here is the
GWT generated javascript with some additional console.logs

function sort(x, c){
  mergeSort(x, 0, x.length, c?c:($clinit_2603() , $clinit_2603() ,
NATURAL));
}

function mergeSort(x, fromIndex, toIndex, comp){
  console.log('mergeSort: fromIndex = ' + fromIndex);
  console.log('mergesort: -fromIndex: ' + (-fromIndex));
  var temp_0, a, result;
  temp_0 = (a = x , result = a.slice(fromIndex, toIndex) ,
initValues(a.arrayClass$, a.typeId$, a.queryId$, result) , result);
  mergeSort_0(temp_0, x, fromIndex, toIndex, -fromIndex, comp);
}

function mergeSort_0(temp_0, array, low, high, ofs, comp){
  console.log('mergeSort_0: ofs = ' + (ofs));
  var length_0, tempHigh, tempLow, tempMid;
  length_0 = high - low;
  if (length_0 < 7) {
    insertionSort(array, low, high, comp);
    return;
  }
  tempLow = low + ofs;
  tempHigh = high + ofs;
  tempMid = tempLow + (~~(tempHigh - tempLow) >> 1);
  mergeSort_0(array, temp_0, tempLow, tempMid, -ofs, comp);
  mergeSort_0(array, temp_0, tempMid, tempHigh, -ofs, comp);
  if (comp.compare(temp_0[tempMid - 1], temp_0[tempMid]) <= 0) {
    while (low < high) {
      setCheck(array, low++, temp_0[tempLow++]);
    }
    return;
  }
  merge(temp_0, tempLow, tempMid, tempHigh, array, low, high, comp);
}

When sort is run on an array, the argument ofs of mergeSort_0
mysteriously becomes a large negative number when it is passed -0,
such as -4419.

Output of the console.log calls:

mergeSort: fromIndex = 0
mergeSort: -fromIndex: -4419
mergeSort_0: ofs = -4419
...
...

Now, if the same code is run, with a modified call to mergeSort_0, so
that instead of passing -fromIndex we pass -1*fromIndex ofs properly
becomes 0:

function mergeSort(x, fromIndex, toIndex, comp){
  console.log('mergeSort: fromIndex = ' + fromIndex);
  console.log('mergesort: -fromIndex: ' + (-1*fromIndex));
  var temp_0, a, result;
  temp_0 = (a = x , result = a.slice(fromIndex, toIndex) ,
initValues(a.arrayClass$, a.typeId$, a.queryId$, result) , result);
  mergeSort_0(temp_0, x, fromIndex, toIndex, -1*fromIndex, comp);
}

Output of the console.log calls:
mergeSort: fromIndex = 0
mergeSort: -fromIndex: 0
mergeSort_0: ofs = 0
...
...

Also note the unmodified GWT code will work (pass -fromIndex to ofs)
if our page is run as
a top level application inside of Chrome. Ofs only becomes -4419 when
it is run inside the Iframe of an another GWT page or inside the popup
which is opened by another GWT page. Also the number is not always
-4419. Sometimes other negative numbers were seen. But once that
number appears once it always appears until the browser is restarted.

This error is not seen on Chrome 6 or Firefox of any version. Untested
on IE.

Test Configurations:
Ubuntu 10.04 32bit and 64bit and 10.10 64bit were tested
Chrome build 7.0.517.41

Thanks,
Bob

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to