Chars need to be treated as numbers, otherwise switch statement does not work javap
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 18 Nov 2012 16:45:50 +0100
branchjavap
changeset 18403be8510007c
parent 183 1d6ca19d7174
child 185 d441042e6c11
Chars need to be treated as numbers, otherwise switch statement does not work
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	Sun Nov 18 15:20:07 2012 +0100
     1.2 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js	Sun Nov 18 16:45:50 2012 +0100
     1.3 @@ -17,7 +17,7 @@
     1.4  }
     1.5  
     1.6  function java_lang_String_charAtCI(arg0,arg1) {
     1.7 -    return arg0.toString().charAt(arg1);
     1.8 +    return arg0.toString().charCodeAt(arg1);
     1.9  }
    1.10  function java_lang_String_lengthI(arg0) {
    1.11      return arg0.toString().length;
    1.12 @@ -46,6 +46,22 @@
    1.13      return self.substring(self.length - find.length) === find;
    1.14  }
    1.15  
    1.16 +function java_lang_String_indexOfII(arg0,ch) {
    1.17 +    if (typeof ch === 'number') ch = String.fromCharCode(ch);
    1.18 +    return arg0.toString().indexOf(ch);
    1.19 +}
    1.20 +function java_lang_String_indexOfIII(arg0,ch,from) {
    1.21 +    if (typeof ch === 'number') ch = String.fromCharCode(ch);
    1.22 +    return arg0.toString().indexOf(ch, from);
    1.23 +}
    1.24 +
    1.25 +function java_lang_String_getCharsVACI(self, arr, to) {
    1.26 +    var s = self.toString();
    1.27 +    for (var i = 0; i < s.length; i++) {
    1.28 +        arr[to++] = s[i];
    1.29 +    }
    1.30 +}
    1.31 +
    1.32  /*
    1.33  function java_lang_String_codePointAtII(arg0,arg1) {
    1.34    var arg2;
    1.35 @@ -887,116 +903,6 @@
    1.36      case 63: return stack.pop(); // 172
    1.37    }
    1.38  }
    1.39 -function java_lang_String_indexOfII(arg0,arg1) {
    1.40 -  var arg2;
    1.41 -;
    1.42 -  var stack = new Array(3);
    1.43 -  var gt = 0;
    1.44 -  for(;;) switch(gt) {
    1.45 -    case 0: stack.push(arg0); // 42
    1.46 -    case 1: stack.push(arg1); // 27
    1.47 -    case 2: stack.push(0); // 3
    1.48 -    case 3: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.indexOfIII(self, v0, v1)); } // 182 1 135
    1.49 -    case 6: return stack.pop(); // 172
    1.50 -  }
    1.51 -}
    1.52 -function java_lang_String_indexOfIII(arg0,arg1,arg2) {
    1.53 -  var arg3;
    1.54 -  var arg4;
    1.55 -  var arg5;
    1.56 -  var arg6;
    1.57 -  var arg7;
    1.58 -;
    1.59 -  var stack = new Array(3);
    1.60 -  var gt = 0;
    1.61 -  for(;;) switch(gt) {
    1.62 -    case 0: stack.push(arg0); // 42
    1.63 -    case 1: stack.push(stack.pop().offset); // 180 1 99
    1.64 -    case 4: stack.push(arg0); // 42
    1.65 -    case 5: stack.push(stack.pop().count); // 180 1 97
    1.66 -    case 8: stack.push(stack.pop() + stack.pop()); // 96
    1.67 -    case 9: arg3 = stack.pop(); // 62
    1.68 -    case 10: stack.push(arg0); // 42
    1.69 -    case 11: stack.push(stack.pop().value); // 180 1 100
    1.70 -    case 14: arg4 = stack.pop() // 58 4
    1.71 -    case 16: stack.push(arg2); // 28
    1.72 -    case 17: if (stack.pop() >= 0) { gt = 25; continue; } // 156 0 8
    1.73 -    case 20: stack.push(0); // 3
    1.74 -    case 21: arg2 = stack.pop(); // 61
    1.75 -    case 22: gt = 35; continue; // 167 0 13
    1.76 -    case 25: stack.push(arg2); // 28
    1.77 -    case 26: stack.push(arg0); // 42
    1.78 -    case 27: stack.push(stack.pop().count); // 180 1 97
    1.79 -    case 30: if (stack.pop() > stack.pop()) { gt = 35; continue; } // 161 0 5
    1.80 -    case 33:  // 2
    1.81 -    case 34: return stack.pop(); // 172
    1.82 -    case 35: stack.push(arg0); // 42
    1.83 -    case 36: stack.push(stack.pop().offset); // 180 1 99
    1.84 -    case 39: stack.push(arg2); // 28
    1.85 -    case 40: stack.push(stack.pop() + stack.pop()); // 96
    1.86 -    case 41: arg5 = stack.pop() // 54 5
    1.87 -    case 43: stack.push(arg1); // 27
    1.88 -    case 44: stack.push(65536); // 18 3
    1.89 -    case 46: if (stack.pop() <= stack.pop()) { gt = 80; continue; } // 162 0 34
    1.90 -    case 49: stack.push(arg5); // 21 5
    1.91 -    case 51: stack.push(arg3); // 29
    1.92 -    case 52: if (stack.pop() <= stack.pop()) { gt = 78; continue; } // 162 0 26
    1.93 -    case 55: stack.push(arg4); // 25 4
    1.94 -    case 57: stack.push(arg5); // 21 5
    1.95 -    case 59: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
    1.96 -    case 60: stack.push(arg1); // 27
    1.97 -    case 61: if (stack.pop() != stack.pop()) { gt = 72; continue; } // 160 0 11
    1.98 -    case 64: stack.push(arg5); // 21 5
    1.99 -    case 66: stack.push(arg0); // 42
   1.100 -    case 67: stack.push(stack.pop().offset); // 180 1 99
   1.101 -    case 70: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   1.102 -    case 71: return stack.pop(); // 172
   1.103 -    case 72: arg5++; // 132 5 1
   1.104 -    case 75: gt = 49; continue; // 167 255 230
   1.105 -    case 78:  // 2
   1.106 -    case 79: return stack.pop(); // 172
   1.107 -    case 80: stack.push(arg1); // 27
   1.108 -    case 81: stack.push(1114111); // 18 4
   1.109 -    case 83: if (stack.pop() < stack.pop()) { gt = 149; continue; } // 163 0 66
   1.110 -    case 86: stack.push(arg1); // 27
   1.111 -    case 87: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109
   1.112 -    case 90: arg6 = stack.pop() // 58 6
   1.113 -    case 92: stack.push(arg5); // 21 5
   1.114 -    case 94: stack.push(arg3); // 29
   1.115 -    case 95: if (stack.pop() <= stack.pop()) { gt = 149; continue; } // 162 0 54
   1.116 -    case 98: stack.push(arg4); // 25 4
   1.117 -    case 100: stack.push(arg5); // 21 5
   1.118 -    case 102: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   1.119 -    case 103: stack.push(arg6); // 25 6
   1.120 -    case 105: stack.push(0); // 3
   1.121 -    case 106: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   1.122 -    case 107: if (stack.pop() != stack.pop()) { gt = 143; continue; } // 160 0 36
   1.123 -    case 110: stack.push(arg5); // 21 5
   1.124 -    case 112: stack.push(1); // 4
   1.125 -    case 113: stack.push(stack.pop() + stack.pop()); // 96
   1.126 -    case 114: stack.push(arg3); // 29
   1.127 -    case 115: if (stack.pop() != stack.pop()) { gt = 121; continue; } // 160 0 6
   1.128 -    case 118: gt = 149; continue; // 167 0 31
   1.129 -    case 121: stack.push(arg4); // 25 4
   1.130 -    case 123: stack.push(arg5); // 21 5
   1.131 -    case 125: stack.push(1); // 4
   1.132 -    case 126: stack.push(stack.pop() + stack.pop()); // 96
   1.133 -    case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   1.134 -    case 128: stack.push(arg6); // 25 6
   1.135 -    case 130: stack.push(1); // 4
   1.136 -    case 131: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   1.137 -    case 132: if (stack.pop() != stack.pop()) { gt = 143; continue; } // 160 0 11
   1.138 -    case 135: stack.push(arg5); // 21 5
   1.139 -    case 137: stack.push(arg0); // 42
   1.140 -    case 138: stack.push(stack.pop().offset); // 180 1 99
   1.141 -    case 141: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   1.142 -    case 142: return stack.pop(); // 172
   1.143 -    case 143: arg5++; // 132 5 1
   1.144 -    case 146: gt = 92; continue; // 167 255 202
   1.145 -    case 149:  // 2
   1.146 -    case 150: return stack.pop(); // 172
   1.147 -  }
   1.148 -}
   1.149  function java_lang_String_lastIndexOfII(arg0,arg1) {
   1.150    var arg2;
   1.151  ;
   1.152 @@ -2378,6 +2284,7 @@
   1.153  String.prototype.lengthI = java_lang_String_lengthI;
   1.154  String.prototype.isEmptyZ = java_lang_String_isEmptyZ;
   1.155  String.prototype.getCharsVIIACI = java_lang_String_getCharsVIIACAI;
   1.156 +String.prototype.getCharsVACI = java_lang_String_getCharsVACI;
   1.157  String.prototype.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String;
   1.158  String.prototype.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI;
   1.159  String.prototype.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII;
   1.160 @@ -2389,6 +2296,8 @@
   1.161  String.prototype.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI;
   1.162  String.prototype.startsWithZLjava_lang_String=java_lang_String_startsWithZLjava_lang_String;
   1.163  String.prototype.endsWithZLjava_lang_String=java_lang_String_endsWithZLjava_lang_String;
   1.164 +String.prototype.indexOfII=java_lang_String_indexOfII;
   1.165 +String.prototype.indexOfIII=java_lang_String_indexOfIII;
   1.166  
   1.167  String.prototype.$instOf_java_lang_String = true;
   1.168  String.prototype.$instOf_java_io_Serializable = true;
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java	Sun Nov 18 15:20:07 2012 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java	Sun Nov 18 16:45:50 2012 +0100
     2.3 @@ -60,6 +60,17 @@
     2.4          return s.replace(a, b);
     2.5      }
     2.6      
     2.7 +    public static int countAB(String txt) {
     2.8 +        int cnt = 0;
     2.9 +        for (int i = 0; i < txt.length(); i++) {
    2.10 +            switch (txt.charAt(i)) {
    2.11 +                case 'A': cnt++; break;
    2.12 +                case 'B': cnt += 2; break;
    2.13 +            }
    2.14 +        }
    2.15 +        return cnt;
    2.16 +    }
    2.17 +    
    2.18      public static String toStringTest(int howMuch) {
    2.19          counter = 0;
    2.20          StringSample ss = null;
     3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Sun Nov 18 15:20:07 2012 +0100
     3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Sun Nov 18 16:45:50 2012 +0100
     3.3 @@ -32,7 +32,7 @@
     3.4          assertExec(
     3.5              "First char in Hello is H",
     3.6              "org_apidesign_vm4brwsr_StringSample_sayHelloCI",
     3.7 -            "H", 0
     3.8 +            72, 0
     3.9          );
    3.10      }
    3.11  
    3.12 @@ -109,6 +109,16 @@
    3.13          );
    3.14      }
    3.15      
    3.16 +    @Test public void countAB() throws Exception {
    3.17 +        assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
    3.18 +        assertExec(
    3.19 +            "One A and one B adds to 3",
    3.20 +            "org_apidesign_vm4brwsr_StringSample_countABILjava_lang_String",
    3.21 +            Double.valueOf(3), "Ahoj Bedo!"
    3.22 +        );
    3.23 +        
    3.24 +    }
    3.25 +    
    3.26      private static CharSequence codeSeq;
    3.27      private static Invocable code;
    3.28