diff options
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java | 12 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java | 9 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java index 6c7410e..d46511b 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java @@ -890,9 +890,17 @@ public class JavaWriter implements AutoCloseable { } private void writeStringLiteral(JavaStringLiteral stringLiteral) throws IOException { - // TODO: escaping this.writer.write("\""); - this.writer.write(stringLiteral.value()); + this.writer.write( + stringLiteral.value() + .replace("\\", "\\\\") + .replace("\t", "\\t") + .replace("\b", "\\b") + .replace("\n", "\\n") + .replace("\r", "\\r") + .replace("\f", "\\f") + .replace("\"", "\\\"") + ); this.writer.write("\""); } diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java index fe5fa81..f45a432 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java @@ -1615,6 +1615,15 @@ public class JavaWriterTests { assertThat(string, equalTo("\"hello\"")); } + @Test + public void stringLiteralWithSpecialCharacters() throws IOException { + var java = new JavaStringLiteral("\t\b\n\r\f\"\\"); + + var string = write(writer -> writer.writeTopLevelExpression(java)); + + assertThat(string, equalTo("\"\\t\\b\\n\\r\\f\\\"\\\\\"")); + } + // === Precedence handling === @Test |
