Почему происходит сбой приложения GWT на Blackberry OS7? - PullRequest
3 голосов
/ 11 ноября 2011

Я попробовал следующий код в браузере Blackberry OS7:

<html>
<body>
test page
<script>
i = 0;
if(i < -2147483647) {
   alert("very low")
} 

if(i < -2147483648) {
   alert("very very low")
} 

if(i < -2147483649) {
    alert("very very very low")
}
</script></body></html>

И на удивление получилось очень-очень низко !!

Я думал, что целые числа в javascript должны были поддерживать больше, чем это. Конечно, этот код хорошо работает в других браузерах ...

Хитрость в том, что я обнаружил, что пытаюсь запустить приложение gwt на ежевике. Это работало нормально на OS6, но не на OS7. Я отлаживал свой код, скомпилированный GWT, и случается, что реализация javascript Integer.parseInt имеет тест, использующий предельно высокие и крайне низкие значения типа int. Поскольку браузер OS7, похоже, не поддерживает эти экстремальные значения должным образом (битовое переполнение?), Я получаю исключение, и мое приложение не запускается ...

Я пытаюсь найти решение для этого. Я думаю о переписывании реализации GWT integer.parseInt только для blackberry. что ты думаешь? Есть еще идеи?

1 Ответ

1 голос
/ 28 июня 2012

В случае, если кто-нибудь наткнется на эту старую ветку в поисках ответов:

Мне кажется, ошибка в компиляторной части JS-движка.

Фрагмент 1:

var i = 0;
if (i < -2147483648) {
  console.log("less");
} else {
  console.log("greater");
}

Фрагмент 2:

var i = 0;
var j = i < -2147483648;
if (j) {
  console.log("less");
} else {
  console.log("greater");
}

В то время как фрагмент 1 отображает ошибку, регистрируя «меньше», фрагмент 2 не показывает.

Итак, чтобы обойти эту ошибку, мы проверили исходники GWT и скомпилировали наш собственный SDK с этим патчем. С тех пор у нас не было проблем с Integer.parseInt.

diff --git a/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java         b/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
index 04a85e1..abb3e5c 100644
--- a/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
+++ b/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
@@ -221,9 +221,10 @@ public abstract class Number implements Serializable {
     }

     int toReturn = __parseInt(s, radix);
+    boolean isTooLow = toReturn < lowerBound;
     if (__isNaN(toReturn)) {
       throw NumberFormatException.forInputString(s);
-    } else if (toReturn < lowerBound || toReturn > upperBound) {
+    } else if (isTooLow || toReturn > upperBound) {
       throw NumberFormatException.forInputString(s);
     }

Ссылка на отчет об ошибке GWT: http://code.google.com/p/google-web-toolkit/issues/detail?id=7291

...