Partial support for String.hashCode
authorJaroslav Tulach <jtulach@netbeans.org>
Wed, 21 Nov 2012 23:53:00 +0100
changeset 193c705a447ce71
parent 192 3bb0eb51bed6
child 194 fb6298cc9ec5
Partial support for String.hashCode
emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js
vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java
vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java
     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