Implementation of two more methods for String - yet many are missing to make StringBuilder work
1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Fri Sep 28 07:27:34 2012 +0200
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Fri Sep 28 07:43:53 2012 +0200
1.3 @@ -43,9 +43,14 @@
1.4 }
1.5 String name = toProcess.getFirst();
1.6 processed.add(name);
1.7 + if (name.startsWith("sun/")) {
1.8 + continue;
1.9 + }
1.10 if (name.startsWith("java/")
1.11 && !name.equals("java/lang/Object")
1.12 && !name.equals("java/lang/String")
1.13 + && !name.equals("java/lang/StringBuilder")
1.14 + && !name.equals("java/lang/AbstractStringBuilder")
1.15 ) {
1.16 continue;
1.17 }
2.1 --- a/vm/src/main/resources/org/apidesign/vm4brwsr/emulation/java_lang_String.js Fri Sep 28 07:27:34 2012 +0200
2.2 +++ b/vm/src/main/resources/org/apidesign/vm4brwsr/emulation/java_lang_String.js Fri Sep 28 07:43:53 2012 +0200
2.3 @@ -662,32 +662,6 @@
2.4 case 19: return; // 177
2.5 }
2.6 }
2.7 -function java_lang_String_lengthI(arg0) {
2.8 - var arg1;
2.9 -;
2.10 - var stack = new Array(1);
2.11 - var gt = 0;
2.12 - for(;;) switch(gt) {
2.13 - case 0: stack.push(arg0); // 42
2.14 - case 1: stack.push(stack.pop().count); // 180 1 97
2.15 - case 4: return stack.pop(); // 172
2.16 - }
2.17 -}
2.18 -function java_lang_String_isEmptyZ(arg0) {
2.19 - var arg1;
2.20 -;
2.21 - var stack = new Array(1);
2.22 - var gt = 0;
2.23 - for(;;) switch(gt) {
2.24 - case 0: stack.push(arg0); // 42
2.25 - case 1: stack.push(stack.pop().count); // 180 1 97
2.26 - case 4: if (stack.pop() != 0) { gt = 11; continue; } // 154 0 7
2.27 - case 7: stack.push(1); // 4
2.28 - case 8: gt = 12; continue; // 167 0 4
2.29 - case 11: stack.push(0); // 3
2.30 - case 12: return stack.pop(); // 172
2.31 - }
2.32 -}
2.33 */
2.34
2.35 String.prototype._toJS = function (self) { return self; };
2.36 @@ -695,6 +669,13 @@
2.37 function java_lang_String_charAtCI(arg0,arg1) {
2.38 return arg0._toJS(arg0).charAt(arg1);
2.39 }
2.40 +function java_lang_String_lengthI(arg0) {
2.41 + return arg0._toJS(arg0).length;
2.42 +}
2.43 +function java_lang_String_isEmptyZ(arg0) {
2.44 + return arg0._toJS(arg0).length === 0;
2.45 +}
2.46 +
2.47 /*
2.48 function java_lang_String_codePointAtII(arg0,arg1) {
2.49 var arg2;
2.50 @@ -3395,6 +3376,8 @@
2.51
2.52 /* new method for JavaScript String */
2.53 String.prototype.charAtCI = java_lang_String_charAtCI;
2.54 +String.prototype.lengthI = java_lang_String_lengthI;
2.55 +String.prototype.isEmptyZ = java_lang_String_isEmptyZ;
2.56
2.57
2.58
3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Fri Sep 28 07:27:34 2012 +0200
3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Fri Sep 28 07:43:53 2012 +0200
3.3 @@ -6,8 +6,28 @@
3.4 */
3.5 public class StringSample {
3.6 public static final String HELLO = "Hello World!";
3.7 + private static int counter;
3.8 +
3.9 + private final int cnt;
3.10 + public StringSample() {
3.11 + cnt = ++counter;
3.12 + }
3.13 +
3.14
3.15 public static char sayHello(int indx) {
3.16 return HELLO.charAt(indx);
3.17 }
3.18 +
3.19 + public static String toStringTest(int howMuch) {
3.20 + StringSample ss = null;
3.21 + for (int i = 0; i < howMuch; i++) {
3.22 + ss = new StringSample();
3.23 + }
3.24 + return ss.toString();
3.25 + }
3.26 +
3.27 + @Override
3.28 + public String toString() {
3.29 + return HELLO + cnt;
3.30 + }
3.31 }
4.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Fri Sep 28 07:27:34 2012 +0200
4.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Fri Sep 28 07:43:53 2012 +0200
4.3 @@ -17,6 +17,14 @@
4.4 "H", 0
4.5 );
4.6 }
4.7 +
4.8 + @Test public void toStringConcatenation() throws Exception {
4.9 + assertExec(
4.10 + "Five executions should generate 5Hello World!",
4.11 + "org_apidesign_vm4brwsr_StringSample_toStringTestLjava_lang_StringI",
4.12 + "5Hello World!", 5
4.13 + );
4.14 + }
4.15
4.16 private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
4.17 StringBuilder sb = new StringBuilder();