# HG changeset patch # User Jaroslav Tulach # Date 1353253550 -3600 # Node ID 03be8510007ce03e1856434393f4ca11df0ab79b # Parent 1d6ca19d717473448e14501ccd19a9c8cd0374e1 Chars need to be treated as numbers, otherwise switch statement does not work diff -r 1d6ca19d7174 -r 03be8510007c emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Sun Nov 18 15:20:07 2012 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Sun Nov 18 16:45:50 2012 +0100 @@ -17,7 +17,7 @@ } function java_lang_String_charAtCI(arg0,arg1) { - return arg0.toString().charAt(arg1); + return arg0.toString().charCodeAt(arg1); } function java_lang_String_lengthI(arg0) { return arg0.toString().length; @@ -46,6 +46,22 @@ return self.substring(self.length - find.length) === find; } +function java_lang_String_indexOfII(arg0,ch) { + if (typeof ch === 'number') ch = String.fromCharCode(ch); + return arg0.toString().indexOf(ch); +} +function java_lang_String_indexOfIII(arg0,ch,from) { + if (typeof ch === 'number') ch = String.fromCharCode(ch); + return arg0.toString().indexOf(ch, from); +} + +function java_lang_String_getCharsVACI(self, arr, to) { + var s = self.toString(); + for (var i = 0; i < s.length; i++) { + arr[to++] = s[i]; + } +} + /* function java_lang_String_codePointAtII(arg0,arg1) { var arg2; @@ -887,116 +903,6 @@ case 63: return stack.pop(); // 172 } } -function java_lang_String_indexOfII(arg0,arg1) { - var arg2; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 27 - case 2: stack.push(0); // 3 - case 3: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.indexOfIII(self, v0, v1)); } // 182 1 135 - case 6: return stack.pop(); // 172 - } -} -function java_lang_String_indexOfIII(arg0,arg1,arg2) { - var arg3; - var arg4; - var arg5; - var arg6; - var arg7; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().offset); // 180 1 99 - case 4: stack.push(arg0); // 42 - case 5: stack.push(stack.pop().count); // 180 1 97 - case 8: stack.push(stack.pop() + stack.pop()); // 96 - case 9: arg3 = stack.pop(); // 62 - case 10: stack.push(arg0); // 42 - case 11: stack.push(stack.pop().value); // 180 1 100 - case 14: arg4 = stack.pop() // 58 4 - case 16: stack.push(arg2); // 28 - case 17: if (stack.pop() >= 0) { gt = 25; continue; } // 156 0 8 - case 20: stack.push(0); // 3 - case 21: arg2 = stack.pop(); // 61 - case 22: gt = 35; continue; // 167 0 13 - case 25: stack.push(arg2); // 28 - case 26: stack.push(arg0); // 42 - case 27: stack.push(stack.pop().count); // 180 1 97 - case 30: if (stack.pop() > stack.pop()) { gt = 35; continue; } // 161 0 5 - case 33: // 2 - case 34: return stack.pop(); // 172 - case 35: stack.push(arg0); // 42 - case 36: stack.push(stack.pop().offset); // 180 1 99 - case 39: stack.push(arg2); // 28 - case 40: stack.push(stack.pop() + stack.pop()); // 96 - case 41: arg5 = stack.pop() // 54 5 - case 43: stack.push(arg1); // 27 - case 44: stack.push(65536); // 18 3 - case 46: if (stack.pop() <= stack.pop()) { gt = 80; continue; } // 162 0 34 - case 49: stack.push(arg5); // 21 5 - case 51: stack.push(arg3); // 29 - case 52: if (stack.pop() <= stack.pop()) { gt = 78; continue; } // 162 0 26 - case 55: stack.push(arg4); // 25 4 - case 57: stack.push(arg5); // 21 5 - case 59: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 60: stack.push(arg1); // 27 - case 61: if (stack.pop() != stack.pop()) { gt = 72; continue; } // 160 0 11 - case 64: stack.push(arg5); // 21 5 - case 66: stack.push(arg0); // 42 - case 67: stack.push(stack.pop().offset); // 180 1 99 - case 70: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 71: return stack.pop(); // 172 - case 72: arg5++; // 132 5 1 - case 75: gt = 49; continue; // 167 255 230 - case 78: // 2 - case 79: return stack.pop(); // 172 - case 80: stack.push(arg1); // 27 - case 81: stack.push(1114111); // 18 4 - case 83: if (stack.pop() < stack.pop()) { gt = 149; continue; } // 163 0 66 - case 86: stack.push(arg1); // 27 - case 87: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109 - case 90: arg6 = stack.pop() // 58 6 - case 92: stack.push(arg5); // 21 5 - case 94: stack.push(arg3); // 29 - case 95: if (stack.pop() <= stack.pop()) { gt = 149; continue; } // 162 0 54 - case 98: stack.push(arg4); // 25 4 - case 100: stack.push(arg5); // 21 5 - case 102: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 103: stack.push(arg6); // 25 6 - case 105: stack.push(0); // 3 - case 106: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 107: if (stack.pop() != stack.pop()) { gt = 143; continue; } // 160 0 36 - case 110: stack.push(arg5); // 21 5 - case 112: stack.push(1); // 4 - case 113: stack.push(stack.pop() + stack.pop()); // 96 - case 114: stack.push(arg3); // 29 - case 115: if (stack.pop() != stack.pop()) { gt = 121; continue; } // 160 0 6 - case 118: gt = 149; continue; // 167 0 31 - case 121: stack.push(arg4); // 25 4 - case 123: stack.push(arg5); // 21 5 - case 125: stack.push(1); // 4 - case 126: stack.push(stack.pop() + stack.pop()); // 96 - case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 128: stack.push(arg6); // 25 6 - case 130: stack.push(1); // 4 - case 131: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 132: if (stack.pop() != stack.pop()) { gt = 143; continue; } // 160 0 11 - case 135: stack.push(arg5); // 21 5 - case 137: stack.push(arg0); // 42 - case 138: stack.push(stack.pop().offset); // 180 1 99 - case 141: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 142: return stack.pop(); // 172 - case 143: arg5++; // 132 5 1 - case 146: gt = 92; continue; // 167 255 202 - case 149: // 2 - case 150: return stack.pop(); // 172 - } -} function java_lang_String_lastIndexOfII(arg0,arg1) { var arg2; ; @@ -2378,6 +2284,7 @@ String.prototype.lengthI = java_lang_String_lengthI; String.prototype.isEmptyZ = java_lang_String_isEmptyZ; String.prototype.getCharsVIIACI = java_lang_String_getCharsVIIACAI; +String.prototype.getCharsVACI = java_lang_String_getCharsVACI; String.prototype.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String; String.prototype.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI; String.prototype.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII; @@ -2389,6 +2296,8 @@ String.prototype.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI; String.prototype.startsWithZLjava_lang_String=java_lang_String_startsWithZLjava_lang_String; String.prototype.endsWithZLjava_lang_String=java_lang_String_endsWithZLjava_lang_String; +String.prototype.indexOfII=java_lang_String_indexOfII; +String.prototype.indexOfIII=java_lang_String_indexOfIII; String.prototype.$instOf_java_lang_String = true; String.prototype.$instOf_java_io_Serializable = true; diff -r 1d6ca19d7174 -r 03be8510007c vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Sun Nov 18 15:20:07 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Sun Nov 18 16:45:50 2012 +0100 @@ -60,6 +60,17 @@ return s.replace(a, b); } + public static int countAB(String txt) { + int cnt = 0; + for (int i = 0; i < txt.length(); i++) { + switch (txt.charAt(i)) { + case 'A': cnt++; break; + case 'B': cnt += 2; break; + } + } + return cnt; + } + public static String toStringTest(int howMuch) { counter = 0; StringSample ss = null; diff -r 1d6ca19d7174 -r 03be8510007c vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Sun Nov 18 15:20:07 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Sun Nov 18 16:45:50 2012 +0100 @@ -32,7 +32,7 @@ assertExec( "First char in Hello is H", "org_apidesign_vm4brwsr_StringSample_sayHelloCI", - "H", 0 + 72, 0 ); } @@ -109,6 +109,16 @@ ); } + @Test public void countAB() throws Exception { + assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane"); + assertExec( + "One A and one B adds to 3", + "org_apidesign_vm4brwsr_StringSample_countABILjava_lang_String", + Double.valueOf(3), "Ahoj Bedo!" + ); + + } + private static CharSequence codeSeq; private static Invocable code;