1.1 --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Wed Nov 21 21:48:51 2012 +0100
1.2 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Wed Nov 21 23:53:00 2012 +0100
1.3 @@ -339,6 +339,16 @@
1.4 function java_lang_String_equalsZLjava_lang_Object(arg0,arg1) {
1.5 return arg0.toString() === arg1.toString();
1.6 }
1.7 +
1.8 +function java_lang_String_hashCodeI(self) {
1.9 + var h = 0;
1.10 + var s = self.toString();
1.11 + for (var i = 0; i < s.length; i++) {
1.12 + h = 31 * h + s.charCodeAt(i);
1.13 + }
1.14 + return h;
1.15 +}
1.16 +
1.17 /*
1.18 function java_lang_String_contentEqualsZLjava_lang_StringBuffer(arg0,arg1) {
1.19 var arg2;
1.20 @@ -853,56 +863,6 @@
1.21 case 14: return stack.pop(); // 172
1.22 }
1.23 }
1.24 -function java_lang_String_hashCodeI(arg0) {
1.25 - var arg1;
1.26 - var arg2;
1.27 - var arg3;
1.28 - var arg4;
1.29 - var arg5;
1.30 - var arg6;
1.31 -;
1.32 - var stack = new Array(3);
1.33 - var gt = 0;
1.34 - for(;;) switch(gt) {
1.35 - case 0: stack.push(arg0); // 42
1.36 - case 1: stack.push(stack.pop().hash); // 180 1 98
1.37 - case 4: arg1 = stack.pop(); // 60
1.38 - case 5: stack.push(arg0); // 42
1.39 - case 6: stack.push(stack.pop().count); // 180 1 97
1.40 - case 9: arg2 = stack.pop(); // 61
1.41 - case 10: stack.push(arg1); // 27
1.42 - case 11: if (stack.pop() != 0) { gt = 62; continue; } // 154 0 51
1.43 - case 14: stack.push(arg2); // 28
1.44 - case 15: if (stack.pop() <= 0) { gt = 62; continue; } // 158 0 47
1.45 - case 18: stack.push(arg0); // 42
1.46 - case 19: stack.push(stack.pop().offset); // 180 1 99
1.47 - case 22: arg3 = stack.pop(); // 62
1.48 - case 23: stack.push(arg0); // 42
1.49 - case 24: stack.push(stack.pop().value); // 180 1 100
1.50 - case 27: arg4 = stack.pop() // 58 4
1.51 - case 29: stack.push(0); // 3
1.52 - case 30: arg5 = stack.pop() // 54 5
1.53 - case 32: stack.push(arg5); // 21 5
1.54 - case 34: stack.push(arg2); // 28
1.55 - case 35: if (stack.pop() <= stack.pop()) { gt = 57; continue; } // 162 0 22
1.56 - case 38: stack.push(31); // 16 31
1.57 - case 40: stack.push(arg1); // 27
1.58 - case 41: stack.push(stack.pop() * stack.pop()); // 104
1.59 - case 42: stack.push(arg4); // 25 4
1.60 - case 44: stack.push(arg3); // 29
1.61 - case 45: arg3++; // 132 3 1
1.62 - case 48: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
1.63 - case 49: stack.push(stack.pop() + stack.pop()); // 96
1.64 - case 50: arg1 = stack.pop(); // 60
1.65 - case 51: arg5++; // 132 5 1
1.66 - case 54: gt = 32; continue; // 167 255 234
1.67 - case 57: stack.push(arg0); // 42
1.68 - case 58: stack.push(arg1); // 27
1.69 - case 59: { var v = stack.pop(); stack.pop().hash = v; } // 181 1 98
1.70 - case 62: stack.push(arg1); // 27
1.71 - case 63: return stack.pop(); // 172
1.72 - }
1.73 -}
1.74 function java_lang_String_lastIndexOfII(arg0,arg1) {
1.75 var arg2;
1.76 ;
1.77 @@ -2293,6 +2253,7 @@
1.78 String.prototype.replaceLjava_lang_StringCC = java_lang_String_replaceLjava_lang_StringCC;
1.79 String.prototype.containsZLjava_lang_CharSequence = java_lang_String_containsZLjava_lang_CharSequence;
1.80 String.prototype.equalsZLjava_lang_Object = java_lang_String_equalsZLjava_lang_Object;
1.81 +String.prototype.hashCodeI = java_lang_String_hashCodeI;
1.82 String.prototype.toCharArrayAC = java_lang_String_toCharArrayAC;
1.83 String.prototype.valueOfLjava_lang_StringI=java_lang_String_valueOfLjava_lang_StringI;
1.84 String.prototype.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI;
2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Wed Nov 21 21:48:51 2012 +0100
2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Wed Nov 21 23:53:00 2012 +0100
2.3 @@ -60,6 +60,10 @@
2.4 return s.replace(a, b);
2.5 }
2.6
2.7 + public static int hashCode(String h) {
2.8 + return h.hashCode();
2.9 + }
2.10 +
2.11 public static String insertBuffer() {
2.12 StringBuilder sb = new StringBuilder();
2.13 sb.append("Jardo!");
3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Wed Nov 21 21:48:51 2012 +0100
3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Wed Nov 21 23:53:00 2012 +0100
3.3 @@ -117,6 +117,25 @@
3.4 );
3.5 }
3.6
3.7 + @Test public void compareHashCodeHi() throws Exception {
3.8 + String j = "Hi";
3.9 + int jh = StringSample.hashCode(j);
3.10 + assertExec(
3.11 + "Hashcode is the same " +jh,
3.12 + "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String",
3.13 + Double.valueOf(jh), j
3.14 + );
3.15 + }
3.16 + @Test public void compareHashCode1() throws Exception {
3.17 + String j = "Hello Java!";
3.18 + int jh = StringSample.hashCode(j);
3.19 + assertExec(
3.20 + "Hashcode is the same " + jh,
3.21 + "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String",
3.22 + Double.valueOf(jh), j
3.23 + );
3.24 + }
3.25 +
3.26 @Test public void countAB() throws Exception {
3.27 assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
3.28 assertExec(
3.29 @@ -147,7 +166,7 @@
3.30 } catch (ScriptException ex) {
3.31 fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
3.32 } catch (NoSuchMethodException ex) {
3.33 - fail("Cannot find method in\n" + codeSeq, ex);
3.34 + fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
3.35 }
3.36 if (ret == null && expRes == null) {
3.37 return;
3.38 @@ -155,7 +174,7 @@
3.39 if (expRes.equals(ret)) {
3.40 return;
3.41 }
3.42 - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq);
3.43 + assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq));
3.44
3.45 }
3.46