diff --git a/src/library/scala/StringContext.scala b/src/library/scala/StringContext.scala index b4660590ebc4..43f4a39cb3cc 100644 --- a/src/library/scala/StringContext.scala +++ b/src/library/scala/StringContext.scala @@ -389,7 +389,7 @@ object StringContext { protected[scala] def processUnicode(str: String): String = str indexOf "\\" match { - case i if i == -1 || i >= (str.length() - 5) => str + case i if i == -1 || i >= (str.length() - 5) => str case i => replaceU(str, i) } @@ -438,27 +438,28 @@ object StringContext { if (next >= 0) { //require(str(next) == '\\') if (next > i) b.append(str, i, next) - var idx = next + 1 - if (idx >= len) { - b.toString() - } - else { - val (ch, advance) = str(idx) match { - case 'u' => readUEscape(str, idx) - case chr => { - b.append('\\') - (chr, 1) - } + var idx = next + 1 + if (idx >= len) { + if (idx == len) b.append('\\') + b.toString() + } + else { + val (ch, advance) = str(idx) match { + case 'u' => readUEscape(str, idx) + case chr => { + b.append('\\') + (chr, 1) } - idx += advance - b append ch - loop(idx, str.indexOf('\\', idx)) } - } else { - if (i < len) b.append(str, i, len) - b.toString + idx += advance + b.append(ch) + loop(idx, str.indexOf('\\', idx)) } + } else { + if (i < len) b.append(str, i, len) + b.toString() } + } loop(0, first) } diff --git a/test/files/pos/t11966.scala b/test/files/pos/t11966.scala new file mode 100644 index 000000000000..2e9632a34869 --- /dev/null +++ b/test/files/pos/t11966.scala @@ -0,0 +1,7 @@ +// scalac: -Werror -deprecation +// +object Test { + val original = """\/ \/ /\""" + val minimal = """\1234\""" + val alternative = raw"\1234\" +} \ No newline at end of file diff --git a/test/files/run/literals.scala b/test/files/run/literals.scala index 6e7bae64c677..c569436231f0 100644 --- a/test/files/run/literals.scala +++ b/test/files/run/literals.scala @@ -28,11 +28,11 @@ object Test { check_success("'\\u005f' == '_'", '\u005f', '_') //unicode escapes escape in interpolations - check_success("bleh", s"\u0024", "$") - check_success("bleh", s"""\u0024""", "$") + check_success("""s"\\u0024" == "$"""", s"\u0024", "$") + check_success("s\"\"\"\\u0024\"\"\" == \"$\"", s"""\u0024""", "$") - //Int#asInstanceOf[Char] gets the char at the codepont + //Int#asInstanceOf[Char] gets the char at the codepoint check_success("65.asInstanceOf[Char] == 'A'", 65.asInstanceOf[Char], 'A') // boolean