This is a known bug in V8. It was fixed here: http://code.google.com/p/v8/source/detail?r=5631. Which made its way into V8 trunk in version 2.5.1. Chrome DevChannel is still affected AFAIK, though I would expect an update to 2.5.1 in the next week or two.
On Thu, Oct 21, 2010 at 11:35 AM, [email protected] <[email protected]>wrote: > 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]<google-web-toolkit%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-web-toolkit?hl=en. > > -- 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.
