Skip to content

Instantly share code, notes, and snippets.

@tokuhirom
Created August 29, 2016 21:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tokuhirom/ddf5b4843dce86a45a2d34b20b5091a4 to your computer and use it in GitHub Desktop.
Save tokuhirom/ddf5b4843dce86a45a2d34b20b5091a4 to your computer and use it in GitHub Desktop.
JDK triple quote patch
diff -r 6e14043ceae4 src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Thu Aug 11 15:47:10 2016 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Tue Aug 30 06:13:27 2016 +0900
@@ -629,6 +629,39 @@
break loop;
case '\"':
reader.scanChar();
+
+ if (reader.ch == '\"' && reader.bp < reader.buflen) {
+ reader.scanChar();
+ if (reader.ch == '\"' && reader.bp < reader.buflen) { // """
+ reader.scanChar();
+ while (reader.bp < reader.buflen) { // allow CR, LF in """ literal
+ if (reader.ch == '\"' && reader.bp < reader.buflen) {
+ reader.scanChar();
+ if (reader.ch == '\"' && reader.bp < reader.buflen) {
+ reader.scanChar();
+ if (reader.ch == '\"' && reader.bp < reader.buflen) {
+ tk = TokenKind.STRINGLITERAL;
+ reader.scanChar();
+ break loop;
+ } else {
+ reader.putChar('"');
+ reader.putChar('"');
+ }
+ } else {
+ reader.putChar('"');
+ }
+ } else {
+ scanLitChar(pos);
+ }
+ }
+ lexError(pos, "unclosed.str.lit");
+ break loop;
+ } else { // Empty "" literal
+ tk = TokenKind.STRINGLITERAL;
+ break loop;
+ }
+ }
+
while (reader.ch != '\"' && reader.ch != CR && reader.ch != LF && reader.bp < reader.buflen)
scanLitChar(pos);
if (reader.ch == '\"') {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment