# HG changeset patch # User Jaroslav Tulach # Date 1380803996 -7200 # Node ID 8d9d63f414b5283049c898fc6f78eac73876a539 # Parent 740712318ab3f84497b5f1ad88efff7f44d6cf82 String.replace is now capable to relace a pattern with a longer super pattern diff -r 740712318ab3 -r 8d9d63f414b5 rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/CompareStringsTest.java --- a/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/CompareStringsTest.java Thu Oct 03 14:35:09 2013 +0200 +++ b/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/CompareStringsTest.java Thu Oct 03 14:39:56 2013 +0200 @@ -162,6 +162,10 @@ return res; } + @Compare public String replaceWithItself() { + return "org.apidesign.bck2brwsr.core.JavaScriptBody".replace(".", "\\."); + } + @Factory public static Object[] create() { return VMTest.create(CompareStringsTest.class); diff -r 740712318ab3 -r 8d9d63f414b5 rt/emul/mini/src/main/java/java/lang/String.java --- a/rt/emul/mini/src/main/java/java/lang/String.java Thu Oct 03 14:35:09 2013 +0200 +++ b/rt/emul/mini/src/main/java/java/lang/String.java Thu Oct 03 14:39:56 2013 +0200 @@ -2239,12 +2239,14 @@ "var s = this.toString();\n" + "target = target.toString();\n" + "replacement = replacement.toString();\n" + + "var pos = 0;\n" + "for (;;) {\n" - + " var ret = s.replace(target, replacement);\n" - + " if (ret === s) {\n" - + " return ret;\n" + + " var indx = s.indexOf(target, pos);\n" + + " if (indx === -1) {\n" + + " return s;\n" + " }\n" - + " s = ret;\n" + + " pos = indx + replacement.length;\n" + + " s = s.substring(0, indx) + replacement + s.substring(indx + target.length);\n" + "}" ) public native String replace(CharSequence target, CharSequence replacement);