From d7547cb76d41da04c8448cf1de8a5b5686152d17 Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Mon, 29 Jun 2015 00:29:15 -0700 Subject: SI-6810 Disallow EOL in char literal It's clear that char literals are one-lined like normal string literals. By the same token, pun intended, char literals accept unicode escapes the same as string literals, including `\u000A`. This commit adds the usual exclusions (CR, NL, SU). The spec is outdated in outlawing chars that are not "printable", in particular, the ASCII control codes. The original intention may have been that the ordinary string escapes are required, such as "\b\n". Note that some common escapes are absent, such as "\a". --- test/files/neg/t6810.check | 22 ++++++++++++++++++++++ test/files/neg/t6810.scala | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 test/files/neg/t6810.check create mode 100644 test/files/neg/t6810.scala (limited to 'test/files/neg') diff --git a/test/files/neg/t6810.check b/test/files/neg/t6810.check new file mode 100644 index 0000000000..8b0e6715aa --- /dev/null +++ b/test/files/neg/t6810.check @@ -0,0 +1,22 @@ +t6810.scala:4: error: unclosed character literal + val y = ' + ^ +t6810.scala:5: error: unclosed character literal +' // but not embedded EOL sequences not represented as escapes +^ +t6810.scala:9: error: unclosed string literal + val Y = " + ^ +t6810.scala:10: error: unclosed string literal +" // obviously not +^ +t6810.scala:20: error: unclosed quoted identifier + val ` + ^ +t6810.scala:21: error: unclosed quoted identifier +` = EOL // not raw string literals aka triple-quoted, multiline strings +^ +t6810.scala:22: error: '=' expected but '}' found. +} +^ +7 errors found diff --git a/test/files/neg/t6810.scala b/test/files/neg/t6810.scala new file mode 100644 index 0000000000..a9d8813389 --- /dev/null +++ b/test/files/neg/t6810.scala @@ -0,0 +1,22 @@ + +trait t6810 { + val x = '\u000A' // char literals accept arbitrary unicode escapes + val y = ' +' // but not embedded EOL sequences not represented as escapes + val z = '\n' // normally, expect this escape + + val X = "\u000A" // it's the same as ordinary string literals + val Y = " +" // obviously not + val Z = "\n" // normally, expect this escape + + val A = """ +""" // which is what these are for + val B = s""" +""" // or the same for interpolated strings + + import scala.compat.Platform.EOL + val `\u000A` = EOL // backquoted identifiers are arbitrary string literals + val ` +` = EOL // not raw string literals aka triple-quoted, multiline strings +} -- cgit v1.2.3